<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:53:02 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>[YANGTOOLS-373] Data tree: automatic structural container lifecycle</title>
                <link>https://jira.opendaylight.org/browse/YANGTOOLS-373</link>
                <project id="10188" key="YANGTOOLS">yangtools</project>
                    <description>&lt;p&gt;Multiple users have taken up issue with the need to explicitly create structural containers. While this requirement is legitimate in and of itself, we can do much better and still be RFC6020 compliant.&lt;/p&gt;

&lt;p&gt;As it turns out, RFC6020 defines two flavors of containers: structural and presence. The difference is flagged by the &quot;presence&quot; keyword, as described at &lt;a href=&quot;http://tools.ietf.org/html/rfc6020#section-7.5.5&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://tools.ietf.org/html/rfc6020#section-7.5.5&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is obvious we must not perform automatic lifecycle management for presence containers, since their existence has a semantic meaning. Non-presence containers, though, are present to give the data structure and can be freely removed if they have no children.&lt;/p&gt;

&lt;p&gt;Implementing this improvement will change the way the system behaves from the RESTCONF perspective, as empty containers will be removed automatically.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="22793">YANGTOOLS-373</key>
            <summary>Data tree: automatic structural container lifecycle</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</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="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Nov 2014 13:05:26 +0000</created>
                <updated>Sun, 10 Apr 2022 18:35:25 +0000</updated>
                            <resolved>Wed, 28 Oct 2015 17:21:14 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="43172" author="rovarga" created="Wed, 25 Mar 2015 00:31:10 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/17030&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/17030&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="43173" author="vrpolak" created="Fri, 10 Jul 2015 09:43:41 +0000"  >&lt;p&gt;From RESTCONF point of view, this constitutes a significant API change, as many empty containers will go missing. As Lithium was released, consumers are starting to rely on its behavior, which makes it harder for them to transition to the version of ODL where the implementation will appear.&lt;/p&gt;

&lt;p&gt;I think this improvement will need to be carefully documented, and it may be necessary to re-seek agreement on API freeze waiver. One of projects which may take a hit from this change is Integration, and indirectly every project which CSIT jobs use test suites not ready for this change.&lt;/p&gt;

&lt;p&gt;For this reason, the current Target Milestone (Lithium-1) may not be the best fit. I recommend setting the Target Milestone to one of the early Beryllium ones, perhaps to Beryllium-M2.&lt;/p&gt;</comment>
                            <comment id="43174" author="rovarga" created="Mon, 7 Sep 2015 15:53:28 +0000"  >&lt;p&gt;Do you know of specific containers which would disappear and actually cause a problem (e.g. someone relying on their presence)?&lt;/p&gt;</comment>
                            <comment id="43175" author="rovarga" created="Mon, 14 Sep 2015 15:28:01 +0000"  >&lt;p&gt;2015-09-14 11:25:54,942 | ERROR | lt-dispatcher-18 | LocalThreePhaseCommitCohort      | 165 - org.opendaylight.controller.sal-distributed-datastore - 1.3.0.SNAPSHOT | Failed to prepare transaction member-1-txn-0 on backend&lt;br/&gt;
java.lang.IllegalArgumentException: Subtree change with before-data not present at path /(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)network-topology&lt;br/&gt;
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)&lt;span class=&quot;error&quot;&gt;&amp;#91;64:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.controller.md.sal.dom.store.impl.ResolveDataChangeEventsTask.resolveSubtreeChangeEvent(ResolveDataChangeEventsTask.java:268)&lt;span class=&quot;error&quot;&gt;&amp;#91;145:org.opendaylight.controller.sal-inmemory-datastore:1.3.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.controller.md.sal.dom.store.impl.ResolveDataChangeEventsTask.resolveSubtreeChangeEvent(ResolveDataChangeEventsTask.java:289)&lt;span class=&quot;error&quot;&gt;&amp;#91;145:org.opendaylight.controller.sal-inmemory-datastore:1.3.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.controller.md.sal.dom.store.impl.ResolveDataChangeEventsTask.resolveAnyChangeEvent(ResolveDataChangeEventsTask.java:120)&lt;span class=&quot;error&quot;&gt;&amp;#91;145:org.opendaylight.controller.sal-inmemory-datastore:1.3.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.controller.md.sal.dom.store.impl.ResolveDataChangeEventsTask.resolve(ResolveDataChangeEventsTask.java:62)&lt;span class=&quot;error&quot;&gt;&amp;#91;145:org.opendaylight.controller.sal-inmemory-datastore:1.3.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.ShardDataTree.notifyListeners(ShardDataTree.java:108)&lt;span class=&quot;error&quot;&gt;&amp;#91;165:org.opendaylight.controller.sal-distributed-datastore:1.3.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.commit(SimpleShardDataTreeCohort.java:109)&lt;span class=&quot;error&quot;&gt;&amp;#91;165:org.opendaylight.controller.sal-distributed-datastore:1.3.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;This clearly is not backwards-compatible. The problem is that SUBTREE_MODIFIED has had the behaviour of having a before-image, but with this change it does not, as the before-image is resolved from the original data tree (where it does not exist).&lt;/p&gt;

&lt;p&gt;We could switch to reporting a WRITE, but that will result in incorrect results when the DataTreeCandidate is replayed as a set of operations of a foreign DataTree, potentially losing data (since WRITE is imperative).&lt;/p&gt;

&lt;p&gt;It is definitely not a MERGE operation, at least not in the sense it is defined in its current deprecated form, as performing a MERGE on a foreign DataTree would result in more data appearing.&lt;/p&gt;

&lt;p&gt;An additional problem is that we cannot issue a DELETE modification when the container disappears, as again that would end up destroying foreign data which shares the subtree.&lt;br/&gt;
We have two options here:&lt;/p&gt;

&lt;p&gt;1) modify the definition of SUBTREE_MODIFIED to say that the before-image is not necessarily present for structural containers and modify users accordingly&lt;br/&gt;
2) define a new modification type (STRUCTURAL, APPEAR+DISAPPEAR) for this behaviour, keeping SUBTREE_MODIFIED as is.&lt;/p&gt;</comment>
                            <comment id="43176" author="rovarga" created="Mon, 14 Sep 2015 17:40:19 +0000"  >&lt;p&gt;Proposed API change: &lt;a href=&quot;https://git.opendaylight.org/gerrit/26924&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/26924&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="43177" author="rovarga" created="Wed, 28 Oct 2015 17:21:14 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/17030/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/17030/&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="23518">BGPCEP-278</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="21082">NETCONF-69</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10002">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="23518">BGPCEP-278</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="21082">NETCONF-69</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="22692">YANGTOOLS-272</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_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2399</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=2399]]></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_10204" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>ODL SR Target Milestone</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10355"><![CDATA[Beryllium-M4]]></customfieldvalue>

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

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