<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:15:39 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-689] Extend Websocket streams for data-less notifications</title>
                <link>https://jira.opendaylight.org/browse/NETCONF-689</link>
                <project id="10142" key="NETCONF">netconf</project>
                    <description>&lt;p&gt;In one of our customers, the use case was to listen to changes in a particular yangtree. however the data underneath was quite huge, thereby causing the heap running over and the controller crashing in response to lot of changes in the subtree. Hence, we had to fallback to a mechanism to detect just a change in the yangtree from a northbound application and on detection of the change, do a bulk get of the data. that was more effective.&lt;/p&gt;

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

&lt;p&gt;In supporting this usecase, the current implementation needed an extension. Currently,&#160; WebSocket stream notification contains notification metadata with data.&#160; However, there is no way to avoid collecting data during notification processing in the websocket server. Hence, we decided to add&#160; a new filter named &quot;odl-skip-notification-data&quot;, similar to &quot;odl-leaf-nodes-only&quot; in the subscription API.&lt;/p&gt;

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

&lt;p&gt;1. Create Stream:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;POST http://\controller-ip:8181/restconf/operations/sal-remote:create-data-change-event-subscription
{
  &quot;input&quot;: {
    &quot;path&quot;: &quot;/network-topology:network-topology&quot;,
    &quot;sal-remote-augment:datastore&quot;: &quot;CONFIGURATION&quot;,
    &quot;sal-remote-augment:scope&quot;: &quot;SUBTREE&quot;,
    &quot;sal-remote-augment:notification-output-type&quot;: &quot;JSON&quot;
  }
}

Response:
{
  &quot;output&quot;: {
    &quot;stream-name&quot;: &quot;data-change-event-subscription/network-topology:network-topology/datastore=CONFIGURATION/scope=SUBTREE&quot;
  }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;2. Subscribe:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;GET http://{{controller-ip}}:8181/restconf/streams/stream/data-change-event-subscription/network-topology:network-topology/datastore=CONFIGURATION/scope=SUBTREE?&amp;amp;odl-skip-notification-data=true

Response:
{
    &quot;location&quot;: &quot;ws://localhost:8185/data-change-event-subscription/network-topology:network-topology/datastore=CONFIGURATION/scope=SUBTREE&quot;
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;3. Get Notification:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;GET  ws://localhost:8185/data-change-event-subscription/network-topology:network-topology/datastore=CONFIGURATION/scope=SUBTREE
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;4. Write to topology or any respective data tree:&lt;/p&gt;

&lt;p&gt;5. Websocket JSON Response - &lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
   &quot;notification&quot;:{
      &quot;xmlns&quot;:&quot;urn:ietf:params:xml:ns:netconf:notification:1.0&quot;,
      &quot;data-changed-notification&quot;:{
         &quot;xmlns&quot;:&quot;urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote&quot;,
         &quot;data-change-event&quot;:{
            &quot;path&quot;:&quot;/network-topology:network-topology&quot;,
            &quot;operation&quot;:&quot;updated&quot;
         }
      },
      &quot;eventTime&quot;:&quot;2020-05-05T20:22:23.293+05:30&quot;
   }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="32678">NETCONF-689</key>
            <summary>Extend Websocket streams for data-less notifications</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="nikhil.soni.lumina">Nikhil Soni</assignee>
                                    <reporter username="nikhil.soni.lumina">Nikhil Soni</reporter>
                        <labels>
                            <label>restconf</label>
                    </labels>
                <created>Fri, 22 May 2020 06:01:57 +0000</created>
                <updated>Tue, 26 Oct 2021 07:13:27 +0000</updated>
                            <resolved>Wed, 30 Sep 2020 09:35:20 +0000</resolved>
                                                    <fixVersion>1.13.0</fixVersion>
                                    <component>restconf-nb</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="68156" author="tnevrekar" created="Fri, 29 May 2020 07:20:34 +0000"  >&lt;p&gt;Further to the description, we looked at the RFC to see if there is any standard way. But it does not currently define a way to only notify with no data. However, it does allow a query param to be vendor specific -&#160;&lt;a href=&quot;https://tools.ietf.org/html/rfc8040#section-4.8&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://tools.ietf.org/html/rfc8040#section-4.8&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;If vendors define additional query parameters, they SHOULD use a
 prefix (such as the enterprise or organization name) for query
 parameter names in order to avoid collisions with other parameters.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="68177" author="jluhrsen" created="Fri, 5 Jun 2020 05:01:13 +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;, &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=tcere&quot; class=&quot;user-hover&quot; rel=&quot;tcere&quot;&gt;tcere&lt;/a&gt;, could you comment on this use case and take a look at the &lt;a href=&quot;https://git.opendaylight.org/gerrit/c/netconf/+/89928&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;review submitted &lt;/a&gt; please?&lt;/p&gt;</comment>
                            <comment id="68181" author="rovarga" created="Mon, 8 Jun 2020 20:14:36 +0000"  >&lt;p&gt;&quot;however the data underneath was quite huge, thereby causing the heap running over and the controller crashing in response to lot of changes&quot; &#8211; this looks like the core of the issue, shouldn&apos;t that be fixed?&lt;/p&gt;

&lt;p&gt;Note that the proposed notify-get mechanics is subject to races and it is not explained anywhere.&lt;/p&gt;</comment>
                            <comment id="68478" author="tnevrekar" created="Thu, 23 Jul 2020 17:39:46 +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 agree that the ideal solution is to fix the heap running over. But this patch at least gives a reasonable workaround for consumers to continue to use websockets in such a loaded system. Also I concur we need to open a ticket to fully fix the issue. &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=nikhil.soni.lumina&quot; class=&quot;user-hover&quot; rel=&quot;nikhil.soni.lumina&quot;&gt;nikhil.soni.lumina&lt;/a&gt; can you add that with the appropriate summary and link it here so that it mentions the details of the overrun that we observe and in what conditions?&lt;/p&gt;</comment>
                            <comment id="68495" author="JIRAUSER12934" created="Tue, 28 Jul 2020 07:42:32 +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;&lt;br/&gt;
Usecase - If a client  what to listen via  websocket on any changes happens in the leaf, an   the leaf is inside List which  contains hundreds leaf object. &lt;br/&gt;
If any change happens in the list then websocket returns all list data instead of one particular changed leaf which can be huge data.&lt;/p&gt;

&lt;p&gt; Topology Example data  - &lt;br/&gt;
{&lt;br/&gt;
  &quot;topology&quot;: [&lt;br/&gt;
    {&lt;br/&gt;
      &quot;topology-id&quot;: &quot;1&quot;,&lt;br/&gt;
      &quot;default&quot;: &quot;true&quot;,&lt;br/&gt;
      &quot;topology-name&quot;: &quot;1&quot;,&lt;br/&gt;
      &quot;node&quot;: [&lt;br/&gt;
        &lt;/p&gt;
{ id:1}
&lt;p&gt;.....thousands of  nodes &lt;br/&gt;
      ]&lt;br/&gt;
}&lt;br/&gt;
in above example if any change happens in  one node which is inside in  &quot;node&quot; list then all thousands of node with data come in websocket which creates heap  memory issue in client side.  &lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="34700">NETCONF-823</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </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|i03sjr:</customfieldvalue>

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