[NETCONF-1095] Fail to process PATCH with target containing a single forward slash Created: 19/Jul/23 Updated: 30/Aug/23 Resolved: 30/Aug/23 |
|
| Status: | Resolved |
| Project: | netconf |
| Component/s: | restconf-nb |
| Affects Version/s: | 6.0.0, 5.0.6, 4.0.8 |
| Fix Version/s: | 7.0.0, 5.0.8, 6.0.2 |
| Type: | Bug | Priority: | Medium |
| Reporter: | Sangwook Ha | Assignee: | Sangwook Ha |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Description |
|
Controller fails to process a PATCH request where
For example, the following PATCH request to update the configuration of NETCONF topology node PATCH /rests/data/network-topology:network-topology/topology=topology-netconf/node=ncserver
Accept: application/yang-data+json
Content-Type: application/yang-patch+json
{
"ietf-yang-patch:yang-patch": {
"edit": [
{
"edit-id": "1",
"operation": "merge",
"target": "/",
"value": {
"network-topology:node": [
{
"node-id": "ncserver",
"netconf-node-topology:keepalive-delay": 180
}
]
}
}
],
"patch-id": "1"
}
}
triggers the following error: {
"errors": {
"error": [
{
"error-tag": "malformed-message",
"error-info": "Schema for node with name node and namespace urn:TBD:params:xml:ns:yang:network-topology does not exist at EffectiveSchemaContext{modules=[ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-app-config}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-cert}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-cert-mdsal}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-cert-rpc}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-encrypt-service-config}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-password-service-config}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=augment-iip-module}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=cluster-admin}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=distributed-datastore-provider}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-crypt-hash}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-encryption-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-key-exchange-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-mac-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-public-key-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-tls-cipher-suite-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-crypto-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-datastores}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-inet-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-keystore}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-acm}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-monitoring}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-nmda}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-notifications}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-with-defaults}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-origin}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-restconf}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-restconf-monitoring}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-ssh-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-ssh-common}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-ssh-server}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tcp-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tcp-common}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tcp-server}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tls-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tls-common}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tls-server}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-truststore}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-library}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-metadata}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-patch}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=instance-identifier-patch-module}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=nc-notifications}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=netconf-keystore}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=netconf-node-optional}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=netconf-node-topology}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=network-topology}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=notifications}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-controller-cds-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-device-notification}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-entity-owners}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-general-entity}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-netconf-device}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=sal-remote}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=sal-remote-augment}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=subscribe-to-notification}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=yang-ext}}]}",
"error-message": "Error parsing json input: Schema for node with name node and namespace urn:TBD:params:xml:ns:yang:network-topology does not exist at EffectiveSchemaContext{modules=[ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-app-config}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-cert}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-cert-mdsal}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-cert-rpc}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-encrypt-service-config}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=aaa-password-service-config}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=augment-iip-module}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=cluster-admin}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=distributed-datastore-provider}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-crypt-hash}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-encryption-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-key-exchange-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-mac-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-ssh-public-key-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=iana-tls-cipher-suite-algs}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-crypto-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-datastores}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-inet-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-keystore}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-acm}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-monitoring}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-nmda}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-notifications}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-netconf-with-defaults}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-origin}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-restconf}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-restconf-monitoring}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-ssh-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-ssh-common}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-ssh-server}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tcp-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tcp-common}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tcp-server}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tls-client}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tls-common}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-tls-server}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-truststore}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-library}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-metadata}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-patch}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=ietf-yang-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=instance-identifier-patch-module}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=nc-notifications}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=netconf-keystore}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=netconf-node-optional}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=netconf-node-topology}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=network-topology}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=notifications}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-controller-cds-types}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-device-notification}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-entity-owners}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-general-entity}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=odl-netconf-device}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=sal-remote}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=sal-remote-augment}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=subscribe-to-notification}}, ModuleEffectiveStatementImpl{argument=Unqualified{localName=yang-ext}}]}",
"error-type": "protocol"
}
]
}
}
Equivalent PATCH request in XML works without any error: PATCH /rests/data/network-topology:network-topology/topology=topology-netconf/node=ncserver
Accept: application/yang-data+xml
Content-Type: application/yang-patch+xml
<yang-patch xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-patch">
<patch-id>patch-1</patch-id>
<edit>
<edit-id>edit1</edit-id>
<operation>merge</operation>
<target>/</target>
<value>
<node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
<node-id>ncserver</node-id>
<keepalive-delay xmlns="urn:opendaylight:netconf-node-topology">180</keepalive-delay>
</node>
</value>
</edit>
</yang-patch>
RFC 8072 Section 2.4 Target Data Node
|
| Comments |
| Comment by Sangwook Ha [ 20/Jul/23 ] |
|
Tests to reproduce this issue: https://git.opendaylight.org/gerrit/c/netconf/+/106937/1 16:57:25 [ERROR] org.opendaylight.restconf.nb.rfc8040.jersey.providers.patch.JsonPatchBodyReaderTest.modulePatchTargetSecondLevelListWithFullPathURITest -- Time elapsed: 0.003 s <<< ERROR! 16:57:25 org.opendaylight.restconf.common.errors.RestconfDocumentedException: errors: [RestconfError [error-type: protocol, error-tag: malformed-message, error-message: Error parsing json input: Schema node with name my-list1 was not found under (urn:ietf:params:xml:ns:netconf:base:1.0)data., error-info: Schema node with name my-list1 was not found under (urn:ietf:params:xml:ns:netconf:base:1.0)data.]] |