<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:56:01 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>[CONTROLLER-1620] StackOverflowError while shard is committing</title>
                <link>https://jira.opendaylight.org/browse/CONTROLLER-1620</link>
                <project id="10113" key="CONTROLLER">controller</project>
                    <description>&lt;p&gt;Scale testing on latest Boron code with 3-node cluster as part of an openstack solution. &lt;br/&gt;
200 OVSs are connected, and 1 VM per OVS.&lt;br/&gt;
ODL3 crashed because of a StackOverflowError:&lt;br/&gt;
2017-03-22T21:00:38.704+0200: &lt;span class=&quot;error&quot;&gt;&amp;#91;GC pause (G1 Evacuation Pause) (young) 21G-&amp;gt;8029M(24G), 0.0591195 secs&amp;#93;&lt;/span&gt;&lt;br/&gt;
Uncaught error from thread &lt;span class=&quot;error&quot;&gt;&amp;#91;opendaylight-cluster-data-akka.actor.default-dispatcher-49&amp;#93;&lt;/span&gt; shutting down JVM since &apos;akka.jvm-exit-on-fatal-error&apos; is enabled for ActorSystem&lt;span class=&quot;error&quot;&gt;&amp;#91;opendaylight-cluster-data&amp;#93;&lt;/span&gt;&lt;br/&gt;
java.lang.StackOverflowError&lt;br/&gt;
        at org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode.getValue(AbstractImmutableDataContainerNode.java:38)&lt;br/&gt;
        at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder.&amp;lt;init&amp;gt;(ImmutableMapEntryNodeBuilder.java:45)&lt;br/&gt;
        at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder.create(ImmutableMapEntryNodeBuilder.java:61)&lt;br/&gt;
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.ListEntryModificationStrategy.createBuilder(ListEntryModificationStrategy.java:64)&lt;br/&gt;
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.ListEntryModificationStrategy.createBuilder(ListEntryModificationStrategy.java:22)&lt;br/&gt;
....&lt;/p&gt;

&lt;p&gt;This can be seen in karaf.out&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="26174">CONTROLLER-1620</key>
            <summary>StackOverflowError while shard is committing</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                                <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="guy.sela@hpe.com">Guy Sela</reporter>
                        <labels>
                    </labels>
                <created>Thu, 23 Mar 2017 09:51:02 +0000</created>
                <updated>Tue, 25 Jul 2023 08:24:27 +0000</updated>
                            <resolved>Mon, 15 May 2017 22:44:43 +0000</resolved>
                                                                    <component>clustering</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="51868" author="guy.sela@hpe.com" created="Thu, 23 Mar 2017 09:51:02 +0000"  >&lt;p&gt;Attachment odl3.tar.gz has been added with description: ODL3 logs&lt;/p&gt;</comment>
                            <comment id="51855" author="rovarga" created="Thu, 23 Mar 2017 13:11:21 +0000"  >&lt;p&gt;I assume we can ignore the NPEs from neutron for now.&lt;/p&gt;

&lt;p&gt;The interesting part of the stack trace is actually:&lt;/p&gt;

&lt;p&gt;        at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractDataTreeTip.prepare(AbstractDataTreeTip.java:53)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startPreCommit(ShardDataTree.java:577)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.preCommit(SimpleShardDataTreeCohort.java:91)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.preCommit(CohortEntry.java:102)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$200(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:243)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:237)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulCanCommit(SimpleShardDataTreeCohort.java:145)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextTransaction(ShardDataTree.java:526)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.finishCommit(ShardDataTree.java:623)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startCommit(ShardDataTree.java:635)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.commit(SimpleShardDataTreeCohort.java:132)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.commit(CohortEntry.java:106)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.finishCommit(ShardCommitCoordinator.java:316)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$400(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(ShardCommitCoordinator.java:299)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulPreCommit(SimpleShardDataTreeCohort.java:169)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startPreCommit(ShardDataTree.java:591)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.preCommit(SimpleShardDataTreeCohort.java:91)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.preCommit(CohortEntry.java:102)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$200(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:243)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:237)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulCanCommit(SimpleShardDataTreeCohort.java:145)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextTransaction(ShardDataTree.java:526)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.finishCommit(ShardDataTree.java:623)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startCommit(ShardDataTree.java:635)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.commit(SimpleShardDataTreeCohort.java:132)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.commit(CohortEntry.java:106)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.finishCommit(ShardCommitCoordinator.java:316)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$400(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(ShardCommitCoordinator.java:299)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulPreCommit(SimpleShardDataTreeCohort.java:169)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startPreCommit(ShardDataTree.java:591)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.preCommit(SimpleShardDataTreeCohort.java:91)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.preCommit(CohortEntry.java:102)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$200(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:243)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:237)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulCanCommit(SimpleShardDataTreeCohort.java:145)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextTransaction(ShardDataTree.java:526)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.finishCommit(ShardDataTree.java:623)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startCommit(ShardDataTree.java:635)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.commit(SimpleShardDataTreeCohort.java:132)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.commit(CohortEntry.java:106)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.finishCommit(ShardCommitCoordinator.java:316)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$400(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(ShardCommitCoordinator.java:299)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulPreCommit(SimpleShardDataTreeCohort.java:169)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startPreCommit(ShardDataTree.java:591)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.preCommit(SimpleShardDataTreeCohort.java:91)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.preCommit(CohortEntry.java:102)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(ShardCommitCoordinator.java:296)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.access$200(ShardCommitCoordinator.java:49)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:243)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(ShardCommitCoordinator.java:237)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulCanCommit(SimpleShardDataTreeCohort.java:145)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextTransaction(ShardDataTree.java:526)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.finishCommit(ShardDataTree.java:623)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.startCommit(ShardDataTree.java:635)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.commit(SimpleShardDataTreeCohort.java:132)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.CohortEntry.commit(CohortEntry.java:106)&lt;/p&gt;

&lt;p&gt;Which means we have a deep chain of transactions completing with direct commit protocol, which is exhausting stack to the point where there is not enough head room for codecs to run.&lt;/p&gt;</comment>
                            <comment id="51856" author="guy.sela@hpe.com" created="Thu, 23 Mar 2017 13:19:32 +0000"  >&lt;p&gt;If there is no bug there, just a long stack, we can just use: -Xss&lt;/p&gt;</comment>
                            <comment id="51857" author="rovarga" created="Thu, 23 Mar 2017 13:22:54 +0000"  >&lt;p&gt;Well, stack size is a rather huge hammer which will cover the problem but not solve it, as the number of transactions completing does not really have an upper bound. It also has the downside of each thread costing more VSS, clamping the ability to spawn threads.&lt;/p&gt;

&lt;p&gt;Can you enable TRACE logs for org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator, please?&lt;/p&gt;</comment>
                            <comment id="51858" author="guy.sela@hpe.com" created="Thu, 23 Mar 2017 13:28:50 +0000"  >&lt;p&gt;Yeah but reproduction is not trivial (scale setup), so when I&apos;ll reach this scenario again I&apos;ll try to add the log.&lt;/p&gt;</comment>
                            <comment id="51859" author="rovarga" created="Thu, 23 Mar 2017 14:50:43 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/53738&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/53738&lt;/a&gt; helps a tiny bit by eliminating synthetic accessors seen in the stack trace.&lt;/p&gt;</comment>
                            <comment id="51860" author="rovarga" created="Thu, 23 Mar 2017 18:01:37 +0000"  >&lt;p&gt;So the code structure seems to indicate that we are dealing with operational data store, tons of small transactions which get unblocked after some sort of an up-event (data store being ready or similar).&lt;/p&gt;

&lt;p&gt;What we have here is an on-stack chain of futures completing immediately and invoking callbacks. I suspect we need to keep some sort of a counter as to how many transactions we have batched and check it between:&lt;/p&gt;

&lt;p&gt;        at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextTransaction(ShardDataTree.java:526)&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.finishCommit(ShardDataTree.java:623)&lt;/p&gt;

&lt;p&gt;I.e. at some point we want processNextTransaction() to decide it has committed enough transactions and it is time to sleep for a bit &amp;#8211; perhaps by enqueueing a message to re-trigger itself. Then it will process next batch of transactions with an unwound stack.&lt;/p&gt;</comment>
                            <comment id="51861" author="tpantelis" created="Fri, 24 Mar 2017 01:20:47 +0000"  >&lt;p&gt;It&apos;s interesting that it&apos;s taking the short-cut to bypass replication in startCommit:&lt;/p&gt;

&lt;p&gt;  if (shard.canSkipPayload() || candidate.getRootNode()&lt;br/&gt;
                     .getModificationType() == ModificationType.UNMODIFIED) &lt;/p&gt;
{
      finishCommit(cohort);
      return;
  }

&lt;p&gt;which is what causes the recursion. Since this is a 3-node cluster, canSkipPayload should not evaluate to true as it has followers. Therefore it seems it&apos;s getting a lot of successive UNMODIFIED transactions. Not sure if that is normal.&lt;/p&gt;

&lt;p&gt;This occurred in Boron. In Carbon we removed the shortcut for UNMODIFIED transactions -  they are now persisted/replicated/applied. However it can still recurse if data isn&apos;t persisted nor replicated (i.e. operational data in single-node) plus we added the pipe-lining which I think could also lead to a stack overflow.&lt;/p&gt;

&lt;p&gt;We need to limit the number of recursive calls in ShardDataTree in the context of processing a single message. Perhaps we can use a thread local var to track the count.&lt;/p&gt;

&lt;p&gt;(In reply to Robert Varga from comment #6)&lt;br/&gt;
&amp;gt; So the code structure seems to indicate that we are dealing with operational&lt;br/&gt;
&amp;gt; data store, tons of small transactions which get unblocked after some sort&lt;br/&gt;
&amp;gt; of an up-event (data store being ready or similar).&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; What we have here is an on-stack chain of futures completing immediately and&lt;br/&gt;
&amp;gt; invoking callbacks. I suspect we need to keep some sort of a counter as to&lt;br/&gt;
&amp;gt; how many transactions we have batched and check it between:&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt;         at&lt;br/&gt;
&amp;gt; org.opendaylight.controller.cluster.datastore.ShardDataTree.&lt;br/&gt;
&amp;gt; processNextTransaction(ShardDataTree.java:526)&lt;br/&gt;
&amp;gt;         at&lt;br/&gt;
&amp;gt; org.opendaylight.controller.cluster.datastore.ShardDataTree.&lt;br/&gt;
&amp;gt; finishCommit(ShardDataTree.java:623)&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; I.e. at some point we want processNextTransaction() to decide it has&lt;br/&gt;
&amp;gt; committed enough transactions and it is time to sleep for a bit &amp;#8211; perhaps&lt;br/&gt;
&amp;gt; by enqueueing a message to re-trigger itself. Then it will process next&lt;br/&gt;
&amp;gt; batch of transactions with an unwound stack.&lt;/p&gt;</comment>
                            <comment id="51862" author="rovarga" created="Fri, 24 Mar 2017 08:58:23 +0000"  >&lt;p&gt;It does not need to be thread-local. We can keep a simple counter in ShardDataTree and reset it from Shard everytime we start processing a message.&lt;/p&gt;</comment>
                            <comment id="51863" author="k.v.suneelu.verma@ericsson.com" created="Mon, 27 Mar 2017 15:52:46 +0000"  >&lt;p&gt;We ran into the same error today in our scale setup using stable/boron.&lt;br/&gt;
We are using resource batch manager from genius repo to batch the transactions.&lt;br/&gt;
The volume of write from batch manager across transactions is 4k.&lt;br/&gt;
Not sure about how many transactions batch manager created for this 4k as we did not enable logs.&lt;/p&gt;</comment>
                            <comment id="51864" author="k.v.suneelu.verma@ericsson.com" created="Mon, 27 Mar 2017 15:55:20 +0000"  >&lt;p&gt;Actually two out of three controllers wend down from the 3 node cluster with the same error.&lt;/p&gt;</comment>
                            <comment id="51865" author="rovarga" created="Fri, 12 May 2017 13:35:23 +0000"  >&lt;p&gt;carbon: &lt;a href=&quot;https://git.opendaylight.org/gerrit/56948&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/56948&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="51866" author="rovarga" created="Fri, 12 May 2017 14:24:19 +0000"  >&lt;p&gt;This can actually occur if a prefix-based shard is not replicated and not persisted &amp;#8211; hence this is a blocker for Carbon.&lt;/p&gt;</comment>
                            <comment id="51867" author="anipbu" created="Mon, 15 May 2017 22:41:01 +0000"  >&lt;p&gt;Patch &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/56948/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/56948/&lt;/a&gt; was successfully merged.  Can we mark this bug as fixed and resolved?&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10002">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="26220">CONTROLLER-1666</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="13627" name="odl3.tar.gz" size="632602" author="guy.sela@hpe.com" created="Thu, 23 Mar 2017 09:51:02 +0000"/>
                    </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_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>8056</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10201" key="com.atlassian.jira.plugin.system.customfieldtypes:url">
                        <customfieldname>External issue URL</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[https://bugs.opendaylight.org/show_bug.cgi?id=8056]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10206" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Issue Type</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10300"><![CDATA[Bug]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10204" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>ODL SR Target Milestone</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10322"><![CDATA[Boron-4]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i02rp3:</customfieldvalue>

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