[YANGTOOLS-846] Deserialization of mpls-label union (identityref + int) fails Created: 05/Feb/18  Updated: 05/Mar/18  Resolved: 05/Mar/18

Status: Resolved
Project: yangtools
Component/s: codecs
Affects Version/s: 1.2.1, 1.1.2, 2.0.1
Fix Version/s: 1.1.4, 2.0.2, 1.2.3

Type: Bug Priority: Medium
Reporter: Marek Gradzki Assignee: Robert Varga
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: Text File honeycomb.log    
Issue Links:
Relates
relates to MDSAL-269 Error occurs when mdsal binding v1 co... Resolved

 Description   

 

typedef mpls-label {
  type union {
    type mpls-label-special-purpose;
    type mpls-label-general-use;
  }
}

 

As defined in:

https://git.opendaylight.org/gerrit/#/c/67814/3/model/ietf/ietf-routing-types/src/main/yang/ietf-routing-types%25402017-02-27.yang

 

Data:

 

{
  "static-lsp": [
    {
      "name": "static-lsp0",
      (...)
      "outgoing-label": 111
    }
  ]
}

 

 

Outcome:

2018-02-05 08:21:56.087 CET [qtp628963688-20] DEBUG o.o.y.b.d.c.i.UnionValueOptionContext - Codec org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec@69393602 failed to deserialize input (urn:ietf:params:xml:ns:yang:ietf-mpls-static?revision=2017-03-10)111
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Supplied QName (urn:ietf:params:xml:ns:yang:ietf-mpls-static?revision=2017-03-10)111 is not a valid identity
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2218) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache.get(LocalCache.java:4147) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4151) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5140) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5146) ~[guava-22.0.jar:na]
    at org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext.getIdentityClass(BindingRuntimeContext.java:447) ~[mdsal-binding-generator-impl-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec.deserialize(IdentityCodec.java:27) ~[mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec.deserialize(IdentityCodec.java:17) ~[mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.UnionValueOptionContext.deserializeUnion(UnionValueOptionContext.java:61) ~[mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.UnionTypeCodec.deserialize(UnionTypeCodec.java:108) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LeafNodeCodecContext.deserializeObject(LeafNodeCodecContext.java:199) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.getBindingChildValue(DataObjectCodecContext.java:324) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.getBindingData(LazyDataObject.java:148) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.invoke(LazyDataObject.java:71) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at com.sun.proxy.$Proxy111.getOutgoingLabel(Unknown Source) [na:na]
(...)
    at io.fd.honeycomb.data.impl.ReadWriteTransaction.submit(ReadWriteTransaction.java:91) [data-impl-1.18.01.1-SNAPSHOT.jar:na]
    at org.opendaylight.netconf.sal.restconf.impl.BrokerFacade.putDataViaTransaction(BrokerFacade.java:1031) [sal-rest-connector-1.6.2-SNAPSHOT.jar:na]
    at org.opendaylight.netconf.sal.restconf.impl.BrokerFacade.commitConfigurationDataPut(BrokerFacade.java:245) [sal-rest-connector-1.6.2-SNAPSHOT.jar:na]
(...)
Caused by: java.lang.IllegalArgumentException: Supplied QName (urn:ietf:params:xml:ns:yang:ietf-mpls-static?revision=2017-03-10)111 is not a valid identity
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:203) ~[guava-22.0.jar:na]
    at org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext$1.load(BindingRuntimeContext.java:92) ~[mdsal-binding-generator-impl-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext$1.load(BindingRuntimeContext.java:88) ~[mdsal-binding-generator-impl-0.11.2-SNAPSHOT.jar:na]
(...)
2018-02-05 08:21:56.092 CET [qtp628963688-20] DEBUG o.o.y.b.d.c.i.UnionValueOptionContext - Codec org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec@69393602 failed to deserialize input (urn:ietf:params:xml:ns:yang:ietf-mpls-static?revision=2017-03-10)111
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Supplied QName (urn:ietf:params:xml:ns:yang:ietf-mpls-static?revision=2017-03-10)111 is not a valid identity
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2218) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache.get(LocalCache.java:4147) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4151) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5140) ~[guava-22.0.jar:na]
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5146) ~[guava-22.0.jar:na]
    at org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext.getIdentityClass(BindingRuntimeContext.java:447) ~[mdsal-binding-generator-impl-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec.deserialize(IdentityCodec.java:27) ~[mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec.deserialize(IdentityCodec.java:17) ~[mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.UnionValueOptionContext.deserializeUnion(UnionValueOptionContext.java:61) ~[mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.UnionTypeCodec.deserialize(UnionTypeCodec.java:108) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LeafNodeCodecContext.deserializeObject(LeafNodeCodecContext.java:199) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.getBindingChildValue(DataObjectCodecContext.java:324) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.getBindingData(LazyDataObject.java:148) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.bindingToString(LazyDataObject.java:205) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
    at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.invoke(LazyDataObject.java:65) [mdsal-binding-dom-codec-0.11.2-SNAPSHOT.jar:na]
(...)

 

Full log included

 



 Comments   
Comment by Robert Varga [ 05/Feb/18 ]

This looks like a problem in yangtools, as the provided data should not deserialize to a QName – there is no such identity, so the input is not valid for an identityref type and the parser should move on to the next field.

Comment by Robert Varga [ 05/Mar/18 ]

Oxygen: https://git.opendaylight.org/gerrit/69076 https://git.opendaylight.org/gerrit/68543

Nitrogen: https://git.opendaylight.org/gerrit/69075 https://git.opendaylight.org/gerrit/69079

Carbon: https://git.opendaylight.org/gerrit/69077 https://git.opendaylight.org/gerrit/69078

 

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