[YANGTOOLS-266] FRM: possible wrong use of actions Created: 14/Aug/14  Updated: 10/Apr/22  Resolved: 19/Aug/14

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

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

Operating System: All
Platform: All


External issue ID: 1555

 Description   

Running CSIT I have encountered this:

2014-08-14 21:38:48.728 CEST [DOM-CFG-DCL-2] ERROR o.o.y.u.c.QueuedNotificationManager - DataChangeListenerQueueMgr: Error notifying listener class org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker
java.lang.IllegalArgumentException: Supplied {} is not valid case in schema [ChoiceNodeImpl[qname=(urn:opendaylight:flow:inventory?revision=2013-08-19)action]]
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:119) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext.getCaseSchemaDefinition(BindingRuntimeContext.java:218) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.ChoiceNodeCodecContext.loadCase(ChoiceNodeCodecContext.java:65) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.ChoiceNodeCodecContext.<init>(ChoiceNodeCodecContext.java:40) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.createInstance(DataContainerCodecPrototype.java:135) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:118) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.<init>(DataObjectCodecContext.java:77) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.ListNodeCodecContext.<init>(ListNodeCodecContext.java:38) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.createInstance(DataContainerCodecPrototype.java:133) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:118) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:29) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.getBindingChildValue(DataObjectCodecContext.java:209) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.getBindingData(LazyDataObject.java:127) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.bindingHashCode(LazyDataObject.java:114) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.invoke(LazyDataObject.java:72) ~[na:na]
at com.sun.proxy.$Proxy142.hashCode(Unknown Source) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.bindingHashCode(LazyDataObject.java:115) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.invoke(LazyDataObject.java:72) ~[na:na]
at com.sun.proxy.$Proxy143.hashCode(Unknown Source) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.bindingHashCode(LazyDataObject.java:115) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.invoke(LazyDataObject.java:72) ~[na:na]
at com.sun.proxy.$Proxy140.hashCode(Unknown Source) ~[na:na]
at java.util.Objects.hashCode(Objects.java:96) ~[na:1.7.0_65]
at java.util.HashMap$Entry.hashCode(HashMap.java:847) ~[na:1.7.0_65]
at java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry.hashCode(Collections.java:1490) ~[na:1.7.0_65]
at java.util.HashMap.hash(HashMap.java:362) ~[na:1.7.0_65]
at java.util.HashMap.put(HashMap.java:492) ~[na:1.7.0_65]
at java.util.HashSet.add(HashSet.java:217) ~[na:1.7.0_65]
at java.util.AbstractCollection.addAll(AbstractCollection.java:342) ~[na:1.7.0_65]
at org.opendaylight.controller.frm.AbstractChangeListener.onDataChanged(AbstractChangeListener.java:42) ~[na:na]
at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleConfigurationDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:449) ~[na:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:179) ~[na:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$1.invokeListener(InMemoryDOMDataStore.java:84) ~[na:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$1.invokeListener(InMemoryDOMDataStore.java:78) ~[na:na]
at org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager$NotificationTask.notifyListener(QueuedNotificationManager.java:369) [bundlefile:na]
at org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager$NotificationTask.run(QueuedNotificationManager.java:340) [bundlefile:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]

it seems to be hinting at invalid data present (maybe missing augmentation in model, or similar).



 Comments   
Comment by Vaclav Demcak [ 15/Aug/14 ]

I can not reproduce describe behavior without https://git.opendaylight.org/gerrit/#/c/9757/

wait for now

Comment by Robert Varga [ 15/Aug/14 ]

Just reproduced it:

2014-08-15 22:04:57.044 CEST [DOM-CFG-DCL-4] ERROR o.o.y.u.c.QueuedNotificationManager - DataChangeListenerQueueMgr: Error notifying listener class org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker
java.lang.IllegalArgumentException: Supplied class interface org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionResubmitNodesNodeTableFlowWriteActionsCase (schema ChoiceCaseNodeImpl[qname=(urn:opendaylight:ovs:nx:sal:action?revision=2014-07-14)nx-action-resubmit-nodes-node-table-flow-write-actions-case]) is not valid case in schema ChoiceNodeImpl[qname=(urn:opendaylight:flow:inventory?revision=2013-08-19)action]
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:119) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext.getCaseSchemaDefinition(BindingRuntimeContext.java:218) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.ChoiceNodeCodecContext.loadCase(ChoiceNodeCodecContext.java:65) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.ChoiceNodeCodecContext.<init>(ChoiceNodeCodecContext.java:40) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.createInstance(DataContainerCodecPrototype.java:135) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:118) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.<init>(DataObjectCodecContext.java:77) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.ListNodeCodecContext.<init>(ListNodeCodecContext.java:38) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.createInstance(DataContainerCodecPrototype.java:133) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:118) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecPrototype.get(DataContainerCodecPrototype.java:29) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.getBindingChildValue(DataObjectCodecContext.java:209) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.getBindingData(LazyDataObject.java:127) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.bindingHashCode(LazyDataObject.java:114) ~[na:na]
at org.opendaylight.yangtools.binding.data.codec.impl.LazyDataObject.invoke(LazyDataObject.java:72) ~[na:na]
at com.sun.proxy.$Proxy140.hashCode(Unknown Source) ~[na:na]
at java.util.Objects.hashCode(Objects.java:96) ~[na:1.7.0_65]
at java.util.HashMap$Entry.hashCode(HashMap.java:847) ~[na:1.7.0_65]
at java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry.hashCode(Collections.java:1490) ~[na:1.7.0_65]
at java.util.HashMap.hash(HashMap.java:362) ~[na:1.7.0_65]
at java.util.HashMap.put(HashMap.java:492) ~[na:1.7.0_65]
at java.util.HashSet.add(HashSet.java:217) ~[na:1.7.0_65]
at java.util.AbstractCollection.addAll(AbstractCollection.java:342) ~[na:1.7.0_65]
at org.opendaylight.controller.frm.AbstractChangeListener.onDataChanged(AbstractChangeListener.java:42) ~[na:na]
at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleConfigurationDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:449) ~[na:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:179) ~[na:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$1.invokeListener(InMemoryDOMDataStore.java:84) ~[na:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$1.invokeListener(InMemoryDOMDataStore.java:78) ~[na:na]
at org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager$NotificationTask.notifyListener(QueuedNotificationManager.java:369) [bundlefile:na]
at org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager$NotificationTask.run(QueuedNotificationManager.java:340) [bundlefile:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]

Comment by Robert Varga [ 17/Aug/14 ]

Looks like a codec omission

Comment by Tony Tkacik [ 18/Aug/14 ]

Seems like bug in instantiation of ChoiceNodeCodecContext

https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=blob;f=code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/ChoiceNodeCodecContext.java;h=de785acef686231e21700a1a0607c9128c200aa3;hb=HEAD#l39

uses BindingRuntimeContext to learn all existing cases (without their location info)
in for-each code, it loads each case schema using BindingRuntimeContext#getCaseSchemaDefinition(..) which throws IllegalArgumentException if supplied case is not child of choice.

This means any choice codec in uses, with augmented cases will fail. The whole body of for loop needs to be enclosed by try / catch or case loading should be done differently.

Comment by Robert Varga [ 18/Aug/14 ]

https://git.opendaylight.org/gerrit/10020

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