<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:15:57 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-804] YANG Patch target parsing does not work with RFC8072 examples</title>
                <link>https://jira.opendaylight.org/browse/NETCONF-804</link>
                <project id="10142" key="NETCONF">netconf</project>
                    <description>&lt;p&gt;A very simple invocation following RFC8072 examples:&lt;/p&gt;

&lt;p&gt;&#160;&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;curl -u admin:admin -X PATCH http://localhost:8181/rests/data/network-topology:network-topology/topology=topology-netconf -H &quot;Content-Type: application/yang-patch+json&quot; -H &quot;Accept: application/yang-data+json&quot; -v --data &apos;
{
 &#160;&#160;&quot;ietf-yang-patch:yang-patch&quot; : {
 &#160;&#160;&#160;&#160;&#160;&quot;edit&quot; : [
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;edit-id&quot; : &quot;test-edit&quot;,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;operation&quot; : &quot;create&quot;,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;target&quot; : &quot;/node=test-node&quot;,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;value&quot; : {
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;node&quot; : [
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;netconf-node-topology:host&quot; : &quot;127.0.0.1&quot;,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;netconf-node-topology:keepalive-delay&quot; : 0,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;netconf-node-topology:password&quot; : &quot;topsecret&quot;,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;netconf-node-topology:port&quot; : 17830,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;netconf-node-topology:tcp-only&quot; : false,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;netconf-node-topology:username&quot; : &quot;admin&quot;,
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&quot;node-id&quot; : &quot;test-node&quot;
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;]
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
 &#160;&#160;&#160;&#160;&#160;],
 &#160;&#160;&#160;&#160;&#160;&quot;patch-id&quot; : &quot;test&quot;
 &#160;&#160;}
}&apos;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;results in a 400 bad request:&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;* Mark bundle as not supporting multiuse
&amp;lt; HTTP/1.1 400 Bad Request
&amp;lt; Set-Cookie: JSESSIONID=node0ttrvzsoy0jfmbgck6vo7hinq0.node0; Path=/; HttpOnly
&amp;lt; Expires: Thu, 01 Jan 1970 00:00:00 GMT
&amp;lt; Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 12-Aug-2021 14:42:43 GMT; SameSite=lax
&amp;lt; Content-Type: application/yang-data+json
&amp;lt; Content-Length: 189
&amp;lt; &#160;
* Connection #0 to host localhost left intact
{&quot;errors&quot;:{&quot;error&quot;:[{&quot;error-tag&quot;:&quot;malformed-message&quot;,&quot;error-info&quot;:&quot;Failed to lookup prefix &quot;,&quot;error-message&quot;:&quot;Error parsing json input: Failed to lookup prefix &quot;,&quot;error-type&quot;:&quot;protocol&quot;}]}}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="34311">NETCONF-804</key>
            <summary>YANG Patch target parsing does not work with RFC8072 examples</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="2" iconUrl="https://jira.opendaylight.org/images/icons/priorities/critical.svg">High</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="rovarga">Robert Varga</assignee>
                                    <reporter username="rovarga">Robert Varga</reporter>
                        <labels>
                            <label>pt</label>
                    </labels>
                <created>Fri, 13 Aug 2021 14:55:42 +0000</created>
                <updated>Wed, 20 Oct 2021 21:24:54 +0000</updated>
                            <resolved>Tue, 17 Aug 2021 11:55:53 +0000</resolved>
                                                    <fixVersion>2.0.3</fixVersion>
                    <fixVersion>1.13.5</fixVersion>
                                    <component>restconf-nb</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="69523" author="rovarga" created="Fri, 13 Aug 2021 14:57:36 +0000"  >&lt;p&gt;Failure cause is not obvious, but a bit of debugging shows the call is to resolve &quot;/node&quot; part with default namespace, i.e. from AbstractStringInstanceIdentifierCodec.createQName() &#8211; which is weird, as we have lastModule initialized at this point, hence we should be able to do right thing without resolving the prefix.&lt;/p&gt;

&lt;p&gt;&#160;&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;Thread [qtp579053283-382] (Suspended (exception IllegalArgumentException))	
	Preconditions.checkArgument(boolean, String, Object) line: 219	
	StringModuleInstanceIdentifierCodec(AbstractModuleStringInstanceIdentifierCodec).createQName(String, String) line: 36	
	StringModuleInstanceIdentifierCodec(AbstractStringInstanceIdentifierCodec).createQName(QNameModule, String) line: 115	
	XpathStringParsingPathArgumentBuilder.nextQName() line: 195	
	XpathStringParsingPathArgumentBuilder.computeNextArgument() line: 96	
	XpathStringParsingPathArgumentBuilder.build() line: 87	
	StringModuleInstanceIdentifierCodec(AbstractStringInstanceIdentifierCodec).deserializeImpl(String) line: 102	
	StringModuleInstanceIdentifierCodec(AbstractStringInstanceIdentifierCodec).deserializeImpl(Object) line: 32	
	StringModuleInstanceIdentifierCodec(AbstractCodec&amp;lt;P,I,X&amp;gt;).deserialize(P) line: 29	
	JsonPatchBodyReader.readEditDefinition(PatchEdit, JsonReader, InstanceIdentifierContext&amp;lt;?&amp;gt;, StringModuleInstanceIdentifierCodec) line: 235	
	JsonPatchBodyReader.parseByName(String, PatchEdit, JsonReader, InstanceIdentifierContext&amp;lt;?&amp;gt;, StringModuleInstanceIdentifierCodec, List&amp;lt;PatchEntity&amp;gt;, AtomicReference&amp;lt;String&amp;gt;) line: 183	
	JsonPatchBodyReader.read(JsonReader, InstanceIdentifierContext&amp;lt;?&amp;gt;, AtomicReference&amp;lt;String&amp;gt;) line: 144	
	JsonPatchBodyReader.readFrom(InstanceIdentifierContext&amp;lt;?&amp;gt;, InputStream) line: 84	
	JsonPatchBodyReader.readBody(InstanceIdentifierContext&amp;lt;?&amp;gt;, InputStream) line: 74	
	JsonPatchBodyReader.readBody(InstanceIdentifierContext, InputStream) line: 59	
	JsonPatchBodyReader(AbstractIdentifierAwareJaxRsProvider&amp;lt;T&amp;gt;).readFrom(Class&amp;lt;T&amp;gt;, Type, Annotation[], MediaType, MultivaluedMap&amp;lt;String,String&amp;gt;, InputStream) line: 67	
	ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorContext, MessageBodyReader, EntityInputStream) line: 257	
	ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorContext) line: 236	
	ReaderInterceptorExecutor.proceed() line: 156	
	MappableExceptionWrapperInterceptor.aroundReadFrom(ReaderInterceptorContext) line: 73	
	ReaderInterceptorExecutor.proceed() line: 156	
	MessageBodyFactory.readFrom(Class&amp;lt;?&amp;gt;, Type, Annotation[], MediaType, MultivaluedMap&amp;lt;String,String&amp;gt;, PropertiesDelegate, InputStream, Iterable&amp;lt;ReaderInterceptor&amp;gt;, boolean) line: 1091	
	ContainerRequest(InboundMessageContext).readEntity(Class&amp;lt;T&amp;gt;, Type, Annotation[], PropertiesDelegate) line: 874	
	ContainerRequest.readEntity(Class&amp;lt;T&amp;gt;, Type, Annotation[]) line: 271	
	EntityParamValueParamProvider$EntityValueSupplier.apply(ContainerRequest) line: 97	
	EntityParamValueParamProvider$EntityValueSupplier.apply(Object) line: 80	
	ParamValueFactoryWithSource&amp;lt;T&amp;gt;.apply(ContainerRequest) line: 74	
	ParameterValueHelper.getParameterValues(List&amp;lt;ParamValueFactoryWithSource&amp;lt;?&amp;gt;&amp;gt;, ContainerRequest) line: 92	
	JavaResourceMethodDispatcherProvider$TypeOutInvoker(JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker).getParamValues(ContainerRequest) line: 133	
	JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(Object, ContainerRequest) line: 243	
	JavaResourceMethodDispatcherProvider$TypeOutInvoker(AbstractJavaResourceMethodDispatcher).dispatch(Object, ContainerRequest) line: 103	
	ResourceMethodInvoker.invoke(RequestProcessingContext, Object) line: 493	
	ResourceMethodInvoker.apply(RequestProcessingContext) line: 415	
	ResourceMethodInvoker.apply(Object) line: 104	
	ServerRuntime$1.run() line: 277	
	Errors$1.call() line: 272	
	Errors$1.call() line: 268	
	Errors.process(Callable&amp;lt;T&amp;gt;, boolean) line: 316	
	Errors.process(Producer&amp;lt;T&amp;gt;, boolean) line: 298	
	Errors.process(Runnable) line: 268	
	Hk2RequestScope(RequestScope).runInScope(RequestContext, Runnable) line: 289	
	ServerRuntime.process(ContainerRequest) line: 256	
	ApplicationHandler.handle(ContainerRequest) line: 703	
	WebComponent.serviceImpl(URI, URI, HttpServletRequest, HttpServletResponse) line: 416	
	WebComponent.service(URI, URI, HttpServletRequest, HttpServletResponse) line: 370	
	ServletContainer.service(URI, URI, HttpServletRequest, HttpServletResponse) line: 389	
	ServletContainer.service(HttpServletRequest, HttpServletResponse) line: 342	
	ServletContainer.service(ServletRequest, ServletResponse) line: 229	
	ServletHolder$NotAsync.service(ServletRequest, ServletResponse) line: 1443	
	ServletHolder.handle(Request, ServletRequest, ServletResponse) line: 791	
	ServletHandler$ChainEnd.doFilter(ServletRequest, ServletResponse) line: 1626	
	CrossOriginFilter.handle(HttpServletRequest, HttpServletResponse, FilterChain) line: 319	
	CrossOriginFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 273	
	FilterHolder.doFilter(ServletRequest, ServletResponse, FilterChain) line: 193	
	ServletHandler$Chain.doFilter(ServletRequest, ServletResponse) line: 1601	
	ProxiedFilterChain.doFilter(ServletRequest, ServletResponse) line: 61	
	ODLHttpAuthenticationFilter(AdviceFilter).executeChain(ServletRequest, ServletResponse, FilterChain) line: 108	
	ODLHttpAuthenticationFilter(AdviceFilter).doFilterInternal(ServletRequest, ServletResponse, FilterChain) line: 137	
	ODLHttpAuthenticationFilter(OncePerRequestFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 125	
	ProxiedFilterChain.doFilter(ServletRequest, ServletResponse) line: 66	
	InvalidRequestFilter(AdviceFilter).executeChain(ServletRequest, ServletResponse, FilterChain) line: 108	
	InvalidRequestFilter(AdviceFilter).doFilterInternal(ServletRequest, ServletResponse, FilterChain) line: 137	
	InvalidRequestFilter(OncePerRequestFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 125	
	ProxiedFilterChain.doFilter(ServletRequest, ServletResponse) line: 66	
	AAAShiroFilter(AbstractShiroFilter).executeChain(ServletRequest, ServletResponse, FilterChain) line: 450	
	AbstractShiroFilter$1.call() line: 365	
	SubjectCallable&amp;lt;V&amp;gt;.doCall(Callable&amp;lt;V&amp;gt;) line: 90	
	SubjectCallable&amp;lt;V&amp;gt;.call() line: 83	
	WebDelegatingSubject(DelegatingSubject).execute(Callable&amp;lt;V&amp;gt;) line: 387	
	AAAShiroFilter(AbstractShiroFilter).doFilterInternal(ServletRequest, ServletResponse, FilterChain) line: 362	
	AAAShiroFilter(OncePerRequestFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 125	
	FilterHolder.doFilter(ServletRequest, ServletResponse, FilterChain) line: 193	
	ServletHandler$Chain.doFilter(ServletRequest, ServletResponse) line: 1601	
	WebSocketUpgradeFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 228	
	FilterHolder.doFilter(ServletRequest, ServletResponse, FilterChain) line: 193	
	ServletHandler$Chain.doFilter(ServletRequest, ServletResponse) line: 1601	
	HttpServiceServletHandler(ServletHandler).doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 548	
	HttpServiceServletHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 71	
	HttpServiceServletHandler(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 143	
	ConstraintSecurityHandler(SecurityHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 602	
	SessionHandler(HandlerWrapper).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 127	
	SessionHandler(ScopedHandler).nextHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 235	
	SessionHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 1624	
	HttpServiceContext(ScopedHandler).nextHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 233	
	HttpServiceContext(ContextHandler).doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 1435	
	HttpServiceContext.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 294	
	HttpServiceServletHandler(ScopedHandler).nextScope(String, Request, HttpServletRequest, HttpServletResponse) line: 188	
	HttpServiceServletHandler(ServletHandler).doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 501	
	SessionHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 1594	
	HttpServiceContext(ScopedHandler).nextScope(String, Request, HttpServletRequest, HttpServletResponse) line: 186	
	HttpServiceContext(ContextHandler).doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 1350	
	HttpServiceContext(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 141	
	JettyServerHandlerCollection.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 82	
	JettyServerWrapper(HandlerWrapper).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 127	
	JettyServerWrapper(Server).handle(HttpChannel) line: 516	
	HttpChannelOverHttp(HttpChannel).lambda$handle$1() line: 388	
	313710830.dispatch() line: not available	
	HttpChannelOverHttp(HttpChannel).dispatch(DispatcherType, HttpChannel$Dispatchable) line: 633	
	HttpChannelOverHttp(HttpChannel).handle() line: 380	
	HttpConnection.onFillable() line: 277	
	AbstractConnection$ReadCallback.succeeded() line: 311	
	AbstractEndPoint$1(FillInterest).fillable() line: 105	
	ChannelEndPoint$1.run() line: 104	
	QueuedThreadPool.runJob(Runnable) line: 882	
	QueuedThreadPool$Runner.run() line: 1036	
	Thread.run() line: 829	
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="69524" author="rovarga" created="Fri, 13 Aug 2021 15:17:46 +0000"  >&lt;p&gt;I think StringModuleInstanceIdentifierCodec needs to be taught the same trick (in JSON parsing) as RFC7951JSONInstanceIdentifierCodec, i.e. to lastModule. Not sure how this works out with XML yet.&lt;/p&gt;</comment>
                            <comment id="69525" author="rovarga" created="Fri, 13 Aug 2021 21:55:00 +0000"  >&lt;p&gt;RFC8072 defines target this way:&lt;/p&gt;

&lt;p&gt;&#160;&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;     typedef target-resource-offset {
       type string;
       description
         &quot;Contains a data resource identifier string representing
          a sub-resource within the target resource.
          The document root for this expression is the
          target resource that is specified in the
          protocol operation (e.g., the URI for the PATCH request).

          This string is encoded according to the same rules as those
          for a data resource identifier in a RESTCONF request URI.&quot;;
       reference
          &quot;RFC 8040, Section&#160;3.5.3.&quot;;
     }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Our implementation uses a weird XML-based subclass of ... whatever. We should not be using that, though, but rather use the URL -&amp;gt; YangInstanceIdentifier facilities in ParserIdentifier.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="33759">INTTEST-125</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|i03z5b:</customfieldvalue>

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