[CONTROLLER-1827] Cannot read CSS configuration through netconf/restconf Created: 03/May/18  Updated: 10/May/18  Resolved: 10/May/18

Status: Resolved
Project: controller
Component/s: config
Affects Version/s: Nitrogen, Oxygen, Fluorine
Fix Version/s: Fluorine, Oxygen SR2, Nitrogen SR3

Type: Bug Priority: Highest
Reporter: Jakub Morvay Assignee: Unassigned
Resolution: Won't Do Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: HTML File CSS-config    

 Description   

When reading the whole css configuration  through netconf/restconf we end up with the folowing YT error:

2018-05-02 05:13:27,997 | WARN | qtp603191920-264 | BrokerFacade | 407 - org.opendaylight.netconf.sal-rest-connector - 1.6.3 | Error reading / from datastore CONFIGURATION ReadFailedException{message=read execution failed, errorList=[RpcError [message=read execution failed, severity=ERROR, errorType=APPLICATION, tag=operation-failed, applicationTag=null, info=null, cause=java.lang.IllegalArgumentException: Failed to parse data response [data: null]]]} at org.opendaylight.controller.md.sal.common.api.data.ReadFailedException$1.newWithCause(ReadFailedException.java:26)[324:org.opendaylight.controller.sal-common-api:1.6.3] at org.opendaylight.controller.md.sal.common.api.data.ReadFailedException$1.newWithCause(ReadFailedException.java:23)[324:org.opendaylight.controller.sal-common-api:1.6.3] at org.opendaylight.yangtools.util.concurrent.ExceptionMapper.apply(ExceptionMapper.java:88)[65:org.opendaylight.yangtools.util:1.2.3] at org.opendaylight.yangtools.util.concurrent.ExceptionMapper.apply(ExceptionMapper.java:38)[65:org.opendaylight.yangtools.util:1.2.3] at org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture.mapException(MappingCheckedFuture.java:61)[65:org.opendaylight.yangtools.util:1.2.3] at org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture.wrapInExecutionException(MappingCheckedFuture.java:65)[65:org.opendaylight.yangtools.util:1.2.3] at org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture.get(MappingCheckedFuture.java:78)[65:org.opendaylight.yangtools.util:1.2.3] at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:142)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.Futures.getDone(Futures.java:1279)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1226)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:911)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:822)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:686)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:112)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:911)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:822)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:686)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:137)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:911)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:822)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:664)[13:com.google.guava:22.0.0] at org.opendaylight.netconf.sal.connect.netconf.listener.UncancellableFuture.set(UncancellableFuture.java:44) at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.processMessage(NetconfDeviceCommunicator.java:335) at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:267) at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:48) at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:65) at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:35) at org.opendaylight.protocol.framework.AbstractProtocolSession.channelRead0(AbstractProtocolSession.java:53) at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[20:io.netty.transport:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[15:io.netty.codec:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[15:io.netty.codec:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[20:io.netty.transport:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[15:io.netty.codec:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[15:io.netty.codec:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:38)[20:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:354)[20:io.netty.transport:4.1.8.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)[17:io.netty.common:4.1.8.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)[17:io.netty.common:4.1.8.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:445)[20:io.netty.transport:4.1.8.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)[17:io.netty.common:4.1.8.Final] at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)[17:io.netty.common:4.1.8.Final] at java.lang.Thread.run(Thread.java:748)[:1.8.0_161] Caused by: java.lang.IllegalArgumentException: Failed to parse data response [data: null] at org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer.toRpcResult(NetconfMessageTransformer.java:199) at org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer.toRpcResult(NetconfMessageTransformer.java:58) at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc.lambda$invokeRpc$1(NetconfDeviceRpc.java:64) at com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.doTransform(AbstractTransformFuture.java:239)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.doTransform(AbstractTransformFuture.java:229)[13:com.google.guava:22.0.0] at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:130)[13:com.google.guava:22.0.0] ... 31 more

Caused by: java.lang.IllegalArgumentException: Parsed QName (urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec?revision=2016-07-14)binding-codec-tree-factory does not refer to a valid identity at org.opendaylight.yangtools.yang.data.util.codec.IdentityCodecUtil.parseIdentity(IdentityCodecUtil.java:59) at org.opendaylight.yangtools.yang.data.codec.xml.IdentityrefXmlCodec.parseValue(IdentityrefXmlCodec.java:39)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.IdentityrefXmlCodec.parseValue(IdentityrefXmlCodec.java:23)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.translateValueByType(XmlParserStream.java:453)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.setValue(XmlParserStream.java:435)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:279)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:297)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.parse(XmlParserStream.java:191)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.traverse(XmlParserStream.java:220)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3] at org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer.toRpcResult(NetconfMessageTransformer.java:196) ... 36 more

 

This can break the netconf CSIT jobs that use NetconfReady test suite. This test suite tries to test readiness of the whole netconf stack by creating a loopback connection to CSS netconf endpoint and reading the whole CSS configuration through RESTCONF and this loopback. This does not succeed and ends with the above mentioned error.

 

You can see such failure here:

https://logs.opendaylight.org/releng/vex-yul-odl-jenkins-1/netconf-csit-3node-clustering-all-nitrogen/384/robot-plugin/log.html.gz#s1-s1-t1-k3-k1-k1-k1-k1-k4-k1-k1-k1-k4-k4-k1



 Comments   
Comment by Luis Gomez [ 03/May/18 ]

Looking at the netconf tests in question, it seems they were failing for quite some time, any idea when this issue started?

Comment by Jakub Morvay [ 03/May/18 ]

I guess this was introduced with this one https://git.opendaylight.org/gerrit/#/c/69075/.

So either CSS is creating wrong XML as a response to <get-config> rpc or some CSS module configuration is not correct and we don't catch this on CSS side.

Comment by Robert Varga [ 03/May/18 ]

Yeah, can we capture the input XML, to see if it's well formed?

Comment by Jakub Morvay [ 03/May/18 ]

You mean the problematic CSS module config or just the response of the <get-config> RPC directly? Both of them should be easy to get (at least theoretically).. For the latter one, we just have to turn on the DEBUG logs for sal.netconf.connector something and read the config DS through RESTCONF or directly manually issue the <get-config> rpc over the SSH session.. And from that we can see what part of config is not valid.. I can try to get this response tomorrow..

Comment by Robert Varga [ 03/May/18 ]

Yeah, we need netconf - layer data, first the document to see if it is well formed (to a certain whether XML parser is okay). If the XML document is wrong, then we need NormalizedNode dump before it is encoded. If the data is wrong, we'll need to dig deeper...

Comment by Jakub Morvay [ 04/May/18 ]

I don't think the CSS netconf endpoint actually uses normalized nodes.. If I recall this correctly, ConfigSubsystemFacade creates the XML according to its internal mapping of created CSS modules and QNames. Not really sure about this I would have to check the implementation.

Anyway, thinking about this once over again, is this really a blocker? I mean the CSS is already deprecated in Nitrogen and it still should be able to create modules. The only thing that is broken is that we cannot get the CSS config through loopback connection and maybe also we cannot push the config over the loopback. I am not sure if the latter is guaranteed in Nitrogen anyway..

Comment by Robert Varga [ 04/May/18 ]

Fair point on NormalizedNodes, but even though CSS is deprecated, it should continue to work – can you capture the output XML, please?

Comment by Jakub Morvay [ 04/May/18 ]

Here it is
CSS-config

Comment by Jakub Morvay [ 04/May/18 ]

We can focus for example just on odl-bmp-impl-cfg,

GET restconf/config/network-topology:network-topology/topology/topology-netconf/node/test-device/yang-ext:mount/config:modules/module/odl-bmp-impl-cfg:bmp-monitor-impl/example-bmp-monitor 
fails with:
2018-05-04 12:25:39,888 | DEBUG | oupCloseable-3-1 | NetconfDeviceCommunicator        | 406 - org.opendaylight.netconf.sal-netconf-connector - 1.6.3 | RemoteDevice{test-device}: Message received <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
<data>
<modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
<module>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">prefix:bmp-monitor-impl</type>
<name>example-bmp-monitor</name>
<extensions xmlns="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi">prefix:extensions</type>
<name>global-rib-extensions</name>
</extensions>
<binding-address xmlns="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">0.0.0.0</binding-address>
<codec-tree-factory xmlns="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec">prefix:binding-codec-tree-factory</type>
<name>runtime-mapping-singleton</name>
</codec-tree-factory>
<dom-data-provider xmlns="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-async-data-broker</type>
<name>pingpong-broker</name>
</dom-data-provider>
<bmp-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">prefix:bmp-dispatcher</type>
<name>global-bmp-dispatcher</name>
</bmp-dispatcher>
<binding-port xmlns="urn:opendaylight:params:xml:ns:yang:controller:bmp:impl">12345</binding-port>
</module>
</modules>
</data>
</rpc-reply>

2018-05-04 12:25:39,892 | WARN  | oupCloseable-3-1 | NetconfRpcFutureCallback         | 406 - org.opendaylight.netconf.sal-netconf-connector - 1.6.3 | RemoteDevice{test-device}: Data read failed.
java.lang.IllegalArgumentException: Failed to parse data response [data: null]
	at org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer.toRpcResult(NetconfMessageTransformer.java:199)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer.toRpcResult(NetconfMessageTransformer.java:58)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc.lambda$invokeRpc$1(NetconfDeviceRpc.java:64)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.doTransform(AbstractTransformFuture.java:239)[13:com.google.guava:22.0.0]
	at com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.doTransform(AbstractTransformFuture.java:229)[13:com.google.guava:22.0.0]
	at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:130)[13:com.google.guava:22.0.0]
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)[13:com.google.guava:22.0.0]
	at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:911)[13:com.google.guava:22.0.0]
	at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:822)[13:com.google.guava:22.0.0]
	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:664)[13:com.google.guava:22.0.0]
	at org.opendaylight.netconf.sal.connect.netconf.listener.UncancellableFuture.set(UncancellableFuture.java:44)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.processMessage(NetconfDeviceCommunicator.java:335)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:267)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:48)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:65)[403:org.opendaylight.netconf.netty-util:1.3.3]
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:35)[403:org.opendaylight.netconf.netty-util:1.3.3]
	at org.opendaylight.protocol.framework.AbstractProtocolSession.channelRead0(AbstractProtocolSession.java:53)[58:org.opendaylight.netconf.protocol-framework:1.0.3]
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[20:io.netty.transport:4.1.8.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[15:io.netty.codec:4.1.8.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[15:io.netty.codec:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[20:io.netty.transport:4.1.8.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[15:io.netty.codec:4.1.8.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[15:io.netty.codec:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:38)[20:io.netty.transport:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:354)[20:io.netty.transport:4.1.8.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)[17:io.netty.common:4.1.8.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)[17:io.netty.common:4.1.8.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:445)[20:io.netty.transport:4.1.8.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)[17:io.netty.common:4.1.8.Final]
	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)[17:io.netty.common:4.1.8.Final]
	at java.lang.Thread.run(Thread.java:748)[:1.8.0_144]
Caused by: java.lang.IllegalArgumentException: Parsed QName (urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec?revision=2016-07-14)binding-codec-tree-factory does not refer to a valid identity
	at org.opendaylight.yangtools.yang.data.util.codec.IdentityCodecUtil.parseIdentity(IdentityCodecUtil.java:59)[71:org.opendaylight.yangtools.yang-data-util:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.IdentityrefXmlCodec.parseValue(IdentityrefXmlCodec.java:39)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.IdentityrefXmlCodec.parseValue(IdentityrefXmlCodec.java:23)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.translateValueByType(XmlParserStream.java:453)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.setValue(XmlParserStream.java:435)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:279)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:297)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:373)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.parse(XmlParserStream.java:191)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.traverse(XmlParserStream.java:220)[69:org.opendaylight.yangtools.yang-data-codec-xml:1.2.3]
	at org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer.toRpcResult(NetconfMessageTransformer.java:196)[406:org.opendaylight.netconf.sal-netconf-connector:1.6.3]
	... 36 more
Comment by Robert Varga [ 04/May/18 ]

Right-o, I suspected as much. The problem is that identity value is not treated specially in config-manager-facede-xml's SimpleIdentityRefAttributeWritingStrategy and the same prefix is used as for simple attributes. That code needs to be fixed to declare another namespace and use that for the identity value.

Comment by Robert Varga [ 04/May/18 ]

This is not a regression in that component, as that bug has been present in the initial code drop done by Maros Marsalek. It is a regression in functionality: you can no longer mount the CSS endpoint as a NETCONF device and expect it to work.

Comment by Robert Varga [ 04/May/18 ]
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec">prefix:binding-codec-tree-factory</type>

is clearly wrong: binding-codec-tree-factory has a

"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding"

namespace and therefore the line should read something like:

<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec" xmlns:odlident="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">odlident:binding-codec-tree-factory</type>
Comment by Robert Varga [ 04/May/18 ]

Something along the lines of completely untested  https://git.opendaylight.org/gerrit/71808 or perhaps some other magic in SimpleIdentityRefAttributeWritingStrategy – but that needs a longer look.

Comment by Ariel Adam [ 10/May/18 ]

Following TSC meeting we decided not to fix this bug 

Generated at Wed Feb 07 19:56:33 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.