[YANGTOOLS-565] ordered-by user for leaf-list throws commit exception Created: 05/Jan/16  Updated: 10/Apr/22  Resolved: 07/Jan/16

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

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

Operating System: All
Platform: All


Issue Links:
Duplicate
duplicates YANGTOOLS-327 StreamWriter APIs loses information a... Resolved
External issue ID: 4880

 Description   

I added "ordered-by user" to preserve the order in which I created that leaf-list. However, now I am unable to write to the datastore for that augmentation and commit throws an exception.

augment "/inv:node
ext:augment-identifier resource-list;
leaf-list resource

{ + ordered-by user; type inet:uri; }

Here is the exception I get:

2016-01-05 09:07:02,423 | ERROR | ult-dispatcher-2 | LocalThreePhaseCommitCohort | 155 - org.opendaylight.controller.sal-distributed-datastore - 1.2.0.Lithium | Failed to prepare transaction member-1-txn-137 on backend
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException
at com.google.common.util.concurrent.Futures$ImmediateFailedFuture.get(Futures.java:190)[37:com.google.guava:18.0.0]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(ShardCommitCoordinator.java:357)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCanCommit(ShardCommitCoordinator.java:316)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleCanCommit(ShardCommitCoordinator.java:268)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleReadyLocalTransaction(ShardCommitCoordinator.java:240)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
at org.opendaylight.controller.cluster.datastore.Shard.handleReadyLocalTransaction(Shard.java:456)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
at org.opendaylight.controller.cluster.datastore.Shard.onReceiveCommand(Shard.java:239)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
at akka.persistence.UntypedPersistentActor.onReceive(Eventsourced.scala:430)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at org.opendaylight.controller.cluster.common.actor.MeteringBehavior.apply(MeteringBehavior.java:97)[147:org.opendaylight.controller.sal-clustering-commons:1.2.0.Lithium]
at akka.actor.ActorCell$$anonfun$become$1.applyOrElse(ActorCell.scala:534)[140:com.typesafe.akka.actor:2.3.10]
at akka.persistence.Recovery$State$class.process(Recovery.scala:30)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.ProcessorImpl$$anon$2.process(Processor.scala:103)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.ProcessorImpl$$anon$2.aroundReceive(Processor.scala:114)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Recovery$class.aroundReceive(Recovery.scala:265)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(Eventsourced.scala:428)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$$anon$2.doAroundReceive(Eventsourced.scala:82)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$$anon$2.aroundReceive(Eventsourced.scala:78)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$class.aroundReceive(Eventsourced.scala:369)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.UntypedPersistentActor.aroundReceive(Eventsourced.scala:428)[145:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[140:com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.invoke(ActorCell.scala:487)[140:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)[140:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.run(Mailbox.scala:221)[140:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.exec(Mailbox.scala:231)[140:com.typesafe.akka.actor:2.3.10]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[137:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[137:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[137:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[137:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
Caused by: java.lang.IllegalArgumentException
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)[37:com.google.guava:18.0.0]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.OrderedLeafSetModificationStrategy.createBuilder(OrderedLeafSetModificationStrategy.java:39)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:155)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyWrite(AbstractNodeContainerModificationStrategy.java:93)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:209)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:133)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:206)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:114)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:156)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:199)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.RootModificationApplyOperation.apply(RootModificationApplyOperation.java:78)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractDataTreeTip.prepare(AbstractDataTreeTip.java:52)[61:org.opendaylight.yangtools.yang-data-impl:0.7.0.Lithium]
at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.preCommit(SimpleShardDataTreeCohort.java:72)[155:org.opendaylight.controller.sal-distributed-datastore:1.2.0.Lithium]
... 27 more



 Comments   
Comment by Srini Seetharaman [ 05/Jan/16 ]

I verified that this issue happens without bering an augmentation case. I instantiated an object of type ResourceList and setResource(List<Resource>). When I write this object to the DS, it gives the exception.

Comment by Robert Varga [ 06/Jan/16 ]

This is coming in from mdsal-binding-dom-codec, which does not really have a dedicated method to call in NormalizedNodeStreamWriter to indicate the thing should be ordered. This is an API deficiency, as lists already have this, so it is likely other codecs are affected, too.

NormalizedNoedStreamWriter implementations which internally track corresponding SchemaNodes can recover rather easily by looking at the node. I'll take a look at what it will take to fix this.

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