<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:16:41 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-1103] Incorrect response for failed PATCH request</title>
                <link>https://jira.opendaylight.org/browse/NETCONF-1103</link>
                <project id="10142" key="NETCONF">netconf</project>
                    <description>&lt;p&gt;The status code of a PATCH request is always &lt;tt&gt;200&lt;/tt&gt; as long as the request passes schema validation even if a transaction of an edit fails.&lt;/p&gt;

&lt;p&gt;For example, the following PATCH request update/create NETCONF node:&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;PATCH /rests/data/network-topology:network-topology/topology=topology-netconf
Accept: application/yang-data+json
Content-Type: application/yang-patch+json

{
    &quot;ietf-yang-patch:yang-patch&quot;: {
        &quot;edit&quot;: [
            {
                &quot;edit-id&quot;: &quot;edit1&quot;,
                &quot;operation&quot;: &quot;merge&quot;,
                &quot;target&quot;: &quot;/node=netconf-mdsal&quot;,
                &quot;value&quot;: {
                    &quot;network-topology:node&quot;: [
                        {
                            &quot;node-id&quot;: &quot;netconf-mdsal&quot;,
                            &quot;netconf-node-topology:concurrent-rpc-limit&quot;: 0,
                            &quot;netconf-node-topology:schema-cache-directory&quot;: &quot;netconf-mdsal&quot;,
                            &quot;netconf-node-topology:password&quot;: &quot;admin&quot;,
                            &quot;netconf-node-topology:username&quot;: &quot;admin&quot;,
                            &quot;netconf-node-topology:default-request-timeout-millis&quot;: 1800000,
                            &quot;netconf-node-topology:port&quot;: 2830,
                            &quot;netconf-node-topology:tcp-only&quot;: false,
                            &quot;netconf-node-topology:host&quot;: &quot;127.0.0.1&quot;,
                            &quot;netconf-node-topology:keepalive-delay&quot;: 100
                        }
                    ]
                }
            },
            {
                &quot;edit-id&quot;: &quot;edit2&quot;,
                &quot;operation&quot;: &quot;create&quot;,
                &quot;target&quot;: &quot;/node=netconf-mdsal&quot;,
                &quot;value&quot;: {
                    &quot;network-topology:node&quot;: [
                        {
                            &quot;node-id&quot;: &quot;netconf-mdsal&quot;,
                            &quot;netconf-node-topology:keepalive-delay&quot;: 200
                        }
                    ]
                }
            }
        ],
        &quot;patch-id&quot;: &quot;patch1&quot;
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;returns &lt;tt&gt;200&lt;/tt&gt; along with the following &lt;tt&gt;yang-patch-status&lt;/tt&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;{
    &quot;ietf-yang-patch:yang-patch-status&quot;: {
        &quot;patch-id&quot;: &quot;patch1&quot;,
        &quot;edit-status&quot;: {
            &quot;edit&quot;: [
                {
                    &quot;edit-id&quot;: &quot;edit1&quot;,
                    &quot;ok&quot;: [
                        null
                    ]
                },
                {
                    &quot;edit-id&quot;: &quot;edit2&quot;,
                    &quot;errors&quot;: {
                        &quot;error&quot;: [
                            {
                                &quot;error-type&quot;: &quot;protocol&quot;,
                                &quot;error-tag&quot;: &quot;data-exists&quot;,
                                &quot;error-path&quot;: &quot;/(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)network-topology/topology/topology[{(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)topology-id=topology-netconf}]/node/node[{(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node-id=netconf-mdsal}]&quot;,
                                &quot;error-message&quot;: &quot;Data already exists&quot;
                            }
                        ]
                    }
                }
            ]
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;tt&gt;data-exists&lt;/tt&gt; error is correctly captured for the second edit, but the status code does not reflect the error.&lt;/p&gt;

&lt;p&gt;And the PATCH request for a NETCONF device has other issues.&lt;/p&gt;

&lt;p&gt;For example, the following PATCH request to update/create/update configuration on a NETCONF node:&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;PATCH /rests/data/network-topology:network-topology/topology=topology-netconf/node=ncserver/yang-ext:mount HTTP/1.1
Accept: application/yang-data+json
Content-Type: application/yang-patch+json

{
    &quot;ietf-yang-patch:yang-patch&quot;: {
        &quot;patch-id&quot;: &quot;patch1&quot;,
        &quot;edit&quot;: [
            {
                &quot;edit-id&quot;: &quot;edit1&quot;,
                &quot;operation&quot;: &quot;merge&quot;,
                &quot;target&quot;: &quot;/foo:foo&quot;,
                &quot;value&quot;: {
                    &quot;foo:foo&quot;: {
                        &quot;baz&quot;: &quot;edit1&quot;
                    }
                }
            },
            {
                &quot;edit-id&quot;: &quot;edit2&quot;,
                &quot;operation&quot;: &quot;create&quot;,
                &quot;target&quot;: &quot;/foo:foo&quot;,
                &quot;value&quot;: {
                    &quot;foo:foo&quot;: {
                        &quot;baz&quot;: &quot;edit2&quot;
                    }
                }
            },
            {
                &quot;edit-id&quot;: &quot;edit3&quot;,
                &quot;operation&quot;: &quot;merge&quot;,
                &quot;target&quot;: &quot;/foo:foo&quot;,
                &quot;value&quot;: {
                    &quot;foo:foo&quot;: {
                        &quot;baz&quot;: &quot;edit3&quot;
                    }
                }
            }
        ]
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;returns status code of &lt;tt&gt;200&lt;/tt&gt; with the following &lt;tt&gt;yang-patch-status&lt;/tt&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;{
    &quot;ietf-yang-patch:yang-patch-status&quot;: {
        &quot;patch-id&quot;: &quot;patch1&quot;,
        &quot;errors&quot;: {
            &quot;error&quot;: [
                {
                    &quot;error-type&quot;: &quot;protocol&quot;,
                    &quot;error-tag&quot;: &quot;data-exists&quot;,
                    &quot;error-message&quot;: &quot;Data already exists&quot;
                }
            ]
        },
        &quot;edit-status&quot;: {
            &quot;edit&quot;: [
                {
                    &quot;edit-id&quot;: &quot;edit1&quot;,
                    &quot;ok&quot;: [
                        null
                    ]
                },
                {
                    &quot;edit-id&quot;: &quot;edit2&quot;,
                    &quot;ok&quot;: [
                        null
                    ]
                },
                {
                    &quot;edit-id&quot;: &quot;edit3&quot;,
                    &quot;ok&quot;: [
                        null
                    ]
                }
            ]
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The error is because of the second edit - it was trying to create a data resource which already exists. But the error information is in the global errors, &lt;tt&gt;errors&lt;/tt&gt; right under &lt;tt&gt;yang-patch-status&lt;/tt&gt;, while &lt;tt&gt;edit-status&lt;/tt&gt; has &lt;tt&gt;ok&lt;/tt&gt; for all 3 edits.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8072.html#section-3&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;RFC 8072 Section 3&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;  case global-errors {
&#160;   uses rc:errors;
&#160;   description
&#160;     &quot;This container will be present if global errors that
       are unrelated to a specific edit occurred.&quot;;
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So this response is very misleading - the &lt;tt&gt;yang-patch-status&lt;/tt&gt; message implies that an error occurred after successful processing of all 3 edits.&lt;/p&gt;

&lt;p&gt;&#8212;&lt;/p&gt;

&lt;p&gt;NOTE&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;For this PATCH request 3 &lt;tt&gt;&amp;lt;edit-config&amp;gt;&lt;/tt&gt; RPC calls are sent to the device. Ideally the 3rd edit shouldn&apos;t take place since the second one failed although any changes made to the candidate datastore will be reverted with &lt;tt&gt;&amp;lt;discard-changes&amp;gt;&lt;/tt&gt; before the transaction is closed. The following log shows the 3rd&#160;&lt;tt&gt;&amp;lt;edit-confg&amp;gt;&lt;/tt&gt; and its response:
&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;21:33:49.040 TRACE [globalWorkerGroup-3-4] RemoteDeviceId[name=ncserver, address=/127.0.0.1:830]: Matched request: &amp;lt;rpc xmlns=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; message-id=&quot;m-8505&quot;&amp;gt;
    &amp;lt;edit-config&amp;gt;
        &amp;lt;target&amp;gt;
            &amp;lt;candidate/&amp;gt;
        &amp;lt;/target&amp;gt;
        &amp;lt;error-option&amp;gt;rollback-on-error&amp;lt;/error-option&amp;gt;
        &amp;lt;config&amp;gt;
            &amp;lt;foo xmlns=&quot;urn:foo&quot; xmlns:op=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; op:operation=&quot;merge&quot;&amp;gt;
                &amp;lt;baz&amp;gt;edit3&amp;lt;/baz&amp;gt;
            &amp;lt;/foo&amp;gt;
        &amp;lt;/config&amp;gt;
    &amp;lt;/edit-config&amp;gt;
&amp;lt;/rpc&amp;gt;
 to response: &amp;lt;rpc-reply xmlns=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; message-id=&quot;m-8505&quot;&amp;gt;
    &amp;lt;ok/&amp;gt;
&amp;lt;/rpc-reply&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;When the device does not support the candidate datastore and only supports the running  datastore, there is no easy way to restore the original configuration, and the following requirement on error handling is not guaranteed if a PATCH request has more than one edit.
&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;  container yang-patch {
    description
      &quot;Represents a conceptual sequence of datastore edits,
       called a patch.  Each patch is given a client-assigned
       patch identifier.  Each edit MUST be applied
       in ascending order, and all edits MUST be applied.
       If any errors occur, then the target datastore MUST NOT
       be changed by the YANG Patch operation.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="37147">NETCONF-1103</key>
            <summary>Incorrect response for failed PATCH request</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</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="PeterSuna">Peter Suna</assignee>
                                    <reporter username="sangwookha">Sangwook Ha</reporter>
                        <labels>
                            <label>pt</label>
                    </labels>
                <created>Thu, 27 Jul 2023 22:28:19 +0000</created>
                <updated>Fri, 10 Nov 2023 09:38:55 +0000</updated>
                            <resolved>Fri, 10 Nov 2023 09:38:55 +0000</resolved>
                                    <version>6.0.0</version>
                    <version>5.0.7</version>
                    <version>4.0.8</version>
                                    <fixVersion>7.0.0</fixVersion>
                    <fixVersion>4.0.9</fixVersion>
                    <fixVersion>6.0.5</fixVersion>
                    <fixVersion>5.0.10</fixVersion>
                                    <component>restconf-nb</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="72448" author="ivanhrasko" created="Wed, 16 Aug 2023 11:30:25 +0000"  >&lt;p&gt;On master branch the current logic is that when some operation fails then others are not executed.&lt;/p&gt;</comment>
                            <comment id="72452" author="JIRAUSER13318" created="Wed, 16 Aug 2023 20:45:23 +0000"  >&lt;p&gt;I think that&apos;s true for MD-SAL but not for NETCONF.&lt;br/&gt;
For example, after the second RPC for &lt;tt&gt;edit2&lt;/tt&gt; failed:&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;20:17:05.219 TRACE [globalWorkerGroup-3-1] RemoteDeviceId[name=ncserver, address=/127.0.0.1:830]: Matched request: &amp;lt;rpc xmlns=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; message-id=&quot;m-63&quot;&amp;gt;
    &amp;lt;edit-config&amp;gt;
        &amp;lt;target&amp;gt;
            &amp;lt;candidate/&amp;gt;
        &amp;lt;/target&amp;gt;
        &amp;lt;error-option&amp;gt;rollback-on-error&amp;lt;/error-option&amp;gt;
        &amp;lt;config&amp;gt;
            &amp;lt;foo xmlns=&quot;urn:foo&quot; xmlns:op=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; op:operation=&quot;create&quot;&amp;gt;
                &amp;lt;baz&amp;gt;edit2&amp;lt;/baz&amp;gt;
            &amp;lt;/foo&amp;gt;
        &amp;lt;/config&amp;gt;
    &amp;lt;/edit-config&amp;gt;
&amp;lt;/rpc&amp;gt;
 to response: &amp;lt;rpc-reply xmlns=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; message-id=&quot;m-63&quot;&amp;gt;
    &amp;lt;rpc-error&amp;gt;
        &amp;lt;error-type&amp;gt;application&amp;lt;/error-type&amp;gt;
        &amp;lt;error-tag&amp;gt;data-exists&amp;lt;/error-tag&amp;gt;
        &amp;lt;error-severity&amp;gt;error&amp;lt;/error-severity&amp;gt;
        &amp;lt;error-message xml:lang=&quot;en&quot;&amp;gt;Node &quot;baz&quot; to be created already exists.&amp;lt;/error-message&amp;gt;
    &amp;lt;/rpc-error&amp;gt;
&amp;lt;/rpc-reply&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;it still sends another RPC for &lt;tt&gt;edit3&lt;/tt&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;20:17:05.244 TRACE [globalWorkerGroup-3-1] RemoteDeviceId[name=ncserver, address=/127.0.0.1:830]: Matched request: &amp;lt;rpc xmlns=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; message-id=&quot;m-64&quot;&amp;gt;
    &amp;lt;edit-config&amp;gt;
        &amp;lt;target&amp;gt;
            &amp;lt;candidate/&amp;gt;
        &amp;lt;/target&amp;gt;
        &amp;lt;error-option&amp;gt;rollback-on-error&amp;lt;/error-option&amp;gt;
        &amp;lt;config&amp;gt;
            &amp;lt;foo xmlns=&quot;urn:foo&quot; xmlns:op=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; op:operation=&quot;merge&quot;&amp;gt;
                &amp;lt;baz&amp;gt;edit3&amp;lt;/baz&amp;gt;
            &amp;lt;/foo&amp;gt;
        &amp;lt;/config&amp;gt;
    &amp;lt;/edit-config&amp;gt;
&amp;lt;/rpc&amp;gt;
 to response: &amp;lt;rpc-reply xmlns=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot; message-id=&quot;m-64&quot;&amp;gt;
    &amp;lt;ok/&amp;gt;
&amp;lt;/rpc-reply&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;An exception caught while processing each edit in &lt;a href=&quot;https://github.com/opendaylight/netconf/blob/master/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java#L48&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;PatchDataTransactionUtil.patchData&lt;/a&gt;, prevents further processing of outstanding patch entities. But in the case of NETCONF all &lt;tt&gt;createDataWithinTransaction&lt;/tt&gt; does is just to enqueue a NETCONF RPC operation, which does not fail. And when a NETCONF RPC actually returns an error this does not cancel the rest of the operations, hence all the RPCs are dispatched whether previous one is successful or not.&lt;/p&gt;</comment>
                            <comment id="72453" author="ivanhrasko" created="Thu, 17 Aug 2023 07:02:59 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=rkashapov&quot; class=&quot;user-hover&quot; rel=&quot;rkashapov&quot;&gt;rkashapov&lt;/a&gt; can you please check this? If true you can create new task that addresses that.&lt;/p&gt;</comment>
                            <comment id="72502" author="JIRAUSER13216" created="Wed, 23 Aug 2023 11:22:49 +0000"  >&lt;p&gt;Patch request is processed based on &lt;ins&gt;RestconfStrategy&lt;/ins&gt; which varies depending on referenced instance identifier &#8211; see &lt;a href=&quot;https://github.com/opendaylight/netconf/blob/master/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java#L489&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;RestconfDataServiceImpl&lt;/a&gt;&#160;&lt;/p&gt;

&lt;p&gt;If instance identifier is associated with mount point and having &lt;ins&gt;NetconfService&lt;/ins&gt; associated then &lt;a href=&quot;https://github.com/opendaylight/netconf/blob/master/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;NetconfRestconfStrategy&lt;/a&gt; used which relies on NETCONF protocol to process the request. This approach is used to addresses external devices mounted via &lt;ins&gt;topology&lt;/ins&gt; mechanism.&#160;If instance identifier points to generic data node then &lt;a href=&quot;https://github.com/opendaylight/netconf/blob/master/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MdsalRestconfStrategy&lt;/a&gt; &#160;is used which relies on a standard &lt;ins&gt;DomDataBroker&lt;/ins&gt; instance to update the datastore.&lt;/p&gt;

&lt;p&gt;Each strategy has own implementation of &lt;ins&gt;RestconfTransaction&lt;/ins&gt; with &lt;em&gt;commit()&lt;/em&gt; acting differently. &lt;a href=&quot;https://github.com/opendaylight/netconf/blob/master/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java#L131&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;NetconfRestconfTransaction&lt;/a&gt; delegates almost all transaction operations to an instance of &lt;ins&gt;NetconfService&lt;/ins&gt;. In a context of topology it&apos;s a &lt;a href=&quot;https://github.com/opendaylight/netconf/blob/master/apps/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfService.java&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;ProxyNetconfService&lt;/a&gt; which &lt;b&gt;queues&lt;/b&gt; operations &lt;ins&gt;before&lt;/ins&gt; commit() then executed &lt;b&gt;asynchronously&lt;/b&gt; on commit(). It&apos;s the reason why&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;no error is detected on each operations processing&lt;/li&gt;
	&lt;li&gt;NETCONF requests are continued despite error(s) on some of operations (during commit).&#160;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Resuming:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It seems reasonable to make operations processing consistent &#8211; synchronous processing of operations with abort on first error for both MdsalRestconfTransaction and NetconfRestconfTransaction i.e. ProxyNetconfService.commit(). Significant effort is required to implement this.&lt;/li&gt;
	&lt;li&gt;For both implementations commit() errors contain no reference (edit-id) to operation failed. The main reason is RestconfTransaction API has no operation ID input on per operation basis, so there will be no reference in output. This results the commit error is always shown as global error. Updating transaction API and implementations seems to require a HUGE effort. It seems more reasonable to pay more attention to error messages, making them informative. Anyway no error message is lost even now no matter we point the operation failed or not.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The case when global error is shown together with all operations listed having success status is an obvious (easy to fix) bug. Will address it.&lt;/p&gt;</comment>
                            <comment id="72520" author="rovarga" created="Wed, 6 Sep 2023 13:28:47 +0000"  >&lt;p&gt;Right, and this will be probably be further differentiated, as we really should be translating the patch request into a single edit-config, based on what the NETCONF device actually supports.&lt;/p&gt;</comment>
                            <comment id="72713" author="ivanhrasko" created="Thu, 9 Nov 2023 08:28:06 +0000"  >&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/c/netconf/+/108880&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/c/netconf/+/108880&lt;/a&gt; solves the incorrect response code.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/c/netconf/+/107687&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/c/netconf/+/107687&lt;/a&gt; solves &quot;&lt;b&gt;So this response is very misleading - the &lt;tt&gt;yang-patch-status&lt;/tt&gt; message implies that an error occurred after successful processing of all 3 edits.&lt;/b&gt;&quot;.&lt;/li&gt;
&lt;/ol&gt;
</comment>
                            <comment id="72714" author="ivanhrasko" created="Thu, 9 Nov 2023 08:35:07 +0000"  >&lt;p&gt;This can be done in &lt;a href=&quot;https://jira.opendaylight.org/browse/NETCONF-1197&quot; class=&quot;external-link&quot; rel=&quot;nofollow&quot;&gt;https://jira.opendaylight.org/browse/NETCONF-1197&lt;/a&gt;.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10300">
                    <name>Issue split</name>
                                            <outwardlinks description="split to">
                                        <issuelink>
            <issuekey id="37518">NETCONF-1197</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="37432">NETCONF-1176</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_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i045yv:</customfieldvalue>

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