[MDSAL-731] Failure to start Binding/DOM codec Created: 11/Mar/22 Updated: 17/Mar/22 Resolved: 17/Mar/22 |
|
| Status: | Resolved |
| Project: | mdsal |
| Component/s: | Binding runtime |
| Affects Version/s: | None |
| Fix Version/s: | 9.0.0 |
| Type: | Bug | Priority: | Highest |
| Reporter: | Robert Varga | Assignee: | Robert Varga |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||
| Description |
|
Observed in OVSDB tests:
2022-03-11T13:43:20,963 | ERROR | features-3-thread-1 | OSGiBindingRuntime | 168 - org.opendaylight.mdsal.binding-runtime-osgi - 9.0.0.SNAPSHOT | bundle org.opendaylight.mdsal.binding-runtime-osgi:9.0.0.SNAPSHOT (168)[org.opendaylight.mdsal.binding.runtime.osgi.impl.OSGiBindingRuntime(10)] : The activ
ate method has thrown an exception
java.lang.IllegalArgumentException: Multiple entries with same key: org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfo=DefaultContainerRuntimeType{javaType=GeneratedTypeImpl{identifier=org.opendaylight.yang.gen.v1.urn.opendaylight.params.x
ml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfo, annotations=[], enclosedTypes=[], enumerations=[], constants=[Constant [type=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.QName}, name=QNAME, value=org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.
hwvtep.rev150901.$YangModuleInfoImpl=connection-info]], methodSignatures=[MethodSignatureImpl [name=implementedInterface, comment=null, returnType=ParametrizedTypeImpl{identifier=java.lang.Class}, params=[], annotations=[AnnotationTypeImpl{identifier=java.lang.Override, annotations=[], parameters=[]}]], MethodSigna
tureImpl [name=bindingHashCode, comment=null, returnType=ConcreteTypeImpl{identifier=int}, params=[], annotations=[]], MethodSignatureImpl [name=bindingEquals, comment=null, returnType=ConcreteTypeImpl{identifier=boolean}, params=[], annotations=[]], MethodSignatureImpl [name=bindingToString, comment=null, returnTy
pe=ConcreteTypeImpl{identifier=java.lang.String}, params=[], annotations=[]]]}, statement=EmptyContainerEffectiveStatement{argument=(urn:opendaylight:params:xml:ns:yang:ovsdb:hwvtep?revision=2015-09-01)connection-info}} and org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvt
ep.global.attributes.ConnectionInfo=DefaultContainerRuntimeType{javaType=GeneratedTypeImpl{identifier=org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfo, annotations=[], enclosedTypes=[], enumerations=[], constants=[Constant [type=Concrete
TypeImpl{identifier=org.opendaylight.yangtools.yang.common.QName}, name=QNAME, value=org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.$YangModuleInfoImpl=connection-info]], methodSignatures=[MethodSignatureImpl [name=implementedInterface, comment=null, returnType=ParametrizedT
ypeImpl{identifier=java.lang.Class}, params=[], annotations=[AnnotationTypeImpl{identifier=java.lang.Override, annotations=[], parameters=[]}]], MethodSignatureImpl [name=bindingHashCode, comment=null, returnType=ConcreteTypeImpl{identifier=int}, params=[], annotations=[]], MethodSignatureImpl [name=bindingEquals,
comment=null, returnType=ConcreteTypeImpl{identifier=boolean}, params=[], annotations=[]], MethodSignatureImpl [name=bindingToString, comment=null, returnType=ConcreteTypeImpl{identifier=java.lang.String}, params=[], annotations=[]]]}, statement=EmptyContainerEffectiveStatement{argument=(urn:opendaylight:params:xml
:ns:yang:ovsdb?revision=2015-01-05)connection-info}}
at com.google.common.collect.ImmutableMap.conflictException(ImmutableMap.java:377) ~[?:?]
at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:371) ~[?:?]
at com.google.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket(RegularImmutableMap.java:241) ~[?:?]
at com.google.common.collect.RegularImmutableMap.fromEntryArrayCheckingBucketOverflow(RegularImmutableMap.java:132) ~[?:?]
at com.google.common.collect.RegularImmutableMap.fromEntryArray(RegularImmutableMap.java:94) ~[?:?]
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:573) ~[?:?]
at com.google.common.collect.ImmutableMap$Builder.buildOrThrow(ImmutableMap.java:601) ~[?:?]
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:588) ~[?:?]
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:582) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.rt.AbstractCompositeRuntimeType.<init>(AbstractCompositeRuntimeType.java:55) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.rt.DefaultListRuntimeType.<init>(DefaultListRuntimeType.java:26) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.ListGenerator.createRuntimeType(ListGenerator.java:87) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.ListGenerator.createRuntimeType(ListGenerator.java:34) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.lambda$createRuntimeType$0(AbstractCompositeGenerator.java:174) ~[?:?]
at java.util.Optional.map(Optional.java:265) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:172) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:117) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeType(AbstractExplicitGenerator.java:88) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.recursiveRuntimeType(AbstractExplicitGenerator.java:101) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeTypeOf(AbstractExplicitGenerator.java:95) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.indexChildren(AbstractCompositeGenerator.java:200) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.lambda$createRuntimeType$0(AbstractCompositeGenerator.java:174) ~[?:?]
at java.util.Optional.map(Optional.java:265) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:172) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:117) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeType(AbstractExplicitGenerator.java:88) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.recursiveRuntimeType(AbstractExplicitGenerator.java:101) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeTypeOf(AbstractExplicitGenerator.java:95) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.indexChildren(AbstractCompositeGenerator.java:200) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.lambda$createRuntimeType$0(AbstractCompositeGenerator.java:174) ~[?:?]
at java.util.Optional.map(Optional.java:265) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:172) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:117) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeType(AbstractExplicitGenerator.java:88) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.recursiveRuntimeType(AbstractExplicitGenerator.java:101) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeTypeOf(AbstractExplicitGenerator.java:95) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.indexChildren(AbstractCompositeGenerator.java:200) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.lambda$createRuntimeType$0(AbstractCompositeGenerator.java:174) ~[?:?]
at java.util.Optional.map(Optional.java:265) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:172) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractCompositeGenerator.createRuntimeType(AbstractCompositeGenerator.java:117) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.reactor.AbstractExplicitGenerator.runtimeType(AbstractExplicitGenerator.java:88) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.BindingRuntimeTypesFactory.indexModules(BindingRuntimeTypesFactory.java:76) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.BindingRuntimeTypesFactory.createTypes(BindingRuntimeTypesFactory.java:64) ~[?:?]
at org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator.generateTypeMapping(DefaultBindingRuntimeGenerator.java:30) ~[?:?]
at org.opendaylight.mdsal.binding.runtime.osgi.impl.OSGiBindingRuntime$ActiveInstances.add(OSGiBindingRuntime.java:101) ~[?:?]
|
| Comments |
| Comment by Robert Varga [ 11/Mar/22 ] |
|
So the problem seems to be related to augmentations and groupings and equal naming. Startup here brings in two unrelated models, for hwvtep and southbound, which are essentially copy&pasted, both augmenting topology node with a 'uses' statement, adding ovsdb-node-attributes and hwvtep-global-attributes, both of which feature a 'connection-info' container. This leads to the ovsdb statement ending up in the wrong original – and picking up the generated type for hwvtep. |
| Comment by Robert Varga [ 14/Mar/22 ] |
|
This is also found in netconf: [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.358 s <<< FAILURE! - in org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceTopologyAdapterTest
[ERROR] org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceTopologyAdapterTest Time elapsed: 0.358 s <<< ERROR!
java.lang.IllegalArgumentException: Multiple entries with same key: org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.augmented.optional.fields.IgnoreMissingSchemaSources=DefaultContainerRuntimeType{javaType=GeneratedTypeImpl{identifier=org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.augmented.optional.fields.IgnoreMissingSchemaSources, annotations=[], enclosedTypes=[], enumerations=[], constants=[Constant [type=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.QName}, name=QNAME, value=org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.$YangModuleInfoImpl=ignore-missing-schema-sources]], methodSignatures=[MethodSignatureImpl [name=implementedInterface, comment=null, returnType=ParametrizedTypeImpl{identifier=java.lang.Class}, params=[], annotations=[AnnotationTypeImpl{identifier=java.lang.Override, annotations=[], parameters=[]}]], MethodSignatureImpl [name=bindingHashCode, comment=null, returnType=ConcreteTypeImpl{identifier=int}, params=[], annotations=[]], MethodSignatureImpl [name=bindingEquals, comment=null, returnType=ConcreteTypeImpl{identifier=boolean}, params=[], annotations=[]], MethodSignatureImpl [name=bindingToString, comment=null, returnType=ConcreteTypeImpl{identifier=java.lang.String}, params=[], annotations=[]], MethodSignatureImpl [name=getAllowed, comment=TypeMemberComment{reference=Allows reconnection of the mount point. Default false.}, returnType=ConcreteTypeImpl{identifier=java.lang.Boolean}, params=[], annotations=[]], MethodSignatureImpl [name=requireAllowed, comment=TypeMemberComment{reference=Allows reconnection of the mount point. Default false.}, returnType=ConcreteTypeImpl{identifier=java.lang.Boolean}, params=[], annotations=[]], MethodSignatureImpl [name=getReconnectTime, comment=TypeMemberComment{reference=Time for reconnection - in units milliseconds. Default 5000 ms.}, returnType=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.Uint32}, params=[], annotations=[]], MethodSignatureImpl [name=requireReconnectTime, comment=TypeMemberComment{reference=Time for reconnection - in units milliseconds. Default 5000 ms.}, returnType=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.Uint32}, params=[], annotations=[]]]}, statement=RegularContainerEffectiveStatement{argument=(urn:opendaylight:netconf-node-topology?revision=2015-01-14)ignore-missing-schema-sources}} and org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.augmented.optional.fields.IgnoreMissingSchemaSources=DefaultContainerRuntimeType{javaType=GeneratedTypeImpl{identifier=org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.augmented.optional.fields.IgnoreMissingSchemaSources, annotations=[], enclosedTypes=[], enumerations=[], constants=[Constant [type=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.QName}, name=QNAME, value=org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.$YangModuleInfoImpl=ignore-missing-schema-sources]], methodSignatures=[MethodSignatureImpl [name=implementedInterface, comment=null, returnType=ParametrizedTypeImpl{identifier=java.lang.Class}, params=[], annotations=[AnnotationTypeImpl{identifier=java.lang.Override, annotations=[], parameters=[]}]], MethodSignatureImpl [name=bindingHashCode, comment=null, returnType=ConcreteTypeImpl{identifier=int}, params=[], annotations=[]], MethodSignatureImpl [name=bindingEquals, comment=null, returnType=ConcreteTypeImpl{identifier=boolean}, params=[], annotations=[]], MethodSignatureImpl [name=bindingToString, comment=null, returnType=ConcreteTypeImpl{identifier=java.lang.String}, params=[], annotations=[]], MethodSignatureImpl [name=getAllowed, comment=TypeMemberComment{reference=Allows reconnection of the mount point. Default false.}, returnType=ConcreteTypeImpl{identifier=java.lang.Boolean}, params=[], annotations=[]], MethodSignatureImpl [name=requireAllowed, comment=TypeMemberComment{reference=Allows reconnection of the mount point. Default false.}, returnType=ConcreteTypeImpl{identifier=java.lang.Boolean}, params=[], annotations=[]], MethodSignatureImpl [name=getReconnectTime, comment=TypeMemberComment{reference=Time for reconnection - in units milliseconds. Default 5000 ms.}, returnType=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.Uint32}, params=[], annotations=[]], MethodSignatureImpl [name=requireReconnectTime, comment=TypeMemberComment{reference=Time for reconnection - in units milliseconds. Default 5000 ms.}, returnType=ConcreteTypeImpl{identifier=org.opendaylight.yangtools.yang.common.Uint32}, params=[], annotations=[]]]}, statement=EmptyContainerEffectiveStatement{argument=(urn:opendaylight:netconf-node-optional?revision=2019-06-14)ignore-missing-schema-sources}}
at com.google.common.collect.ImmutableMap.conflictException(ImmutableMap.java:377)
at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:371)
at com.google.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket(RegularImmutableMap.java:241)
at com.google.common.collect.RegularImmutableMap.fromEntryArrayCheckingBucketOverflow(RegularImmutableMap.java:132)
at com.google.common.collect.RegularImmutableMap.fromEntryArray(RegularImmutableMap.java:94)
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:573)
at com.google.common.collect.ImmutableMap$Builder.buildOrThrow(ImmutableMap.java:601)
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:588)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:582)
at org.opendaylight.mdsal.binding.generator.impl.rt.AbstractCompositeRuntimeType.<init>(AbstractCompositeRuntimeType.java:55)
|
| Comment by Robert Varga [ 17/Mar/22 ] |
|
So this is related to |