Uploaded image for project: 'yangtools'
  1. yangtools
  2. YANGTOOLS-757

BA -> BI mapping fails when de-serializing reused identity leaf with default value

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Resolution: Cannot Reproduce
    • None
    • None
    • None
    • None
    • Operating System: All
      Platform: All

    • 7959

    Description

      ODL Version: Boron-SR3 SNAPSHOT

      Please find attached sample yang data models + failing test case (includes passing workaround test case too).

      In model "foo" there are defined: base and derived identity, identity-ref type and grouping containing leaf of defined identity-ref type with default value.

      In model "bar" there are defined: container reusing grouping defined in "foo" model and "workaround" container with redefined default value (this one is working as you can see in the test suite).

      Error occurs when mapping BA "Bar" container to BI normalized nodes container.

      Trace from a test run:

      com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Supplied QName (urn:opendaylight:bar?revision=2017-03-13)foo-identity is not a valid identity
      at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203)
      at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
      at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
      at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
      at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
      at org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext.getIdentityClass(BindingRuntimeContext.java:447)
      at org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec.deserialize(IdentityCodec.java:27)
      at org.opendaylight.yangtools.binding.data.codec.impl.IdentityCodec.deserialize(IdentityCodec.java:17)
      at org.opendaylight.yangtools.binding.data.codec.impl.LeafNodeCodecContext.qnameDomValueFromString(LeafNodeCodecContext.java:115)
      at org.opendaylight.yangtools.binding.data.codec.impl.LeafNodeCodecContext.createDefaultObject(LeafNodeCodecContext.java:66)
      at org.opendaylight.yangtools.binding.data.codec.impl.LeafNodeCodecContext.<init>(LeafNodeCodecContext.java:56)
      at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getLeafNodesUsingReflection(BindingCodecContext.java:264)
      at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getLeafNodes(BindingCodecContext.java:229)
      at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.<init>(DataObjectCodecContext.java:84)
      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.SchemaRootCodecContext.createDataTreeChildContext(SchemaRootCodecContext.java:175)
      at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext.access$000(SchemaRootCodecContext.java:39)
      at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext$1.load(SchemaRootCodecContext.java:45)
      at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext$1.load(SchemaRootCodecContext.java:42)
      at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
      at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
      at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
      at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
      at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
      at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
      at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
      at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
      at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext.getOrRethrow(SchemaRootCodecContext.java:242)
      at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext.streamChild(SchemaRootCodecContext.java:136)
      at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecContext.bindingPathArgumentChild(DataContainerCodecContext.java:79)
      at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getCodecContextNode(BindingCodecContext.java:127)
      at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.newWriter(BindingCodecContext.java:104)
      at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNode(BindingNormalizedNodeCodecRegistry.java:102)
      at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toNormalizedNode(BindingToNormalizedNodeCodec.java:135)
      at org.opendaylight.mdsal.bug.BugReusedIdentityLeafWithDefaultValue.bugTest(BugReusedIdentityLeafWithDefaultValue.java:31)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      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.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.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
      at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
      Caused by: java.lang.IllegalArgumentException: Supplied QName (urn:opendaylight:bar?revision=2017-03-13)foo-identity is not a valid identity
      at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
      at org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext$1.load(BindingRuntimeContext.java:92)
      at org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext$1.load(BindingRuntimeContext.java:88)
      at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
      at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
      at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
      at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
      ... 60 more

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            Unassigned Unassigned
            milos.fabian@pantheon.tech Milos Fabian
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: