<!-- 
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-388] Cache successful augmentation substitutions</title>
                <link>https://jira.opendaylight.org/browse/MDSAL-388</link>
                <project id="10137" key="MDSAL">mdsal</project>
                    <description>&lt;p&gt;One of the very top &quot;TLAB allocation&quot; (cumulative nearing 100 GiB - that&apos;s a hell of a lot, no?) observed in a JFR from internal scale testing based on Oxygen SR3 code, which seems to contributed to excessive GC, is the code path below.&lt;/p&gt;

&lt;p&gt;I&apos;m seeing this with slight variations, curiously always from openflowplugin (is it doing anything obviously wrong here, which could be improved?). Just wondering if there is any way that this could be optimized to cause less object allocation?  Could that reflection stuff it seems to be doing here perhaps be cached?&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;void java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;$MethodArray.&amp;lt;init&amp;gt;(&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	34969
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.getMethod0(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	34969
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.privateGetMethodRecursive(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;$MethodArray)	34237
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.getMethod0(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	34237
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.privateGetMethodRecursive(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;$MethodArray)	31798
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.getMethod0(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	31798
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.privateGetMethodRecursive(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;$MethodArray)	20695
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.getMethod0(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	20695
Method java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.getMethod(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;[])	11300
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; org.opendaylight.yangtools.yang.binding.util.BindingReflections.isSubstitutionFor(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11300
DataContainerCodecPrototype org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.augmentationByClassOrEquivalentClass(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11300
DataContainerCodecPrototype org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.augmentationByClass(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11300
DataContainerCodecPrototype org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.streamChildPrototype(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11300
Optional org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.possibleStreamChild(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11300
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; org.opendaylight.mdsal.binding.dom.codec.impl.LazyDataObject.getAugmentationImpl(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11300
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; org.opendaylight.mdsal.binding.dom.codec.impl.LazyDataObject.invoke(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, Method, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;[])	11300
Augmentation com.sun.proxy.$Proxy503.getAugmentation(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	11071
Optional org.opendaylight.openflowplugin.extension.api.GroupingResolver.getExtension(Augmentable)	11071
MatchEntry org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.RegConvertor.convert(Extension)	11071
DataContainer org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match.RegConvertor.convert(Extension)	11071
MatchEntry org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.lambda$&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;$4(ExtensionList, ByteBuf, ConvertorToOFJava)	11071
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer$$Lambda$2185.946006913.apply(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	11071
Optional java.util.Optional.map(Function)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.lambda$serializeExtensionList$6(ByteBuf, ExtensionList)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer$$Lambda$2182.730382268.accept(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	11071
void java.util.ArrayList.forEach(Consumer)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.serializeExtensionList(List, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.lambda$serializeHeader$2(ByteBuf, List)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer$$Lambda$2069.1596170542.accept(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	11071
void java.util.Optional.ifPresent(Consumer)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.serializeHeader(Match, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.serialize(Match, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.match.MatchSerializer.serialize(DataContainer, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.messages.FlowMessageSerializer.writeMatch(FlowMessage, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.messages.FlowMessageSerializer.writeFlow(FlowMessage, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.messages.FlowMessageSerializer.serialize(FlowMessage, ByteBuf)	11071
void org.opendaylight.openflowplugin.impl.protocol.serialization.messages.FlowMessageSerializer.serialize(DataContainer, ByteBuf)	11071
void org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory.messageToBuffer(&lt;span class=&quot;code-object&quot;&gt;short&lt;/span&gt;, ByteBuf, DataObject)	11071
void org.opendaylight.openflowjava.protocol.impl.core.OFEncoder.encode(ChannelHandlerContext, MessageListenerWrapper, ByteBuf)	11071
void org.opendaylight.openflowjava.protocol.impl.core.OFEncoder.encode(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, ByteBuf)	11071
void io.netty.handler.codec.MessageToByteEncoder.write(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, ChannelPromise)	11071
void io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, ChannelPromise)	11071
void io.netty.channel.AbstractChannelHandlerContext.invokeWrite(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, ChannelPromise)	11071
void io.netty.channel.AbstractChannelHandlerContext.write(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;, ChannelPromise)	11071
ChannelFuture io.netty.channel.AbstractChannelHandlerContext.write(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, ChannelPromise)	11071
ChannelFuture io.netty.channel.AbstractChannelHandlerContext.write(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	11071
ChannelFuture io.netty.channel.DefaultChannelPipeline.write(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	11071
ChannelFuture io.netty.channel.AbstractChannel.write(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	11071
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.writeMessage(OfHeader, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)	11071
void org.opendaylight.openflowjava.protocol.impl.core.connection.OutboundQueueManager.writeMessage(OfHeader, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)	11071
&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractStackedOutboundQueue.writeEntries(Channel, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)	11071
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.writeAndFlush()	11071
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.flush()	10043
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.lambda$&lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;$0()	10043
void org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager$$Lambda$1465.2105557852.run()	10043
void io.netty.util.concurrent.AbstractEventExecutor.safeExecute(&lt;span class=&quot;code-object&quot;&gt;Runnable&lt;/span&gt;)	10043
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasksFrom(Queue)	10043
&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks()	10043
void io.netty.channel.nio.NioEventLoop.run()	10043
void io.netty.util.concurrent.SingleThreadEventExecutor$5.run()	10043
void io.netty.util.concurrent.FastThreadLocalRunnable.run()	10043
void java.lang.&lt;span class=&quot;code-object&quot;&gt;Thread&lt;/span&gt;.run()	10043&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="31020">MDSAL-388</key>
            <summary>Cache successful augmentation substitutions</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 13:26:02 +0000</created>
                <updated>Wed, 26 Feb 2020 15:29:03 +0000</updated>
                            <resolved>Mon, 19 Nov 2018 12:55:00 +0000</resolved>
                                                    <fixVersion>Fluorine SR2</fixVersion>
                    <fixVersion>Oxygen SR4</fixVersion>
                    <fixVersion>3.0.2</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="65577" author="rovarga" created="Tue, 13 Nov 2018 13:42:05 +0000"  >&lt;p&gt;GroupingResolver is doing something funky, I am not quite sure what and why &#8211; that is leading DataObjectCodecContext off of the fast path.&lt;/p&gt;</comment>
                            <comment id="65687" author="vorburger" created="Fri, 16 Nov 2018 10:49:52 +0000"  >&lt;p&gt;Reminder: Need to double check how &lt;a href=&quot;https://jira.opendaylight.org/browse/OPNFLWPLUG-1050&quot; title=&quot;Make Grouping{Loose}Resolver immutatable&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OPNFLWPLUG-1050&quot;&gt;&lt;del&gt;OPNFLWPLUG-1050&lt;/del&gt;&lt;/a&gt; related to this ...&lt;/p&gt;</comment>
                            <comment id="65689" author="rovarga" created="Fri, 16 Nov 2018 12:06:20 +0000"  >&lt;p&gt;Aside from me looking at GroupingResolver and screaming in anguish over public mutable collections.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=vorburger&quot; class=&quot;user-hover&quot; rel=&quot;vorburger&quot;&gt;vorburger&lt;/a&gt; if you are looking to improve things further, I would suggest looking at the reported stack trace and cleaning up OFP&apos;s use of capturing lambdas (like MatchSerializer.serializeHeader()&apos;s use of Map.forEach()) and this wonderful pattern:&lt;/p&gt;

&lt;p&gt;&#160;&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;
Foo nullableFoo;
&lt;span class=&quot;code-comment&quot;&gt;// I can haz two &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; objucts? coz is l33ter than &lt;span class=&quot;code-quote&quot;&gt;&apos;&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (nullableFoo != &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;)&apos;&lt;/span&gt;!
&lt;/span&gt;Optional.ofNullable(nullableFoo).ifPresent(nonnullFoo -&amp;gt; {
    &lt;span class=&quot;code-comment&quot;&gt;// Moar codez goes here...
&lt;/span&gt;})&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="65691" author="vorburger" created="Fri, 16 Nov 2018 14:03:54 +0000"  >&lt;p&gt;OMG &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.opendaylight.org/images/icons/emoticons/tongue.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10002">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="26881">MDSAL-59</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="31061">OPNFLWPLUG-1050</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|i03kfj:</customfieldvalue>

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