<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:09:41 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[MDSAL-387] Excessive HashMap.resize() from IdentifiableItemCodec.serialize()</title>
                <link>https://jira.opendaylight.org/browse/MDSAL-387</link>
                <project id="10137" key="MDSAL">mdsal</project>
                    <description>&lt;p&gt;I&apos;m looking at a Java Flight Recording obtained from (internal) scale lab testing, based on Oxygen SR3 code, and see extensive &quot;TLAB Allocations&quot; related to an excessive HashMap.resize() from IdentifiableItemCodec.serialize().&lt;/p&gt;

&lt;p&gt;Wondering if perhaps we could improve this by pre-allocating correctly sized Map?&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;HashMap$Node[] java.util.HashMap.resize()	7552
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; java.util.HashMap.putVal(&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	7552
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; java.util.HashMap.put(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	7366
YangInstanceIdentifier$NodeIdentifierWithPredicates org.opendaylight.mdsal.binding.dom.codec.impl.IdentifiableItemCodec.serialize(InstanceIdentifier$IdentifiableItem)	2842
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; org.opendaylight.mdsal.binding.dom.codec.impl.IdentifiableItemCodec.serialize(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	2842
void org.opendaylight.mdsal.binding.dom.codec.impl.KeyedListNodeCodecContext.addYangPathArgument(InstanceIdentifier$PathArgument, List)	1699
DataContainerCodecContext org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.bindingPathArgumentChild(InstanceIdentifier$PathArgument, List)	1699
DataContainerCodecContext org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext.getCodecContextNode(InstanceIdentifier, List)	1699
Map$Entry org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext.newWriter(InstanceIdentifier, NormalizedNodeStreamWriter)	1692
Map$Entry org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNode(InstanceIdentifier, DataObject)	1692
Map$Entry org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toNormalizedNode(InstanceIdentifier, DataObject)	1692
void org.opendaylight.controller.md.sal.binding.impl.AbstractWriteTransaction.put(LogicalDatastoreType, InstanceIdentifier, DataObject, &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	1692
void org.opendaylight.openflowplugin.common.txchain.TransactionChainManager.writeToTransaction(LogicalDatastoreType, InstanceIdentifier, DataObject, &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	1692
void org.opendaylight.openflowplugin.impl.device.DeviceContextImpl.writeToTransaction(LogicalDatastoreType, InstanceIdentifier, DataObject)	1692
&lt;span class=&quot;code-object&quot;&gt;Void&lt;/span&gt; org.opendaylight.openflowplugin.impl.statistics.StatisticsGatheringUtils.lambda$deleteAllKnownFlows$6(InstanceIdentifier, TxFacade, Optional)	1145
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; org.opendaylight.openflowplugin.impl.statistics.StatisticsGatheringUtils$$Lambda$1924.1642152062.apply(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.doTransform(Function, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.doTransform(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void com.google.common.util.concurrent.AbstractTransformFuture.run()	1145
void com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(&lt;span class=&quot;code-object&quot;&gt;Runnable&lt;/span&gt;)	1145
void com.google.common.util.concurrent.AbstractFuture.executeListener(&lt;span class=&quot;code-object&quot;&gt;Runnable&lt;/span&gt;, Executor)	1145
void com.google.common.util.concurrent.AbstractFuture.addListener(&lt;span class=&quot;code-object&quot;&gt;Runnable&lt;/span&gt;, Executor)	1145
void com.google.common.util.concurrent.AbstractFuture$TrustedFuture.addListener(&lt;span class=&quot;code-object&quot;&gt;Runnable&lt;/span&gt;, Executor)	1145
ListenableFuture com.google.common.util.concurrent.AbstractTransformFuture.create(ListenableFuture, Function, Executor)	1145
ListenableFuture com.google.common.util.concurrent.Futures.transform(ListenableFuture, Function, Executor)	1145
void org.opendaylight.openflowplugin.impl.statistics.StatisticsGatheringUtils.deleteAllKnownFlows(TxFacade, InstanceIdentifier, DeviceFlowRegistry)	1145
void org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestOnTheFlyCallback.startCollecting()	1145
void org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestOnTheFlyCallback.onSuccess(OfHeader)	1145
void org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestOnTheFlyCallback.onSuccess(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; org.opendaylight.openflowjava.protocol.impl.core.connection.OutboundQueueEntry.complete(OfHeader)	1145
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; org.opendaylight.openflowjava.protocol.impl.core.connection.StackedSegment.completeEntry(OutboundQueueEntry, OfHeader)	1145
OutboundQueueEntry org.opendaylight.openflowjava.protocol.impl.core.connection.StackedSegment.pairRequest(OfHeader)	1145
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractStackedOutboundQueue.pairRequest(OfHeader)	1145
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.onMessage(OfHeader)	1145
void org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consumeDeviceMessage(DataObject)	1145
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractConnectionAdapterStatistics.consume(DataObject)	1145
void org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(DataObject)	1145
void org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
ChannelHandlerContext io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
ChannelHandlerContext io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.handler.codec.MessageToMessageDecoder.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
ChannelHandlerContext io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ChannelHandlerContext, CodecOutputList, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	1145
void io.netty.handler.codec.ByteToMessageDecoder.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
ChannelHandlerContext io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ChannelHandlerContext, CodecOutputList, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	1145
void io.netty.handler.codec.ByteToMessageDecoder.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
ChannelHandlerContext io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.handler.timeout.IdleStateHandler.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145
void io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	1145&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="31013">MDSAL-387</key>
            <summary>Excessive HashMap.resize() from IdentifiableItemCodec.serialize()</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="rovarga">Robert Varga</assignee>
                                    <reporter username="vorburger">Michael Vorburger</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 Nov 2018 11:18:07 +0000</created>
                <updated>Mon, 3 Dec 2018 14:57:41 +0000</updated>
                            <resolved>Mon, 3 Dec 2018 14:57:40 +0000</resolved>
                                    <version>Oxygen SR3</version>
                                    <fixVersion>Fluorine SR2</fixVersion>
                    <fixVersion>3.0.3</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="65571" author="vorburger" created="Tue, 13 Nov 2018 11:34:00 +0000"  >&lt;p&gt;There is something similar very here in another code path here as well:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;HashMap$Node[] java.util.HashMap.resize()	200
Object java.util.HashMap.putVal(int, Object, Object, boolean, boolean)	200
Object java.util.HashMap.put(Object, Object)	200
ModifiedNode org.opendaylight.yangtools.yang.data.impl.schema.tree.ModifiedNode.modifyChild(YangInstanceIdentifier$PathArgument, ModificationApplyOperation, Version)	81
OperationWithModification org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.resolveModificationFor(YangInstanceIdentifier)	81
void org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.write(YangInstanceIdentifier, NormalizedNode)	81
void org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction.write(YangInstanceIdentifier, NormalizedNode)	81&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="65572" author="rovarga" created="Tue, 13 Nov 2018 11:38:16 +0000"  >&lt;p&gt;I do both cases are HashMap&apos;s lazy initialization to default size, in this case it&apos;s certainly okay.&lt;/p&gt;</comment>
                            <comment id="65749" author="vorburger" created="Mon, 26 Nov 2018 11:05:50 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=rovarga&quot; class=&quot;user-hover&quot; rel=&quot;rovarga&quot;&gt;rovarga&lt;/a&gt;&#160;seems to be making changes in this area, apparently in reaction to his -1 &amp;amp; -2 on changes I proposed related to this which he didn&apos;t like, but has not tagged the respective changes with this JIRA... so just to clarify, may I ask, does that work address what was raised in this issue:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/78073/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/78073&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://jira.opendaylight.org/browse/YANGTOOLS-917&quot; title=&quot;Allow OffsetMaps to be efficiently instantiated&quot; class=&quot;issue-link&quot; data-issue-key=&quot;YANGTOOLS-917&quot;&gt;&lt;del&gt;YANGTOOLS-917&lt;/del&gt;&lt;/a&gt;&#160;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;so should this be closed as Done? If so, for which ODL release? Post-Neon, Neon, Fluorine, Oxygen?&lt;/p&gt;

&lt;p&gt;Or is this still TBD by building on top of your recent work?&lt;/p&gt;

&lt;p&gt;Tx.&lt;/p&gt;</comment>
                            <comment id="65752" author="rovarga" created="Mon, 26 Nov 2018 14:26:48 +0000"  >&lt;p&gt;Most of this was refactored as part of adoption of &lt;a href=&quot;https://jira.opendaylight.org/browse/YANGTOOLS-917&quot; title=&quot;Allow OffsetMaps to be efficiently instantiated&quot; class=&quot;issue-link&quot; data-issue-key=&quot;YANGTOOLS-917&quot;&gt;&lt;del&gt;YANGTOOLS-917&lt;/del&gt;&lt;/a&gt;, with the last bit being specialization of single-leaf keys.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="31026">YANGTOOLS-917</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03kdz:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>