Uploaded image for project: 'netconf'
  1. netconf
  2. NETCONF-1278

Integration Test Failure with DOMDataTreeWriteTransaction#put

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Medium Medium
    • None
    • None
    • netconf-topology

      Running tests NetconfDeficeTopologyAdapterIntegrationTest class in different setups gives us inconsistent outcome
      e.g
      `mvn clean install -Dtest=NetconfDeficeTopologyAdapterIntegrationTest,NetconfDeviceTopologyAdapterTest test` or `mvn clean install` inside netconf-topology package ->

      [ERROR] Tests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.582 s <<< FAILURE! -- in org.opendaylight.netconf.topology.spi.NetconfDeficeTopologyAdapterIntegrationTest
      [ERROR] org.opendaylight.netconf.topology.spi.NetconfDeficeTopologyAdapterIntegrationTest.testDeviceAugmentedNodePresence -- Time elapsed: 0.616 s <<< ERROR!
      java.util.concurrent.ExecutionException: 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.tree.api.ConflictingModificationAppliedException: Node was created by other transaction.]]}
              at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:592)
              at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:467)
              at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:119)
              at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:75)
              at com.google.common.util.concurrent.ForwardingFluentFuture.get(ForwardingFluentFuture.java:75)
              at org.opendaylight.netconf.topology.spi.NetconfDeficeTopologyAdapterIntegrationTest.testDeviceAugmentedNodePresence(NetconfDeficeTopologyAdapterIntegrationTest.java:160)
              at java.base/java.lang.reflect.Method.invoke(Method.java:568)
              at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
              at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
      Caused by: 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.tree.api.ConflictingModificationAppliedException: Node was created by other transaction.]]}
              at org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMStoreThreePhaseCommitCohort.canCommit(InMemoryDOMStoreThreePhaseCommitCohort.java:75)
              at org.opendaylight.mdsal.dom.broker.CommitCoordinationTask.canCommitBlocking(CommitCoordinationTask.java:101)
              at org.opendaylight.mdsal.dom.broker.CommitCoordinationTask.call(CommitCoordinationTask.java:71)
              at org.opendaylight.mdsal.dom.broker.CommitCoordinationTask$WithTracker.call(CommitCoordinationTask.java:43)
              at org.opendaylight.mdsal.dom.broker.CommitCoordinationTask$WithTracker.call(CommitCoordinationTask.java:29)
              at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)
              at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:76)
              at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
              at java.base/java.lang.Thread.run(Thread.java:840)
      Caused by: org.opendaylight.yangtools.yang.data.tree.api.ConflictingModificationAppliedException: Node was created by other transaction.
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkConflicting(SchemaAwareApplyOperation.java:77)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkWriteApplicable(SchemaAwareApplyOperation.java:180)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:110)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:409)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:368)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:109)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:409)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:368)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:109)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:409)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:368)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:109)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:409)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:368)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:109)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:409)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:368)
              at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:109)
              at org.opendaylight.yangtools.yang.data.tree.impl.AbstractDataTreeTip.validate(AbstractDataTreeTip.java:31)
              at org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore.validate(InMemoryDOMDataStore.java:180)
              at org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMStoreThreePhaseCommitCohort.canCommit(InMemoryDOMStoreThreePhaseCommitCohort.java:68)
              ... 10 more
      
      [INFO] 
      [INFO] Results:
      [INFO] 
      [ERROR] Errors: 
      [ERROR]   NetconfDeficeTopologyAdapterIntegrationTest.testDeviceAugmentedNodePresence:160 ยป Execution 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.tree.api.ConflictingModificationAppliedException: Node was created by other transaction.]]}
      [INFO] 
      
      

      Also, https://git.opendaylight.org/gerrit/c/netconf/+/110962 patch demonstrates that
      during the integration testing phase of the NetconfDeviceTopologyAdapter, a specific issue was identified with the DOMDataTreeWriteTransaction#put method.When executing tests in a predefined order using the @Order annotation,the put method unexpectedly throws an error. This issue does not occur with the merge operation, which executes successfully under the same conditions.

      Running a single test class gives a different result `mvn clean install -Dtest=NetconfDeficeTopologyAdapterIntegrationTest test`
      does not give such issues

            ivanhrasko Ivan Hrasko
            yaroslav.lastivka Yaroslav Lastivka
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: