<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:09: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>[MDSAL-366] Add support for rebasing transaction in TransactionChains</title>
                <link>https://jira.opendaylight.org/browse/MDSAL-366</link>
                <project id="10137" key="MDSAL">mdsal</project>
                    <description>&lt;p&gt;InMemoryDataTree allows DataTreeModifications to be chained in a manner similar to a git branch via DataTreeSnapshot#newModification().&lt;/p&gt;

&lt;p&gt;This means that a set of DataTreeModifications created by:&lt;/p&gt;

&lt;p&gt;&#160;&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;
List&amp;lt;DataTreeModification&amp;gt; list = &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; ArrayList&amp;lt;&amp;gt;();
DataTreeSnapshot snap = dataTree.takeSnapshot();
&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; i = 0; i &amp;lt; 100; ++i) {
    DataTreeModification mod = snap.newModification;

    &lt;span class=&quot;code-comment&quot;&gt;// ...
&lt;/span&gt;
    mod.ready();

    list.add(mod);
    snap = mod;
}
&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (DataTreeModification mod : list) {
    dataTree.commit(mod);
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;will observe an isolated snapshot. The problem is that maintaining the state can lean to an OOM, because a new snapshot is never taken and all those DataTreeModifications are not eligible for GC until the last modification commits.&lt;/p&gt;

&lt;p&gt;This is problematic, as in a highly-loaded asynchronous system we may not arrive at a point where are no outstanding modifications &#8211; hence we never free the garbage.&lt;/p&gt;

&lt;p&gt;Introduce a mechanism by which a user can request that a chain of (sealed?) DataTreeModifications can be rebased on top of a new DataTreeSnapshot. This mechanism needs to be able to fail just as DataTree.prepare() can.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="23024">MDSAL-366</key>
            <summary>Add support for rebasing transaction in TransactionChains</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="2" iconUrl="https://jira.opendaylight.org/images/icons/priorities/critical.svg">High</priority>
                        <status id="10003" iconUrl="https://jira.opendaylight.org/images/icons/status_generic.gif" description="">Confirmed</status>
                    <statusCategory id="2" key="new" colorName="blue-gray"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Wed, 13 Apr 2016 19:36:15 +0000</created>
                <updated>Wed, 20 Oct 2021 20:18:15 +0000</updated>
                                                                            <component>Binding API</component>
                    <component>DOM API</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="43863" author="rovarga" created="Wed, 13 Apr 2016 19:47:19 +0000"  >&lt;p&gt;The API should probably look like:&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;
&lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;interface&lt;/span&gt; DataTreeModification {
     DataTreeModification rebase(DataTreeSnapshot newSnapshot);
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;and the user would do something like:&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;
&lt;span class=&quot;code-comment&quot;&gt;// after commiting a modification
&lt;/span&gt;List&amp;lt;DataTreeModification&amp;gt; outstanding;
DataTreeSnapshot snap = dataTree.takeSnapshot();
List&amp;lt;DataTreeModification&amp;gt; rebasedOutstanding = &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; ArrayList&amp;lt;&amp;gt;();
&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (DataTreeModification mod : outstanding) {
    DataTreeModification rebased = mod.rebase(snap);
    rebasedOutstanding.add(mod);
    snap = mod;
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="64309" author="rovarga" created="Fri, 27 Jul 2018 23:33:22 +0000"  >&lt;p&gt;DataTreeModification is actually ready, as it features applyToCursor(), which is not restricted to require a sealed modification. Hence the desired code snippet becomes a bit different:&lt;/p&gt;

&lt;p&gt;&#160;&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;
&lt;span class=&quot;code-comment&quot;&gt;// after commiting a modificationList&amp;lt;DataTreeModification&amp;gt; outstanding;
&lt;/span&gt;DataTreeSnapshot snap = dataTree.takeSnapshot();
List&amp;lt;CursorAwareDataTreeModification&amp;gt; rebasedOutstanding = &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; ArrayList&amp;lt;&amp;gt;();
&#160;
&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (DataTreeModification mod : outstanding) {
    DataTreeModification rebased = snap.newModification();
    &lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (DataTreeModificationCursor c = rebased.createCursor(YangInstanceIdentifier.EMPTY)) {
        mod.applyToCursor(c);
    }

    rebased.ready();
    rebasedOutstanding.add(rebased);
    snap = mod;
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="64312" author="rovarga" created="Sat, 28 Jul 2018 07:53:03 +0000"  >&lt;p&gt;We need to expose an API for users to specify when to rebase transactions and then implement it.&lt;/p&gt;</comment>
                            <comment id="66566" author="rovarga" created="Sat, 16 Mar 2019 16:06:38 +0000"  >&lt;p&gt;Binding V2 is being removed in 4.0.0.&lt;/p&gt;</comment>
                    </comments>
                    <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>5719</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=5719]]></customfieldvalue>

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

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

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