<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:14:08 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-86] Real world network devices NETCONF mounted Lithium won&apos;t mount Beryllium</title>
                <link>https://jira.opendaylight.org/browse/NETCONF-86</link>
                <project id="10142" key="NETCONF">netconf</project>
                    <description>&lt;p&gt;With Helium &amp;amp; Lithium, I can mount and leverage RESTCONF/NETCONF yang-ext:mount with a set of network devices running in real networks today.  Commercial business has been developed on this capability with &quot;Opendaylight&quot; branding this capability.&lt;/p&gt;

&lt;p&gt;I am unable to mount the same network devices with the Beryllium controller.&lt;/p&gt;

&lt;p&gt;The root cause is a NullPointerException now thrown when LeafEffectiveStatementImpl fails to check that typeEffectiveSubstatement is null.&lt;/p&gt;

&lt;p&gt;Yes, there is an error in the yang file ... specifically no &quot;type&quot; child for a Leaf node, and it may be tempting to some to blame the real world network device and leave this be as a &quot;feature&quot; of a strict yang tools ... please don&apos;t make that mistake.&lt;/p&gt;

&lt;p&gt;To be useful, our controller must mount real world devices which have been purchased and provisioned into real networks.  These real devices can&apos;t be guaranteed to perfectly implement the spec, and especially if they passed QA with an earlier version of ODL.&lt;/p&gt;

&lt;p&gt;I&apos;m proposing a specific fix to check for null in this case where a leaf fails to declare a type.&lt;/p&gt;


&lt;p&gt;&amp;gt;         this.type = TypeUtils.getTypeFromEffectiveStatement(typeEffectiveSubstatement);&lt;br/&gt;
&amp;#8212;&lt;br/&gt;
&amp;lt;         this.type = (typeEffectiveSubstatement == null) ? null :  TypeUtils.getTypeFromEffectiveStatement(typeEffectiveSubstatement);&lt;/p&gt;


&lt;p&gt;I don&apos;t pretend to fully understand the side effects of properly avoiding a null pointer exception, however I&apos;ll point out that the missing &quot;type&quot; didn&apos;t cause any known issues in He/Li.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="21099">NETCONF-86</key>
            <summary>Real world network devices NETCONF mounted Lithium won&apos;t mount Beryllium</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="10002">Duplicate</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="jameshall03885@gmail.com">James Gregory Hall</reporter>
                        <labels>
                    </labels>
                <created>Fri, 16 Oct 2015 14:16:31 +0000</created>
                <updated>Fri, 15 Mar 2019 22:22:15 +0000</updated>
                            <resolved>Fri, 22 Jul 2016 07:55:12 +0000</resolved>
                                                                    <component>netconf</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>6</watches>
                                                                                                                <comments>
                            <comment id="39004" author="vrpolak" created="Fri, 16 Oct 2015 14:40:12 +0000"  >&lt;p&gt;TypeUtils.getTypeFromEffectiveStatement() was edited in Change 28478.&lt;br/&gt;
Was that Change a cause (or possibly a fix) of this Bug?&lt;/p&gt;</comment>
                            <comment id="39005" author="rovarga" created="Sat, 17 Oct 2015 22:45:12 +0000"  >&lt;p&gt;Please talk to the device vendor to fix their models, as type statement is absolutely critical to correct interpretation of the data. It is also critical that invalid models get fixed, otherwise we will end up in interoperability hell, as different systems will end up fixing flawed models in different ways, thus leading to incompatible behavior.&lt;/p&gt;

&lt;p&gt;In the meantime, you can deploy a fixed-up version of the model in the NETCONF cache, so it will not get pulled from the device.&lt;/p&gt;

&lt;p&gt;Downgrading priority to normal, since this is not blocking an ODL project as far as I can tell.&lt;/p&gt;</comment>
                            <comment id="39006" author="jameshall03885@gmail.com" created="Mon, 19 Oct 2015 14:04:28 +0000"  >&lt;p&gt;Eventually the vendor will fix the issue, and then eventually all customers will upgrade all devices to make this all go away ... but that timeline is beyond our control.&lt;/p&gt;

&lt;p&gt;This is blocking the use of the controller to mount network devices which are being mounted by Helium &amp;amp; Lithium based controllers.&lt;/p&gt;</comment>
                            <comment id="39007" author="tony.tkacik@gmail.com" created="Tue, 20 Oct 2015 07:24:08 +0000"  >&lt;p&gt;&amp;gt; This is blocking the use of the controller to mount network devices &lt;br/&gt;
&amp;gt; which are being mounted by Helium &amp;amp; Lithium based controllers.&lt;/p&gt;

&lt;p&gt;Statement is not correct, this is only blocking specific vendor and only in case broken model is downloaded from device. &lt;/p&gt;

&lt;p&gt;&amp;gt; In the meantime, you can deploy a fixed-up version of the model in &lt;br/&gt;
&amp;gt; the NETCONF cache, so it will not get pulled from the device.&lt;/p&gt;

&lt;p&gt;Work-around for such devices (without introducing validation regression in parser)&lt;br/&gt;
is to load modified models in cache/schema folder of OpenDaylight controller,&lt;br/&gt;
which is used to provide models without downloading them from device.&lt;/p&gt;

&lt;p&gt;If such &quot;exception&quot; for non-strictness should be part of parser, not enforcing&lt;br/&gt;
correct behaviour will allow for additional models like the one you mentioned to be created.&lt;/p&gt;

&lt;p&gt;Cleaner way will be introduction of STRICT and COMPATIBILITY modes into parser, where&lt;br/&gt;
one will be used during compile time and other in runtime, but introducing such APIs and rule-sets (and chosing which part of YANG do not enforce in COMPATIBILITY mode) will require lot of work and redesign of some of API contracts.&lt;/p&gt;

&lt;p&gt;Also behaviour of COMPATIBILITY fixes is left out to dispuse - how parser should render effective model from which NETCONF, RESTCONF, MD-SAL derives it&apos;s behaviour and are this choices really right?&lt;br/&gt;
Eg. in your use-case it may falling back to string be right choice, but what if other system with same issue was implemented to expect is as type empty or type identityref?&lt;/p&gt;

&lt;p&gt;Robert&apos;s idea allows for users, integrators and vendors to provide fixed models and to sideload them to OpenDaylight without modifying actual device and to specify such behaviour on per-model basis, instead of creating &quot;default&quot; rule for specific types of not honoring YANG.&lt;/p&gt;</comment>
                            <comment id="39008" author="rovarga" created="Tue, 20 Oct 2015 17:08:14 +0000"  >&lt;p&gt;As discussed on the MD-SAL meeting, the problem here is that a single model which fails to parse renders the entire mount point unusable. This problem can be solved acceptably by excluding the model from the resulting schema context, which is something the NETCONF SB plugin can do based on its configuration (either global or for that particular element).&lt;/p&gt;

&lt;p&gt;The other issue raised is the fact the mount point access from RESTCONF NB to NETCONF SB forces data validation, which breaks with devices which do not enforce their own models (like allowing an out-of-range value to be configured) &amp;#8211; leading to get-config failing. This is needed for the ability to project the data on the NB in both JSON and XML, but could potentially be addressed by re-architecting the RESTCONF/NETCONF interactions.&lt;/p&gt;

&lt;p&gt;An idea of &apos;sloppy&apos; mount points was discussed, which requires some level of design and changes to the MD-SAL APIs to expose how sloppy the mount point is being, so its interactions with the rest of the system can be properly guarded &amp;#8211; for example blocking MD-SAL applications from seeing non-conformant data, so they do not break on it.&lt;/p&gt;

&lt;p&gt;Since the two immediate problems can (and should) be addressed within the NETCONF project, I am moving this issue there.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10002">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="21245">NETCONF-232</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </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_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4492</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=4492]]></customfieldvalue>

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

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

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