[YANGTOOLS-827] NullPointerException Created: 30/Oct/17  Updated: 21/Jun/18  Resolved: 20/Nov/17

Status: Verified
Project: yangtools
Component/s: None
Affects Version/s: 1.2.0, 1.1.2, 1.0.4
Fix Version/s: 2.0.0, 1.2.1, 1.1.3

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

Issue Links:
Blocks
blocks BGPCEP-373 Move BGP/PCEP configuration into the ... Verified

 Description   

Adding a new version for a data yang model [0][1] ends with NPE[2] on tests

[0] https://git.opendaylight.org/gerrit/#/c/64865/1
[1 ] https://git.opendaylight.org/gerrit/#/c/64866/1

[2]
testStateSynchronizationPerformed(org.opendaylight.bgpcep.pcep.topology.provider.IncrementalSynchronizationProcedureTest) Time elapsed: 3.706 sec <<< ERROR!
com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException: Failed to find schema for type ReferencedTypeImpl [packageName=org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025, name=Stateful1]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2218)
at com.google.common.cache.LocalCache.get(LocalCache.java:4147)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4151)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5140)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5146)
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.getSerializer(BindingNormalizedNodeCodecRegistry.java:72)
at org.opendaylight.mdsal.binding.dom.codec.util.AugmentableDispatchSerializer.emitAugmentation(AugmentableDispatchSerializer.java:75)
at org.opendaylight.mdsal.binding.dom.codec.util.AugmentableDispatchSerializer.serialize(AugmentableDispatchSerializer.java:49)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.stateful.capability.tlv.Stateful$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.StatefulTlv1$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:303)
at org.opendaylight.mdsal.binding.dom.codec.util.AugmentableDispatchSerializer.emitAugmentation(AugmentableDispatchSerializer.java:77)
at org.opendaylight.mdsal.binding.dom.codec.util.AugmentableDispatchSerializer.serialize(AugmentableDispatchSerializer.java:49)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.path.computation.client.StatefulTlv$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.PathComputationClient$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:303)
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNode(BindingNormalizedNodeCodecRegistry.java:107)
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toNormalizedNode(BindingToNormalizedNodeCodec.java:136)
at org.opendaylight.controller.md.sal.binding.impl.AbstractWriteTransaction.put(AbstractWriteTransaction.java:39)
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMWriteTransactionAdapter.put(BindingDOMWriteTransactionAdapter.java:40)
at org.opendaylight.bgpcep.pcep.topology.provider.AbstractTopologySessionListener.writeNode(AbstractTopologySessionListener.java:209)
at org.opendaylight.bgpcep.pcep.topology.provider.AbstractTopologySessionListener.onSessionUp(AbstractTopologySessionListener.java:192)
at org.opendaylight.bgpcep.pcep.topology.provider.IncrementalSynchronizationProcedureTest.testStateSynchronizationPerformed(IncrementalSynchronizationProcedureTest.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)



 Comments   
Comment by Robert Varga [ 07/Nov/17 ]

This is reproducible and is related to ordering of revisions. If they are correctly ordered according to https://tools.ietf.org/html/rfc7950#section-7.1.9 everything works okay.

When they are not, as is the case in the above patches, things break. The problem is either in mdsal infra or yangtools.

Comment by Claudio David Gasparini [ 07/Nov/17 ]

Running node against pcc-mock will throw

2017-11-07 17:42:44,827 | INFO | config-pusher | ConfigPusherImpl | 213 - org.opendaylight.controller.config-persister-impl - 0.8.0.SNAPSHOT | All configuration snapshots have been pushed successfully.
2017-11-07 17:45:54,808 | WARN | entLoopGroup-5-1 | BindingToNormalizedNodeCodec | 221 - org.opendaylight.controller.sal-binding-broker-impl - 1.7.0.SNAPSHOT | Blocking thread to wait for schema convergence updates for 5 SECONDS
2017-11-07 17:45:59,809 | WARN | entLoopGroup-5-1 | AbstractSessionNegotiator | 185 - org.opendaylight.bgpcep.pcep-impl - 0.9.0.SNAPSHOT | Unexpected negotiation failure
org.opendaylight.mdsal.binding.dom.codec.impl.MissingSchemaForClassException: Schema is not available for interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.PathComputationClient1
at org.opendaylight.mdsal.binding.dom.codec.impl.MissingSchemaForClassException.forClass(MissingSchemaForClassException.java:32)
at org.opendaylight.mdsal.binding.dom.codec.impl.MissingSchemaForClassException.check(MissingSchemaForClassException.java:47)
at org.opendaylight.mdsal.binding.dom.codec.impl.DataContainerCodecContext.childNonNull(DataContainerCodecContext.java:172)[247:org.opendaylight.mdsal.binding-dom-codec:0.12.0.SNAPSHOT]
at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.bindingPathArgumentChild(DataObjectCodecContext.java:181)[247:org.opendaylight.mdsal.binding-dom-codec:0.12.0.SNAPSHOT]
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext.getCodecContextNode(BindingCodecContext.java:127)[247:org.opendaylight.mdsal.binding-dom-codec:0.12.0.SNAPSHOT]
at org.opendaylight.mdsal.binding.dom.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:29)[247:org.opendaylight.mdsal.binding-dom-codec:0.12.0.SNAPSHOT]
at org.opendaylight.mdsal.binding.dom.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:19)[247:org.opendaylight.mdsal.binding-dom-codec:0.12.0.SNAPSHOT]
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.toYangInstanceIdentifier(BindingNormalizedNodeCodecRegistry.java:86)[247:org.opendaylight.mdsal.binding-dom-codec:0.12.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toYangInstanceIdentifierBlocking(BindingToNormalizedNodeCodec.java:103)[221:org.opendaylight.controller.sal-binding-broker-impl:1.7.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedTransaction.doRead(AbstractForwardedTransaction.java:64)[221:org.opendaylight.controller.sal-binding-broker-impl:1.7.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMReadTransactionAdapter.read(BindingDOMReadTransactionAdapter.java:31)[221:org.opendaylight.controller.sal-binding-broker-impl:1.7.0.SNAPSHOT]
at org.opendaylight.bgpcep.pcep.topology.provider.PCEPStatefulPeerProposal.setPeerProposal(PCEPStatefulPeerProposal.java:58)[189:org.opendaylight.bgpcep.pcep-topology-provider:0.9.0.SNAPSHOT]
at org.opendaylight.bgpcep.pcep.topology.provider.ServerSessionManager.setPeerSpecificProposal(ServerSessionManager.java:253)[189:org.opendaylight.bgpcep.pcep-topology-provider:0.9.0.SNAPSHOT]
at org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory.getSessionProposal(BasePCEPSessionProposalFactory.java:64)[185:org.opendaylight.bgpcep.pcep-impl:0.9.0.SNAPSHOT]
at org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory.createNegotiator(DefaultPCEPSessionNegotiatorFactory.java:44)[185:org.opendaylight.bgpcep.pcep-impl:0.9.0.SNAPSHOT]
at org.opendaylight.protocol.pcep.impl.PCEPSessionNegotiator.startNegotiation(PCEPSessionNegotiator.java:77)[185:org.opendaylight.bgpcep.pcep-impl:0.9.0.SNAPSHOT]
at org.opendaylight.protocol.pcep.impl.AbstractSessionNegotiator.channelActive(AbstractSessionNegotiator.java:62)[185:org.opendaylight.bgpcep.pcep-impl:0.9.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:214)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:200)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:193)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:64)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:214)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:200)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:193)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:64)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:214)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:200)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:193)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1322)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:214)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:200)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:902)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:514)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:419)[99:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:478)[99:io.netty.transport:4.1.8.Final]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)[96:io.netty.common:4.1.8.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)[96:io.netty.common:4.1.8.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:304)[100:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)[96:io.netty.common:4.1.8.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)[96:io.netty.common:4.1.8.Final]
at java.lang.Thread.run(Thread.java:748)[:1.8.0_131]
2017-11-07 17:45:59,818 | WARN | entLoopGroup-5-2 | BindingToNormalizedNodeCodec | 221 - org.opendaylight.controller.sal-binding-broker-impl - 1.7.0.SNAPSHOT | Blocking thread to wait for schema convergence updates for 5 SECONDS

Comment by Robert Varga [ 07/Nov/17 ]

It seems org.opendaylight.yangtools.yang.parser.impl.util.YangModelDependencyInfo is the culprit here.

What is happening is that the module revision is satisfied by the first statement and not updated, leading YangTextSchemaContextResolver to believe the model cannot be resolved, which in turn leads to it being excluded.

This leads to a schemacontext which does not actually represent the correct view of models, leading to the NPE.

Comment by Robert Varga [ 07/Nov/17 ]

carbon: https://git.opendaylight.org/gerrit/65279
nitrogen: https://git.opendaylight.org/gerrit/65278
oxygen: https://git.opendaylight.org/gerrit/65280

Comment by Michael Vorburger [ 21/Jun/18 ]

something similar looking in MDSAL-354

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