<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:15:44 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>[NETCONF-724] Making NETCONF chunk aggregator more robust</title>
                <link>https://jira.opendaylight.org/browse/NETCONF-724</link>
                <project id="10142" key="NETCONF">netconf</project>
                    <description>&lt;p&gt;Currently, if an error occurs during composition of NETCONF chunks into NETCONF RPC replies (for example, written number of chunk bytes is not correct), some exception is thrown. However, this exception is never handled on NETCONF layer using NETTY&apos;s exceptionCaught(..) handler method (for example, in the last processing bit of NETCONF channel pipeline - AbstractNetconfSession or derived class). It results in:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Stalled NETCONF channel - unhandled exception in NETTY channel pipeline is just logged in DefaultChannelPipeline.onUnhandledInboundException(..) - but the state of NetconfChunkAggregator and possibly other components stays corrupted.&lt;/li&gt;
	&lt;li&gt;Client&apos;s futures in the transaction (from mountpoint DOMDataBroker) are not completed until they are dropped by timeout or underlay session is dropped.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Possible solutions:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Just invalidate all requests in the queue of NetconfDeviceCommunicator on caught exception and reset state of the handlers across channel pipeline - this is not nice solution, because we could also drop futures that didn&apos;t cause issue (isolation between requests is weakened).&lt;/li&gt;
	&lt;li&gt;Try to look for message-id of invalid reply on caught exception - if it can be found, then invalidate only request with this message-id. Then we can ignore other bytes that belong to corrupted NETCONF reply and continue processing of next chunks only from the next valid chunk. This is more complex solution but cleaner.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Motivation:&lt;/p&gt;

&lt;p&gt;IOS XR 6.1.2/6.6.x seems to be buggy - after sending get-config request on path to Operational datastore it sometimes inserts RPC errors into response but these RPC errors are not counted in chunk size. This happens more often when get RPC is invoked on data that has a lot of lines (measured in thousands). For example:&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;
&amp;lt;get&amp;gt;
&amp;lt;filter xmlns:ns0=&lt;span class=&quot;code-quote&quot;&gt;&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot;&lt;/span&gt; ns0:type=&lt;span class=&quot;code-quote&quot;&gt;&quot;subtree&quot;&lt;/span&gt;&amp;gt;
&amp;lt;cfg-hist-gl xmlns=&lt;span class=&quot;code-quote&quot;&gt;&quot;http:&lt;span class=&quot;code-comment&quot;&gt;//cisco.com/ns/yang/Cisco-IOS-XR-config-cfgmgr-exec-oper&quot;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&amp;lt;record-type&amp;gt;
&amp;lt;record-type&amp;gt;commit&amp;lt;/record-type&amp;gt;
&amp;lt;/record-type&amp;gt;
&amp;lt;/cfg-hist-gl&amp;gt;
&amp;lt;/filter&amp;gt;
&amp;lt;/get&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;RPC error is inserted randomly between chunks:&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;
...
&amp;lt;rpc-error&amp;gt;&amp;lt;error-type&amp;gt;transport&amp;lt;/error-type&amp;gt;
 &amp;lt;error-tag&amp;gt;resource-denied&amp;lt;/error-tag&amp;gt;&amp;lt;error-message&amp;gt;transport
 throttling error&amp;lt;/error-message&amp;gt;&amp;lt;/rpc-error&amp;gt;
 #462
 &amp;lt;record&amp;gt;
 &amp;lt;record&amp;gt;1395&amp;lt;/record&amp;gt;
 &amp;lt;timestamp&amp;gt;1578037903&amp;lt;/timestamp&amp;gt;
...&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And error message from NetconfChunkAggregator:&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;
Got &lt;span class=&quot;code-object&quot;&gt;byte&lt;/span&gt; 60 &lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; waiting &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; 10&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="33227">NETCONF-724</key>
            <summary>Making NETCONF chunk aggregator more robust</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="10001" iconUrl="https://jira.opendaylight.org/" description="">In Review</status>
                    <statusCategory id="4" key="indeterminate" colorName="yellow"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="jaro0149odl">Jaroslav T&#243;th</assignee>
                                    <reporter username="jaro0149odl">Jaroslav T&#243;th</reporter>
                        <labels>
                    </labels>
                <created>Sat, 12 Sep 2020 19:13:14 +0000</created>
                <updated>Thu, 7 Sep 2023 15:23:26 +0000</updated>
                                                            <fixVersion>7.0.0</fixVersion>
                                    <component>netconf</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                        <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|i03utb:</customfieldvalue>

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