[MDSAL-136] NPE in BA->BI serialization Created: 15/Mar/16  Updated: 09/Mar/18  Resolved: 19/Apr/16

Status: Resolved
Project: mdsal
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Milos Fabian Assignee: Filip Gregor
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Attachments: Zip Archive bug5524.zip     File opendaylight-bug-5524-module1.yang     File opendaylight-bug-5524-module2.yang     File opendaylight-bug-5524-module3.yang    
Issue Links:
Blocks
blocks BGPCEP-351 BMP: Sent/Received Open Message is no... Resolved
External issue ID: 5524

 Description   

[nioEventLoopGroup-3-1] ERROR org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl - Exception caught in BMP Session.
java.lang.NullPointerException
at org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema.<init>(EffectiveAugmentationSchema.java:43)
at org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext.getResolvedAugmentationSchema(BindingRuntimeContext.java:222)
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.getAugmentationPrototype(DataObjectCodecContext.java:319)
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.reloadAllAugmentations(DataObjectCodecContext.java:137)
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.<init>(DataObjectCodecContext.java:125)
at org.opendaylight.yangtools.binding.data.codec.impl.ContainerNodeCodecContext.<init>(ContainerNodeCodecContext.java:19)
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.createInstance(DataContainerCodecPrototype.java:126)
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:112)
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.streamChild(DataObjectCodecContext.java:150)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingToNormalizedStreamWriter.enter(BindingToNormalizedStreamWriter.java:113)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingToNormalizedStreamWriter.startContainerNode(BindingToNormalizedStreamWriter.java:190)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.optional.capabilities.CParameters$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.OptionalCapabilities$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.BgpParameters$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.peer.up.ReceivedOpen$StreamWriter.serialize(DataObjectSerializerPrototype.java)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:295)
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecContext.writeAsNormalizedNode(DataContainerCodecContext.java:202)
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecContext.serialize(DataContainerCodecContext.java:195)
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.createPeerSessionUp(BmpRouterPeerImpl.java:263)
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.createPeerEntry(BmpRouterPeerImpl.java:317)
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.<init>(BmpRouterPeerImpl.java:147)
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.createRouterPeer(BmpRouterPeerImpl.java:158)
at org.opendaylight.protocol.bmp.impl.app.BmpRouterImpl.onPeerUp(BmpRouterImpl.java:186)
at org.opendaylight.protocol.bmp.impl.app.BmpRouterImpl.onMessage(BmpRouterImpl.java:108)
at org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl.handleMessage(BmpSessionImpl.java:119)
at org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl.channelRead0(BmpSessionImpl.java:48)
at org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl.channelRead0(BmpSessionImpl.java:1)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:276)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:263)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:276)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:263)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
at java.lang.Thread.run(Thread.java:745)



 Comments   
Comment by Milos Fabian [ 15/Mar/16 ]

NPE appears when serializing BA DTO to BI Node in following case:
Three models are involved:

1. bgp-message.yang:
notification open

{ <<-- BA DTO represented by this model uses open-message; }

grouping open-message {
...
list bgp-parameters {
list optional-capabilities {
reference "http://tools.ietf.org/html/rfc5492#section-4";
container c-parameters {
...

2. bgp-multiprotocol.yang:
grouping mp-capabilities

{ ... }

augment "/bgp-msg:open/bgp-msg:bgp-parameters/bgp-msg:optional-capabilities/bgp-msg:c-parameters"

{ uses mp-capabilities; <<-- BA DTO includes this augmentation, that's the point where NPE occurs when serializing }

3. bmp-message.yang:
grouping open-msg {
uses bgp-msg:open-message {
augment "bgp-parameters/optional-capabilities/c-parameters"

{ uses bgp-mp:mp-capabilities; }

}
}
grouping peer-up {
...
container sent-open

{ <<-- the output (BI normalized node) represents this container uses open-msg; description "The full OPEN message transmitted by the monitored router to its peer."; }

...

Note: Serialization is working as expected when the augmentation is not present in the DTO

Comment by Milos Fabian [ 15/Mar/16 ]

Proposed change in BGPCEP project ( with failing test) https://git.opendaylight.org/gerrit/#/c/36246

Comment by Filip Gregor [ 21/Mar/16 ]

Attachment opendaylight-bug-5524-module1.yang has been added with description: yang file 1

Comment by Filip Gregor [ 21/Mar/16 ]

Attachment opendaylight-bug-5524-module2.yang has been added with description: yang file 2

Comment by Filip Gregor [ 21/Mar/16 ]

Attachment opendaylight-bug-5524-module3.yang has been added with description: yang file 3

Comment by Filip Gregor [ 21/Mar/16 ]

I have unsuccessfully tried to replicate this Bug with attached yang files.
Can you please specify version master/berilium, and verify this bug with attached yang files or provide your own

Comment by Milos Fabian [ 23/Mar/16 ]

Attachment bug5524.zip has been added with description: bug5524

Comment by Milos Fabian [ 23/Mar/16 ]

My apologies, in fact there are 4 yang data models involved. Please, see attached zip file including the yang data models and "failing" unit test.
Tested with latest master branch artifacts.

Comment by Filip Gregor [ 11/Apr/16 ]

proposed fix https://git.opendaylight.org/gerrit/#/c/37312/

Comment by Robert Varga [ 13/Apr/16 ]

beryllium: https://git.opendaylight.org/gerrit/37538

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