<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:15:37 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-674] Eliminate use of AsyncSshHandlerReader</title>
                <link>https://jira.opendaylight.org/browse/NETCONF-674</link>
                <project id="10142" key="NETCONF">netconf</project>
                    <description>&lt;p&gt;AsyncSshHandlerReader attaches to public client-side interface, issuing asynchronous reads. Each such read requires a buffer into which it is going to be fed.&lt;/p&gt;

&lt;p&gt;This unfortunate design is a legacy from previous SSH library we used and is not as efficient as we can go.&lt;/p&gt;

&lt;p&gt;Specifically, we need to use a relatively small buffer, because we can have a large number of devices &#8211; hence 2 are going with 2KiB. This means there are really two levels of queueing going on:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;sshd-internal buffering from socket to internal client queue&lt;/li&gt;
	&lt;li&gt;internal queue to our async read&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Furthermore we have NETCONF message reassembly sitting on top this queueing, which defaults to at most 16 ByteBufs before coalescence. The interplay of these is very unfortunate:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;sshd reads in 32KiB chunks (based on &lt;a href=&quot;https://jira.opendaylight.org/browse/NETCONF-571&quot; title=&quot;Rework SSHD integration&quot; class=&quot;issue-link&quot; data-issue-key=&quot;NETCONF-571&quot;&gt;NETCONF-571&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;this is then fragmented to 16x2KiB to fit into async reads&lt;/li&gt;
	&lt;li&gt;this is then reassembled to a 32KiB bytebuf&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This results in aweful lot of copying for NETCONF message larger than 32KiB, with the hurt being exponential with the size of messages.&lt;/p&gt;</description>
                <environment></environment>
        <key id="32608">NETCONF-674</key>
            <summary>Eliminate use of AsyncSshHandlerReader</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="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Sat, 25 Apr 2020 11:51:56 +0000</created>
                <updated>Fri, 5 Jun 2020 09:35:21 +0000</updated>
                            <resolved>Fri, 5 Jun 2020 09:33:03 +0000</resolved>
                                                    <fixVersion>Aluminium</fixVersion>
                    <fixVersion>Sodium SR3</fixVersion>
                    <fixVersion>Magnesium SR2</fixVersion>
                                    <component>netconf</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="68058" author="rovarga" created="Sat, 25 Apr 2020 11:58:23 +0000"  >&lt;p&gt;The solution is a tighter integration with SSHD, where we subclass SshClient to allow us to tap into internal dispatch of it. Specifically we expose a specialized NETCONF subsystem getter, which feeds directly to a target Netty channel. This integration can tag directly to receive path of SSHD, hence it completely eliminates internal queuing as well as fragmentation, resulting in:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;sshd reads 32KiB chunks&lt;/li&gt;
	&lt;li&gt;this is then reassembled to a composite bytebuf&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This means that the number of chunks in reassembly drops significantly, as we no longer fragment on receive (or at lest not as much, but still &lt;a href=&quot;https://jira.opendaylight.org/browse/NETCONF-571&quot; title=&quot;Rework SSHD integration&quot; class=&quot;issue-link&quot; data-issue-key=&quot;NETCONF-571&quot;&gt;NETCONF-571&lt;/a&gt; applies) thus the reassembly buffer can grow to as much as 16x32=512KiB before it is coalesced.&lt;/p&gt;</comment>
                            <comment id="68110" author="jluhrsen" created="Wed, 13 May 2020 18:28:51 +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; I see one &lt;a href=&quot;https://git.opendaylight.org/gerrit/c/netconf/+/84781&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;patch &lt;/a&gt;  associated for this jia is there for&lt;br/&gt;
master and cherry picked to sodium. I don&apos;t see it for magnesium. Should this be there as well?&lt;/p&gt;

&lt;p&gt;I&apos;m also wondering why this ticket does not have that patch in it&apos;s gerrit reviews section. the commit message&lt;br/&gt;
directly calls out this &lt;a href=&quot;https://jira.opendaylight.org/browse/NETCONF-674&quot; title=&quot;Eliminate use of AsyncSshHandlerReader&quot; class=&quot;issue-link&quot; data-issue-key=&quot;NETCONF-674&quot;&gt;&lt;del&gt;NETCONF-674&lt;/del&gt;&lt;/a&gt; and links to this ticket. some bug in jira maybe... werid.&lt;/p&gt;</comment>
                            <comment id="68111" author="rovarga" created="Wed, 13 May 2020 19:30:19 +0000"  >&lt;p&gt;You need to select &apos;Show All Reviews&apos; in the right-hand &apos;...&apos; menu of Gerrit Reviews.&lt;/p&gt;

&lt;p&gt;The patches will land in stable/magnesium after Mg SR1, as they are not critical and have landed after the freeze was in effect.&lt;/p&gt;</comment>
                            <comment id="68113" author="jluhrsen" created="Wed, 13 May 2020 20:38:43 +0000"  >&lt;p&gt;yeah, I have it selected as &quot;Show All Reviews&quot; &lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;15651_thumb&quot; href=&quot;https://jira.opendaylight.org/secure/attachment/15651/15651__NETCONF-674__Eliminate_AsyncSshHandlerReader_-_OpenDaylight_JIRA.jpg&quot; title=&quot;_NETCONF-674__Eliminate_AsyncSshHandlerReader_-_OpenDaylight_JIRA.jpg&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;15651&quot; file-preview-title=&quot;_NETCONF-674__Eliminate_AsyncSshHandlerReader_-_OpenDaylight_JIRA.jpg&quot;&gt;&lt;img src=&quot;https://jira.opendaylight.org/secure/thumbnail/15651/_thumb_15651.png&quot; style=&quot;border: 0px solid black&quot; role=&quot;presentation&quot;/&gt;&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;</comment>
                            <comment id="68114" author="rovarga" created="Wed, 13 May 2020 20:54:30 +0000"  >&lt;p&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;img src=&quot;https://jira.opendaylight.org/secure/attachment/15652/15652_Screenshot_20200513_225354.png&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/span&gt;&lt;/p&gt;</comment>
                            <comment id="68116" author="jluhrsen" created="Wed, 13 May 2020 21:10:55 +0000"  >&lt;p&gt;thanks. Gotta be a problem on my end. oh well.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="30801">NETCONF-571</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10300">
                    <name>Issue split</name>
                                            <outwardlinks description="split to">
                                        <issuelink>
            <issuekey id="32728">NETCONF-699</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="32659">NETCONF-686</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="15641" name="10K_sshd220_asyncread.png" size="102520" author="rovarga" created="Sat, 25 Apr 2020 12:28:49 +0000"/>
                            <attachment id="15642" name="10K_sshd220_asyncread_bytearray.png" size="178736" author="rovarga" created="Sat, 25 Apr 2020 12:33:06 +0000"/>
                            <attachment id="15652" name="Screenshot_20200513_225354.png" size="297073" author="rovarga" created="Wed, 13 May 2020 20:54:28 +0000"/>
                            <attachment id="15651" name="_NETCONF-674__Eliminate_AsyncSshHandlerReader_-_OpenDaylight_JIRA.jpg" size="600258" author="jluhrsen" created="Wed, 13 May 2020 20:38:39 +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_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03s5b:</customfieldvalue>

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