snmpa_mib_data_tttn.erl hangs

Alex Hudich <[email protected]> Tue, 7 Feb 2017 01:39:25 +0300
Newsgroups gmane.comp.lang.erlang.bugs
Message-ID <[email protected]>
--===============6701323766919632358==
Content-Type: multipart/alternative; boundary="Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99"


--Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi!

I was wondering why simple erlang program hangs and consumes a lot of =
memory when it starts agent with simpliest MIB file:


JSM-MIB DEFINITIONS ::=3D BEGIN
          IMPORTS
	      OBJECT-TYPE    FROM RFC-1212
	      experimental   FROM RFC1155-SMI
	      ;
=20
	  jsm		OBJECT IDENTIFIER ::=3D { experimental 17780513 =
}

	  jsmName OBJECT-TYPE
              SYNTAX  OCTET STRING (SIZE (0..255))
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION =C2=ABDescription=C2=BB
              ::=3D { jsm 1 }
END


So I've found that in snmpa_mib_data_tttn.erl function integrate_indexes =
creates a huge list of undefined_nodes atoms before it could insert MIB =
data at 17780513 position!


integrate_indexes(CurIndex, [{CurIndex, Data} | T]) ->
    [Data | integrate_indexes(CurIndex + 1, T)];
integrate_indexes(_Index, []) ->
    [];
integrate_indexes(CurIndex, L) ->
    [undefined_node | integrate_indexes(CurIndex + 1, L)].


Why not use maps for the purpose of indexing and just skip unset =
positions?


Alexander Hudich
@alttagil=20


--Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D""><div class=3D""><div class=3D"">Hi!</div><div class=3D""><br =
class=3D""></div><div class=3D"">I was wondering why simple erlang =
program hangs and consumes a lot of memory when it starts agent with =
simpliest MIB file:</div><div class=3D""><br class=3D""></div><div =
class=3D""><br class=3D""></div><div class=3D""><i class=3D"">JSM-MIB =
DEFINITIONS ::=3D BEGIN</i></div><div class=3D""><i class=3D"">&nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; IMPORTS</i></div><div class=3D""><i =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>&nbsp;&nbsp; &nbsp; &nbsp;OBJECT-TYPE &nbsp; &nbsp;FROM =
RFC-1212</i></div><div class=3D""><i class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>&nbsp;&nbsp; &nbsp; &nbsp;experimental &nbsp; FROM =
RFC1155-SMI</i></div><div class=3D""><i class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>&nbsp;&nbsp; &nbsp; &nbsp;;</i></div><div class=3D""><i =
class=3D"">&nbsp;</i></div><div class=3D""><i class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>&nbsp;&nbsp;jsm<span class=3D"Apple-tab-span" style=3D"white-space:=
 pre;">		</span>OBJECT IDENTIFIER ::=3D { experimental 17780513 =
}</i></div><div class=3D""><i class=3D""><br class=3D""></i></div><div =
class=3D""><i class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>&nbsp;&nbsp;jsmName =
OBJECT-TYPE</i></div><div class=3D""><i class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; SYNTAX &nbsp;OCTET STRING (SIZE =
(0..255))</i></div><div class=3D""><i class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; ACCESS &nbsp;read-only</i></div><div =
class=3D""><i class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; STATUS &nbsp;mandatory</i></div><div class=3D""><i =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
DESCRIPTION&nbsp;=C2=ABDescription=C2=BB</i></div><div class=3D""><i =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ::=3D { jsm =
1 }</i></div><div class=3D""><i class=3D"">END</i></div></div><div =
class=3D""><br class=3D""></div><div class=3D""><br class=3D""></div><div =
class=3D"">So I've found that in&nbsp;snmpa_mib_data_tttn.erl function =
integrate_indexes creates a huge list of undefined_nodes atoms before it =
could insert MIB data at 17780513 position!</div><div class=3D""><br =
class=3D""></div><div class=3D""><br class=3D""></div><div class=3D""><i =
class=3D"">integrate_indexes(CurIndex, [{CurIndex, Data} | T]) =
-&gt;</i></div><div class=3D""><i class=3D"">&nbsp; &nbsp; [Data | =
integrate_indexes(CurIndex + 1, T)];</i></div><div class=3D""><i =
class=3D"">integrate_indexes(_Index, []) -&gt;</i></div><div class=3D""><i=
 class=3D"">&nbsp; &nbsp; [];</i></div><div class=3D""><i =
class=3D"">integrate_indexes(CurIndex, L) -&gt;</i></div><div =
class=3D""><i class=3D"">&nbsp; &nbsp; [undefined_node | =
integrate_indexes(CurIndex + 1, L)].</i></div><div class=3D""><br =
class=3D""></div><div class=3D""><br class=3D""></div><div class=3D"">Why =
not use maps for the purpose of indexing and just skip unset =
positions?</div><div class=3D""><br class=3D""></div><div class=3D""><br =
class=3D""></div><div class=3D"">Alexander Hudich</div><div =
class=3D"">@alttagil&nbsp;</div><div class=3D""><br =
class=3D""></div></body></html>=

--Apple-Mail=_3F6DD776-3C2E-4891-A468-9BE822881A99--

--===============6701323766919632358==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
erlang-bugs mailing list
[email protected]
http://erlang.org/mailman/listinfo/erlang-bugs

--===============6701323766919632358==--