<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:36:29 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>[OVSDB-471] Excessive memory allocation (&quot;object churn&quot;) in OVSDB&apos;s Jackson based JSON processing</title>
                <link>https://jira.opendaylight.org/browse/OVSDB-471</link>
                <project id="10158" key="OVSDB">ovsdb</project>
                    <description>&lt;p&gt;I&apos;m looking at a Java Flight Recording obtained from (internal) scale lab testing, and see extensive &quot;TLAB Allocations&quot; due to what appears to be something wrong in ovsdb&apos;s JSON processing:&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;&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt;[] java.util.Arrays.copyOfRange(&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	2671
void java.lang.&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;.&amp;lt;init&amp;gt;(&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	2671
&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; java.lang.StringBuilder.toString()	2145
&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; sun.reflect.generics.parser.SignatureParser.parseIdentifier()	812
SimpleClassTypeSignature sun.reflect.generics.parser.SignatureParser.parsePackageNameAndSimpleClassTypeSignature()	692
ClassTypeSignature sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature()	692
FieldTypeSignature sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	692
FieldTypeSignature sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature()	692
TypeArgument sun.reflect.generics.parser.SignatureParser.parseTypeArgument()	370
TypeArgument[] sun.reflect.generics.parser.SignatureParser.parseTypeArguments()	370
SimpleClassTypeSignature sun.reflect.generics.parser.SignatureParser.parsePackageNameAndSimpleClassTypeSignature()	370
ClassTypeSignature sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature()	370
FieldTypeSignature sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt;)	370
FieldTypeSignature sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature()	370
TypeSignature sun.reflect.generics.parser.SignatureParser.parseTypeSignature()	370
TypeSignature sun.reflect.generics.parser.SignatureParser.parseTypeSig(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;)	309
TypeSignature sun.reflect.generics.repository.FieldRepository.parse(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;)	309
Tree sun.reflect.generics.repository.FieldRepository.parse(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;)	309
void sun.reflect.generics.repository.AbstractRepository.&amp;lt;init&amp;gt;(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, GenericsFactory)	309
void sun.reflect.generics.repository.FieldRepository.&amp;lt;init&amp;gt;(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, GenericsFactory)	309
FieldRepository sun.reflect.generics.repository.FieldRepository.make(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, GenericsFactory)	309
FieldRepository java.lang.reflect.Field.getGenericInfo()	309
Type java.lang.reflect.Field.getGenericType()	309
JavaType com.fasterxml.jackson.databind.introspect.AnnotatedField.getType()	309
void com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(DeserializationContext, BeanDescription, BeanDeserializerBuilder)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(DeserializationContext, JavaType, BeanDescription)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(DeserializationContext, JavaType, BeanDescription)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializationContext, DeserializerFactory, JavaType, BeanDescription)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializationContext, DeserializerFactory, JavaType)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializationContext, DeserializerFactory, JavaType)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	309
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	309
JsonDeserializer com.fasterxml.jackson.databind.DeserializationContext.findNonContextualValueDeserializer(JavaType)	306
void com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(DeserializationContext)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(JavaType, BeanProperty)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.std.MapDeserializer.createContextual(DeserializationContext, BeanProperty)	306
JsonDeserializer com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(JsonDeserializer, BeanProperty, JavaType)	306
void com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(DeserializationContext)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(JavaType, BeanProperty)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.std.MapDeserializer.createContextual(DeserializationContext, BeanProperty)	306
JsonDeserializer com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(JsonDeserializer, BeanProperty, JavaType)	306
void com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(DeserializationContext)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializationContext, DeserializerFactory, JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(JavaType)	306
JsonDeserializer com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(DeserializationContext, JavaType)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.fasterxml.jackson.databind.ObjectMapper._convert(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, JavaType)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.fasterxml.jackson.databind.ObjectMapper.convertValue(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	306
UpdateNotification org.opendaylight.ovsdb.lib.notation.json.Converter$UpdateNotificationDeser.deserialize(JsonNode)	306
UpdateNotification org.opendaylight.ovsdb.lib.notation.json.Converter$UpdateNotificationConverter.convert(JsonNode)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; org.opendaylight.ovsdb.lib.notation.json.Converter$UpdateNotificationConverter.convert(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer.convertValue(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer.deserialize(JsonParser, DeserializationContext)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.fasterxml.jackson.databind.ObjectMapper._convert(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, JavaType)	306
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; com.fasterxml.jackson.databind.ObjectMapper.convertValue(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;)	306
void org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcEndpoint.processRequest(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;, JsonNode)	306
void org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcServiceBinderHandler.channelRead(ChannelHandlerContext, &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)	306&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="31003">OVSDB-471</key>
            <summary>Excessive memory allocation (&quot;object churn&quot;) in OVSDB&apos;s Jackson based JSON processing</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="4" iconUrl="https://jira.opendaylight.org/images/icons/priorities/minor.svg">Low</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="10001">Won&apos;t Do</resolution>
                                        <assignee username="thapar">Vishal Thapar</assignee>
                                    <reporter username="vorburger">Michael Vorburger</reporter>
                        <labels>
                    </labels>
                <created>Mon, 12 Nov 2018 17:33:02 +0000</created>
                <updated>Fri, 16 Nov 2018 15:14:09 +0000</updated>
                            <resolved>Fri, 16 Nov 2018 15:14:09 +0000</resolved>
                                    <version>Oxygen-SR3</version>
                                    <fixVersion>Oxygen-SR4</fixVersion>
                    <fixVersion>Fluorine-SR2</fixVersion>
                    <fixVersion>Neon</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="65561" author="skitt@redhat.com" created="Tue, 13 Nov 2018 08:38:03 +0000"  >&lt;p&gt;The JFR results don&#8217;t necessarily support the diagnosis given here; in particular&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;
&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt;[] java.util.Arrays.copyOfRange(&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	2671
void java.lang.&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;.&amp;lt;init&amp;gt;(&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)	2671
&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; java.lang.StringBuilder.toString()	2145
&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; sun.reflect.generics.parser.SignatureParser.parseIdentifier()	812
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;since one call to parseIdentifier() only ever results in one call to StringBuilder.toString().&lt;/p&gt;

&lt;p&gt;The JFR stack trace pinpoints majority contributors at each level: the above trace means that there were 2671 calls to copyOfRange(); the most common caller was String&#8217;s constructor (in 2671 cases, so in all cases here); the most common caller of the constructor was StringBuilder.toString(), in 2145 cases; the most common caller of StringBuilder.toString() was parseIdentifier(), in 812 cases. That leaves 1859 unexplained calls to copyOfRange().&lt;/p&gt;</comment>
                            <comment id="65696" author="vorburger" created="Fri, 16 Nov 2018 15:13:59 +0000"  >&lt;h3&gt;&lt;a name=&quot;fuhgeddaboudit&quot;&gt;&lt;/a&gt;fuhgeddaboudit&lt;/h3&gt;</comment>
                    </comments>
                    <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|i03kbr:</customfieldvalue>

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