[NETCONF-899] Northbound NETCONF server connection error Created: 21/Aug/22  Updated: 22/Aug/22  Resolved: 22/Aug/22

Status: Resolved
Project: netconf
Component/s: netconf
Affects Version/s: 4.0.0, 4.0.1
Fix Version/s: 3.0.6, 4.0.2

Type: Bug Priority: High
Reporter: Sangwook Ha Assignee: Robert Varga
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Found in netconf-csit-1node-gate-userfeatures-rfc8040-all-master/59

Connecting to MD-SAL NETCONF server fails with this error:

Caused by: org.opendaylight.mdsal.binding.dom.codec.api.IncorrectNestingException: Child interface org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session is not valid child of interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.monitoring.rev220718.Session1
	at org.opendaylight.mdsal.binding.dom.codec.api.IncorrectNestingException.create(IncorrectNestingException.java:28) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataContainerCodecContext.childNullException(DataContainerCodecContext.java:221) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataContainerCodecContext.childNonNull(DataContainerCodecContext.java:188) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.streamChild(DataObjectCodecContext.java:214) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingToNormalizedStreamWriter.enter(BindingToNormalizedStreamWriter.java:80) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingToNormalizedStreamWriter.startAugmentationNode(BindingToNormalizedStreamWriter.java:162) ~[?:?]
	at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.monitoring.rev220718.Session1$$$streamer.serialize(Unknown Source) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext$DataObjectSerializerProxy.serialize(BindingCodecContext.java:116) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectStreamer.emitAugmentation(DataObjectStreamer.java:173) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectStreamer.streamAugmentations(DataObjectStreamer.java:60) ~[?:?]
	at org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session$$$streamer.serialize(Unknown Source) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext$DataObjectSerializerProxy.serialize(BindingCodecContext.java:116) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext.toNormalizedNode(BindingCodecContext.java:522) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.spi.ForwardingBindingDOMCodecServices.toNormalizedNode(ForwardingBindingDOMCodecServices.java:67) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.codec.spi.ForwardingBindingDOMCodecServices.toNormalizedNode(ForwardingBindingDOMCodecServices.java:67) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMWriteTransactionAdapter.toNormalized(BindingDOMWriteTransactionAdapter.java:105) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMWriteTransactionAdapter.toNormalized(BindingDOMWriteTransactionAdapter.java:98) ~[?:?]
	at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMWriteTransactionAdapter.put(BindingDOMWriteTransactionAdapter.java:33) ~[?:?]
	at org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MonitoringToMdsalWriter.lambda$onSessionStarted$1(MonitoringToMdsalWriter.java:66) ~[?:?]
	at org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MonitoringToMdsalWriter.runTransaction(MonitoringToMdsalWriter.java:103) ~[?:?]
	at org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MonitoringToMdsalWriter.onSessionStarted(MonitoringToMdsalWriter.java:66) ~[?:?]
	at org.opendaylight.netconf.impl.osgi.NetconfSessionMonitoringService.notifySessionUp(NetconfSessionMonitoringService.java:131) ~[?:?]
	at org.opendaylight.netconf.impl.osgi.NetconfSessionMonitoringService.onSessionUp(NetconfSessionMonitoringService.java:82) ~[?:?]
	at org.opendaylight.netconf.impl.NetconfServerSessionListener.onSessionUp(NetconfServerSessionListener.java:50) ~[?:?]
	at org.opendaylight.netconf.impl.NetconfServerSessionListener.onSessionUp(NetconfServerSessionListener.java:33) ~[?:?]
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.sessionUp(AbstractNetconfSession.java:100) ~[?:?]
	at org.opendaylight.netconf.impl.NetconfServerSession.sessionUp(NetconfServerSession.java:86) ~[?:?]
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handlerAdded(AbstractNetconfSession.java:191) ~[?:?]
	at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938) ~[?:?]
	at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609) ~[?:?]
	... 58 more

It appears that the Session1 class generated from odl-netconf-monitoring.yang is loaded twice, one from netconf-impl & mdsal-netconf-impl which has netconf-impl as an embedded dependency causing class comparison to fail.



 Comments   
Comment by Robert Varga [ 22/Aug/22 ]

The fix is to use proper imports from netconf-impl and not embed it. The fix should really be also backported to 3.0.x

Generated at Wed Feb 07 20:16:11 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.