[SRVUTILS-3] Failed to prepare transaction member-1-datastore-config-fe-1-txn-15-0 on backend org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException: Optimistic lock failed for path /(urn:opendaylight:serviceutils:upgrade?rev..)upgrade-config Created: 31/Jul/18 Updated: 02/Aug/18 |
|
| Status: | To Do |
| Project: | serviceutils |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Medium |
| Reporter: | Michael Vorburger | Assignee: | Faseela K |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||||||
| Description |
|
https://lists.opendaylight.org/pipermail/genius-dev/2018-July/003210.html 2018-07-31T07:32:53,435 | WARN | opendaylight-cluster-data-shard-dispatcher-45 | ShardDataTree | 228 - org.opendaylight.controller.sal-distributed-datastore - 1.7.3.SNAPSHOT | member-1-shard-default-config: Store Tx member-1-datastore-config-fe-1-txn-15-0: Conflicting modification for path /(urn:opendaylight:serviceutils:upgrade?revision=2018-07-02)upgrade-config. 2018-07-31T07:32:53,442 | ERROR | opendaylight-cluster-data-akka.actor.default-dispatcher-22 | LocalThreePhaseCommitCohort | 228 - org.opendaylight.controller.sal-distributed-datastore - 1.7.3.SNAPSHOT | Failed to prepare transaction member-1-datastore-config-fe-1-txn-15-0 on backend org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException: Optimistic lock failed for path /(urn:opendaylight:serviceutils:upgrade?revision=2018-07-02)upgrade-config at org.opendaylight.controller.cluster.datastore.ShardDataTree.lambda$processNextPendingTransaction$0(ShardDataTree.java:749) ~[228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextPending(ShardDataTree.java:787) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextPendingTransaction(ShardDataTree.java:734) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.ShardDataTree.startCanCommit(ShardDataTree.java:888) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.canCommit(SimpleShardDataTreeCohort.java:99) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.CohortEntry.canCommit(CohortEntry.java:99) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleCanCommit(ShardCommitCoordinator.java:239) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleReadyLocalTransaction(ShardCommitCoordinator.java:201) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.Shard.handleReadyLocalTransaction(Shard.java:739) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.datastore.Shard.handleNonRaftCommand(Shard.java:336) [228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.raft.RaftActor.handleCommand(RaftActor.java:270) [213:org.opendaylight.controller.sal-akka-raft:1.7.3.SNAPSHOT] at org.opendaylight.controller.cluster.common.actor.AbstractUntypedPersistentActor.onReceiveCommand(AbstractUntypedPersistentActor.java:44) [221:org.opendaylight.controller.sal-clustering-commons:1.7.3.SNAPSHOT] at akka.persistence.UntypedPersistentActor.onReceive(PersistentActor.scala:275) [47:com.typesafe.akka.persistence:2.5.11] at org.opendaylight.controller.cluster.common.actor.MeteringBehavior.apply(MeteringBehavior.java:104) [221:org.opendaylight.controller.sal-clustering-commons:1.7.3.SNAPSHOT] at akka.actor.ActorCell$$anonfun$become$1.applyOrElse(ActorCell.scala:608) [44:com.typesafe.akka.actor:2.5.11] at akka.actor.Actor.aroundReceive(Actor.scala:517) [44:com.typesafe.akka.actor:2.5.11] at akka.actor.Actor.aroundReceive$(Actor.scala:515) [44:com.typesafe.akka.actor:2.5.11] at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(PersistentActor.scala:273) [47:com.typesafe.akka.persistence:2.5.11] at akka.persistence.Eventsourced$$anon$1.stateReceive(Eventsourced.scala:691) [47:com.typesafe.akka.persistence:2.5.11] at akka.persistence.Eventsourced.aroundReceive(Eventsourced.scala:192) [47:com.typesafe.akka.persistence:2.5.11] at akka.persistence.Eventsourced.aroundReceive$(Eventsourced.scala:191) [47:com.typesafe.akka.persistence:2.5.11] at akka.persistence.UntypedPersistentActor.aroundReceive(PersistentActor.scala:273) [47:com.typesafe.akka.persistence:2.5.11] at akka.actor.ActorCell.receiveMessage(ActorCell.scala:590) [44:com.typesafe.akka.actor:2.5.11] at akka.actor.ActorCell.invoke(ActorCell.scala:559) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.Mailbox.run(Mailbox.scala:224) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.Mailbox.exec(Mailbox.scala:234) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [44:com.typesafe.akka.actor:2.5.11] at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [44:com.typesafe.akka.actor:2.5.11] Caused by: org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException: Node was replaced by other transaction. at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkConflicting(SchemaAwareApplyOperation.java:80) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkNotConflicting(SchemaAwareApplyOperation.java:111) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkWriteApplicable(SchemaAwareApplyOperation.java:179) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:134) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.StructuralContainerModificationStrategy.checkApplicable(StructuralContainerModificationStrategy.java:100) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:302) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:284) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:131) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.RootModificationApplyOperation.checkApplicable(RootModificationApplyOperation.java:71) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractDataTreeTip.validate(AbstractDataTreeTip.java:38) ~[386:org.opendaylight.yangtools.yang-data-impl:2.0.5] at org.opendaylight.controller.cluster.datastore.ShardDataTree.lambda$processNextPendingTransaction$0(ShardDataTree.java:741) ~[228:org.opendaylight.controller.sal-distributed-datastore:1.7.3.SNAPSHOT] ... 30 more |
| Comments |
| Comment by Michael Vorburger [ 31/Jul/18 ] |
|
https://github.com/opendaylight/serviceutils/blob/master/upgrade/src/main/java/org/opendaylight/serviceutils/upgrade/impl/UpgradeStateListener.java probably needs to use the RetryingManagedTransactionRunner? Moving issue from project genius to serviceutils ... |
| Comment by Michael Vorburger [ 31/Jul/18 ] |
|
actually this is that code that we (had to copy/paste) from genius to serviceutils, so this also needs to be done in https://github.com/opendaylight/genius/blob/master/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/UpgradeStateListener.java |
| Comment by Michael Vorburger [ 31/Jul/18 ] |
|
|
| Comment by Michael Vorburger [ 31/Jul/18 ] |
|
No but the message here is clearly from serviceutils (see the namespace, and note it's UpgradeConfig not Config like in genius), so let's address only that here; if there is a similar issue for genius (which we want to remove, in |
| Comment by Michael Vorburger [ 31/Jul/18 ] |
|
ideally org.opendaylight.serviceutils.upgrade.impl.UpgradeStateListener should just use org.opendaylight.genius.infra.RetryingManagedNewTransactionRunner ... but of course serviceutils can't use genius. So unless this is truly blocking (don't think so), let's just wait for If it's a bigger problem in the shorter term (before |
| Comment by Faseela K [ 31/Jul/18 ] |
|
vorburger : Have you made this already dependent on |