[OPNFLWPLUG-933] IllegalStateException: Attempted to close chain with outstanding transaction PingPongTransaction at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.createTxChain Created: 23/Aug/17  Updated: 27/Sep/21  Resolved: 22/Sep/17

Status: Resolved
Project: OpenFlowPlugin
Component/s: General
Affects Version/s: None
Fix Version/s: None

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

Operating System: All
Platform: All


Issue Links:
Blocks
blocks CONTROLLER-1756 OOM due to huge Map in ShardDataTree Resolved
blocks OPNFLWPLUG-934 ReadOnlyTransaction created in FlowCa... Resolved
blocks NETVIRT-883 Umbrella parent issue for grouping al... Resolved
is blocked by OPNFLWPLUG-940 Suspected (not sure) TransactionChain... Resolved
Duplicate
is duplicated by OPNFLWPLUG-935 TransactionChain created in Operation... Resolved
is duplicated by OPNFLWPLUG-940 Suspected (not sure) TransactionChain... Resolved
External issue ID: 9038
Priority: Highest

 Description   

In CONTROLLER-1756 we're running into this from openflowplugin:

2017-08-22 17:00:50,640 | ERROR | CommitFutures-2 | ExecutionList | 65 - com.google.guava - 18.0.0 | RuntimeException while executing runnable com.google.common.util.concurrent.Futures$6@7d061282 with executor INSTANCE
java.lang.IllegalStateException: Attempted to close chain with outstanding transaction PingPongTransaction

{delegate=org.opendaylight.controller.cluster.databroker.DOMBrokerReadWriteTransaction@1947c741}

at com.google.common.base.Preconditions.checkState(Preconditions.java:197)[65:com.google.guava:18.0.0]
at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain.close(PingPongTransactionChain.java:373)[171:org.opendaylight.controller.sal-broker-impl:1.5.2.Carbon]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMTransactionChainAdapter.close(BindingDOMTransactionChainAdapter.java:115)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.2.Carbon]
at java.util.Optional.ifPresent(Optional.java:159)[:1.8.0_141]
at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.createTxChain(TransactionChainManager.java:84)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.onTransactionChainFailed(TransactionChainManager.java:242)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMTransactionChainAdapter.failTransactionChain(BindingDOMTransactionChainAdapter.java:110)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.2.Carbon]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMTransactionChainAdapter.access$200(BindingDOMTransactionChainAdapter.java:31)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.2.Carbon]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMTransactionChainAdapter$3.onFailure(BindingDOMTransactionChainAdapter.java:91)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.2.Carbon]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1310)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:68)[65:com.google.guava:18.0.0]
at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransaction.onFailure(PingPongTransaction.java:65)[171:org.opendaylight.controller.sal-broker-impl:1.5.2.Carbon]
at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain.transactionFailed(PingPongTransactionChain.java:293)[171:org.opendaylight.controller.sal-broker-impl:1.5.2.Carbon]
at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain$2.onFailure(PingPongTransactionChain.java:243)[171:org.opendaylight.controller.sal-broker-impl:1.5.2.Carbon]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1310)[65:com.google.guava:18.0.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)[:1.8.0_141]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)[:1.8.0_141]
at java.lang.Thread.run(Thread.java:748)[:1.8.0_141]

at least in some cases I see it being immediately followed in the log by this, I'm not sure how directly relevant this is:

2017-08-22 17:00:50,641 | ERROR | CommitFutures-2 | TransactionChainManager | 307 - org.opendaylight.openflowplugin.impl - 0.4.2.Carbon | Transaction commit failed.
OptimisticLockFailedException

{message=Optimistic lock failed., errorList=[RpcError [message=Optimistic lock failed., severity=ERROR, errorType=APPLICATION, tag=resource-denied, applicationTag=null, info=null, cause=org.opendaylight.yangtools.yang.data.api.schema .tree.ConflictingModificationAppliedException: Node children was modified by other transaction]]}

at org.opendaylight.controller.cluster.datastore.ShardDataTree.lambda$processNextPendingTransaction$0(ShardDataTree.java:751)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextPending(ShardDataTree.java:789)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextPendingTransaction(ShardDataTree.java:736)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.ShardDataTree.startCanCommit(ShardDataTree.java:819)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.canCommit(SimpleShardDataTreeCohort.java:90)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.CohortEntry.canCommit(CohortEntry.java:97)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleCanCommit(ShardCommitCoordinator.java:236)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleReadyLocalTransaction(ShardCommitCoordinator.java:200)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.Shard.handleReadyLocalTransaction(Shard.java:675)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.datastore.Shard.handleNonRaftCommand(Shard.java:316)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
at org.opendaylight.controller.cluster.raft.RaftActor.handleCommand(RaftActor.java:270)[205:org.opendaylight.controller.sal-akka-raft:1.5.2.Carbon]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedPersistentActor.onReceiveCommand(AbstractUntypedPersistentActor.java:31)[204:org.opendaylight.controller.sal-clustering-commons:1.5.2.Carbon]
at akka.persistence.UntypedPersistentActor.onReceive(PersistentActor.scala:170)[192:com.typesafe.akka.persistence:2.4.18]
at org.opendaylight.controller.cluster.common.actor.MeteringBehavior.apply(MeteringBehavior.java:104)[204:org.opendaylight.controller.sal-clustering-commons:1.5.2.Carbon]
at akka.actor.ActorCell$$anonfun$become$1.applyOrElse(ActorCell.scala:544)[185:com.typesafe.akka.actor:2.4.18]
at akka.actor.Actor$class.aroundReceive(Actor.scala:502)[185:com.typesafe.akka.actor:2.4.18]
at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(PersistentActor.scala:168)[192:com.typesafe.akka.persistence:2.4.18]
at akka.persistence.Eventsourced$$anon$1.stateReceive(Eventsourced.scala:727)[192:com.typesafe.akka.persistence:2.4.18]
at akka.persistence.Eventsourced$class.aroundReceive(Eventsourced.scala:183)[192:com.typesafe.akka.persistence:2.4.18]
at akka.persistence.UntypedPersistentActor.aroundReceive(PersistentActor.scala:168)[192:com.typesafe.akka.persistence:2.4.18]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)[185:com.typesafe.akka.actor:2.4.18]
at akka.actor.ActorCell.invoke(ActorCell.scala:495)[185:com.typesafe.akka.actor:2.4.18]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)[185:com.typesafe.akka.actor:2.4.18]
at akka.dispatch.Mailbox.run(Mailbox.scala:224)[185:com.typesafe.akka.actor:2.4.18]
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)[185:com.typesafe.akka.actor:2.4.18]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[181:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[181:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[181:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[181:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
Caused by: org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException: Node children was modified by other transaction
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkConflicting(SchemaAwareApplyOperation.java:78)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkNotConflicting(SchemaAwareApplyOperation.java:108)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkWriteApplicable(SchemaAwareApplyOperation.java:170)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:128)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkMergeApplicable(AbstractNodeContainerModificationStrategy.java:313)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:131)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:288)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:125)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:288)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:125)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:288)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:125)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:288)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:125)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.StructuralContainerModificationStrategy.checkApplicable(StructuralContainerModificationStrategy.java:99)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:288)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:125)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.RootModificationApplyOperation.checkApplicable(RootModificationApplyOperation.java:72)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractDataTreeTip.validate(AbstractDataTreeTip.java:35)[108:org.opendaylight.yangtools.yang-data-impl:1.1.2.Carbon]
at org.opendaylight.controller.cluster.datastore.ShardDataTree.lambda$processNextPendingTransaction$0(ShardDataTree.java:743)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.2.Carbon]
... 28 more



 Comments   
Comment by Michael Vorburger [ 23/Aug/17 ]

I'm also seeing some this in the same log, at the end, when things have gone haywire:

java.util.concurrent.TimeoutException: Timeout waiting for task.
at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:269)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)[65:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.submitWriteTransaction(TransactionChainManager.java:175)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.initialSubmitWriteTransaction(TransactionChainManager.java:89)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.device.DeviceContextImpl.initialSubmitTransaction(DeviceContextImpl.java:224)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl$4.onSuccess(StatisticsContextImpl.java:362)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl$4.onSuccess(StatisticsContextImpl.java:354)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.run(Futures.java:918)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.run(Futures.java:918)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.run(Futures.java:918)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$ImmediateFuture.addListener(Futures.java:106)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:914)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[65:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[65:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.rpc.AbstractRequestContext.setResult(AbstractRequestContext.java:32)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.device.listener.MultiMsgCollectorImpl.endCollecting(MultiMsgCollectorImpl.java:70)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.device.listener.MultiMsgCollectorImpl.addMultipartMsg(MultiMsgCollectorImpl.java:58)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestCallback.onSuccess(AbstractMultipartRequestCallback.java:54)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestCallback.onSuccess(AbstractMultipartRequestCallback.java:22)[307:org.opendaylight.openflowplugin.impl:0.4.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.OutboundQueueEntry.complete(OutboundQueueEntry.java:121)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.StackedSegment.completeEntry(StackedSegment.java:113)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.StackedSegment.pairRequest(StackedSegment.java:153)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractStackedOutboundQueue.pairRequest(AbstractStackedOutboundQueue.java:203)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.onMessage(AbstractOutboundQueueManager.java:208)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consumeDeviceMessage(ConnectionAdapterImpl.java:143)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractConnectionAdapterStatistics.consume(AbstractConnectionAdapterStatistics.java:66)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(ConnectionAdapterImpl.java:44)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(DelegatingInboundHandler.java:43)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)[146:io.netty.transport:4.1.8.Final]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.channelRead(AbstractOutboundQueueManager.java:195)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)[148:io.netty.codec:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[148:io.netty.codec:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[148:io.netty.codec:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[148:io.netty.codec:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[148:io.netty.codec:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287)[150:io.netty.handler:4.1.8.Final]
at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)[296:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.2.Carbon]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:1018)[151:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:394)[151:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:288)[151:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)[145:io.netty.common:4.1.8.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)[145:io.netty.common:4.1.8.Final]
at java.lang.Thread.run(Thread.java:748)[:1.8.0_141]

Comment by A H [ 23/Aug/17 ]

To better assess the impact of this bug and fix, could someone from your team please help us identify the following:
Regression: Is this bug a regression of functionality/performance/feature compared to Carbon?
Severity: Could you elaborate on the severity of this bug? Is this a BLOCKER such that we cannot release Carbon SR2 without it?
Workaround: Is there a workaround such that we can write a release note instead?
Testing: Could you also elaborate on the testing of this patch? How extensively has this patch been tested? Is it covered by any unit tests or system tests?
Impact: Does this fix impact any dependent projects?

Comment by Michael Vorburger [ 24/Aug/17 ]

> Regression: Is this bug a regression of functionality/performance/feature compared to Carbon?

Dunno.

> Severity: Could you elaborate on the severity of this bug? Is this a BLOCKER such that we cannot release Carbon SR2 without it?

If the current working assumption that this is the root cause of CONTROLLER-1756 is correct, then yes this is a Blocker, as without this fixed, ODL is not usable at scale.

Currently waiting on feedback to https://lists.opendaylight.org/pipermail/mdsal-dev/2017-August/001317.html to determine if this indeed is the root cause of CONTROLLER-1756.

> Workaround: Is there a workaround such that we can write a release note instead?

Nope, not that I know of.

> Testing: Could you also elaborate on the testing of this patch? How extensively has this patch been tested? Is it covered by any unit tests or system tests?

AFAIK, only reproducible during real scale testing using e.g. OpenStack's rally benchmarking tool.

Will be re-tested internally after a fix is available and merged to stable branch.

> Impact: Does this fix impact any dependent projects?

There is no fix yet, and I'm not sure that this means.

Comment by Miroslav Macko [ 28/Aug/17 ]

Stable/carbon: https://git.opendaylight.org/gerrit/#/c/62358/

Comment by Miroslav Macko [ 28/Aug/17 ]

We have prepared the patch https://git.opendaylight.org/gerrit/#/c/62358/ that should fix the IllegalStateException.
If it is possible, please test if it helps.

But it is possible, that it is not the root cause of the issue. We have discussed it in community meeting. Maybe there can be some synchronization issue. We will try to find out, if there is the problem.

Thank you,
Miro

Comment by Michael Vorburger [ 28/Aug/17 ]

> the patch https://git.opendaylight.org/gerrit/#/c/62358/ that should
> fix the IllegalStateException. If it is possible, please test if it helps.

It would be slightly easier for us, just internal process wise, to test if this fixes both the ERROR log message seen above as well as the original CONTROLLER-1756 if c/62358 were merged into stable/carbon branch - would this be possible? It seems harmless enough, so I doubt that change could cause new issues - at best it fixes this problem, at worst it closes a Tx which should any be canceled also, but may not be the root cause of this problem...

PS, FYI: Over in CONTROLLER-1760 (and on ongoing https://git.opendaylight.org/gerrit/#/q/topic:bug/9060) I'm working on something which in the future will let us see EXACTLY where such transaction were not closed - that will be handy.

Comment by Tomas Slusny [ 31/Aug/17 ]

Michael, as patch by Miroslav was merged on Carbon some time ago, did you had any chance to test it?

Comment by Michael Vorburger [ 31/Aug/17 ]

> did you had any chance to test it?

+ Sai & Sridhar - I believe you're planning to redo a QA round with a new RPM including this in the coming days?

Comment by Sridhar Gaddam [ 31/Aug/17 ]

(In reply to Michael Vorburger from comment #8)
> > did you had any chance to test it?
>
> + Sai & Sridhar - I believe you're planning to redo a QA round with a new
> RPM including this in the coming days?

Yes @Michael, its on the plan. We shall update the BZ once we have some results. Thanks for looking into the issue.

Comment by Michael Vorburger [ 04/Sep/17 ]

Jozef, Tomas - perhaps new OPNFLWPLUG-940 is of interest in the context of this one?

Comment by Michael Vorburger [ 06/Sep/17 ]

https://git.opendaylight.org/gerrit/#/c/62674/ is supposed to fix this - TBC.

Raising Importance from Critical to Blocker to align with CONTROLLER-1756.

Dupe'd OPNFLWPLUG-935 and OPNFLWPLUG-940 to this one, to avoid general confusion.

Comment by Michael Vorburger [ 07/Sep/17 ]

https://git.opendaylight.org/gerrit/#/c/62674/ does not seem to fix this.

Comment by Kit Lou [ 08/Sep/17 ]

What is the next step on this problem? More investigation for a proper fix? Thanks!

Comment by Michael Vorburger [ 11/Sep/17 ]

> What is the next step on this problem? More investigation for a proper fix? Thanks!

Jozef Bacigál on https://lists.opendaylight.org/pipermail/openflowplugin-dev/2017-September/007628.html dixit "I do investigations further for the Illegal state bug.". Judging solely based on the discussion ongoing on https://git.opendaylight.org/gerrit/#/c/62674/ that appears to be ongoing (thanks a lot Jozef).

Comment by Jozef Bacigal [ 12/Sep/17 ]

Michael can you please retest it with the latest's changes and if it is still an issue send me the logs ?

Thanks

Jozef

Comment by Michael Vorburger [ 13/Sep/17 ]

> Michael can you please retest it with the latest's changes

It's unfortunately a little more complicated, not actually just me doing a quick test but internal procedure together with colleagues.. I've just sent direct private email asking for a re-test, and Cc'd you on it.

Comment by Sridhar Gaddam [ 15/Sep/17 ]

Ok, with the custom rpm [#] that @Daniel provided us that includes patchset#6 of [*], we deployed a clustered ODL setup with 3 Controllers and 3 Computes.
In this setup, we triggered browbeat/rally with concurrencies of 8, 16, 32 and times set to 500.

After the tests completed, following are the observations.

The current bug (i.e., 9038) talks about three exceptions. The first one out of it (i.e., "ExecutionList | 65 - com.google.guava - 18.0.0 | RuntimeException while executing runnable"), is NO LONGER SEEN in the logs.

However, the other two exceptions are still seen
https://gist.github.com/sridhargaddam/e0aa8c968a31d1bc0b1118c278f53b12
https://gist.github.com/sridhargaddam/85e407c33f8cfc9fbe44b2fceb10f463

[#] opendaylight-6.2.0-0.1.20170913snap58.el7.noarch
[*] https://git.opendaylight.org/gerrit/#/c/62674/

Comment by Kit Lou [ 15/Sep/17 ]

Michael & Team, What are the next steps here? Thanks!

Comment by Sridhar Gaddam [ 18/Sep/17 ]

(In reply to Kit Lou from comment #20)
> Michael & Team, What are the next steps here? Thanks!

The patch [*] fixes the main exception that is mentioned in this Bug, so we can go ahead and merge the patch and close this bug as fixed.

For the other two exceptions [#] mentioned in this bug report, if required I can open two separate bugs - but sadly we no longer have the necessary setup to reproduce the issue to share any further logs (if requested).

[*] https://git.opendaylight.org/gerrit/#/c/62674/
[#] https://gist.github.com/sridhargaddam/e0aa8c968a31d1bc0b1118c278f53b12
https://gist.github.com/sridhargaddam/85e407c33f8cfc9fbe44b2fceb10f463

Comment by Kit Lou [ 18/Sep/17 ]

The patch https://git.opendaylight.org/gerrit/#/c/62674/ is for the stable/carbon branch. Has the patch been cherry picked into the stable/nitrogen branch? Please provide the patch number for nitrogen (if needed). Thanks!

Comment by Luis Gomez [ 18/Sep/17 ]

Nitrogen patch: https://git.opendaylight.org/gerrit/#/c/63236

Comment by Michael Vorburger [ 19/Sep/17 ]

Re-opening as we obviously need this on master as well...

... or is there the equivalent already? It's not visible easily in Gerrit at least.

I did try to just cherry-pick via Gerrit UI 1 click but it's non trivial - probably best if someone familiar with the code could do this?

Comment by Sridhar Gaddam [ 19/Sep/17 ]

(In reply to Sridhar Gaddam from comment #21)
> (In reply to Kit Lou from comment #20)
> > Michael & Team, What are the next steps here? Thanks!
>
> The patch [*] fixes the main exception that is mentioned in this Bug, so we
> can go ahead and merge the patch and close this bug as fixed.
>
> For the other two exceptions [#] mentioned in this bug report, if required I
> can open two separate bugs - but sadly we no longer have the necessary setup
> to reproduce the issue to share any further logs (if requested).
>
>
> [*] https://git.opendaylight.org/gerrit/#/c/62674/
> [#] https://gist.github.com/sridhargaddam/e0aa8c968a31d1bc0b1118c278f53b12
> https://gist.github.com/sridhargaddam/85e407c33f8cfc9fbe44b2fceb10f463

Just for record, opened the following bugs for the two exceptions.
https://bugs.opendaylight.org/show_bug.cgi?id=9184
https://bugs.opendaylight.org/show_bug.cgi?id=9185

Comment by Tomas Slusny [ 21/Sep/17 ]

I created cherry-pick for master here: https://git.opendaylight.org/gerrit/#/c/63402/

Comment by Tomas Slusny [ 22/Sep/17 ]

Cherry-pick on master was merged, closing this issue.

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