Uploaded image for project: 'controller'
  1. controller
  2. CONTROLLER-1812

DOMForwardedWriteTransaction infinite loop on cancel after exception

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Medium
    • Resolution: Done
    • Oxygen
    • Oxygen
    • mdsal
    • None

    Description

      If you cancel DOMForwardedWriteTransaction after an exception thrown by the backed transaction ready or submit methods, you run into an infinite loop.

      This was encountered on an instance where the backed transaction threw an IllegalArgumentException on ready due to mandatory data missing:

      java.lang.IllegalArgumentException: Node (urn:cisco:params:xml:ns:yang:sfc-rsp?revision=2014-07-01)rendered-service-path[{(urn:cisco:params:xml:ns:yang:sfc-rsp?revision=2014-07-01)name=RSP1}] is missing mandatory descendant /(urn:cisco:params:xml:ns:yang:sfc-rsp?revision=2014-07-01)reverse-path
       at com.google.common.base.Preconditions.checkArgument(Preconditions.java:434)
       at org.opendaylight.yangtools.yang.data.impl.schema.tree.MandatoryLeafEnforcer$Strict.enforceOnData(MandatoryLeafEnforcer.java:44)
       at org.opendaylight.yangtools.yang.data.impl.schema.tree.ListEntryModificationStrategy.verifyStructure(ListEntryModificationStrategy.java:34)
       at org.opendaylight.yangtools.yang.data.impl.schema.tree.ModifiedNode.seal(ModifiedNode.java:283)
       at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractReadyIterator.process(AbstractReadyIterator.java:47)
       at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.ready(InMemoryDataTreeModification.java:285)
       at org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction.ready(SnapshotBackedWriteTransaction.java:141)
       at org.opendaylight.controller.md.sal.dom.broker.impl.DOMForwardedWriteTransaction.submit(DOMForwardedWriteTransaction.java:148)
       at org.opendaylight.controller.md.sal.binding.impl.AbstractWriteTransaction.doSubmit(AbstractWriteTransaction.java:134)
       at org.opendaylight.controller.md.sal.binding.impl.BindingDOMWriteTransactionAdapter.submit(BindingDOMWriteTransactionAdapter.java:81)
       at org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl.callWithNewWriteOnlyTransactionAndSubmit(ManagedNewTransactionRunnerImpl.java:46)
       at org.opendaylight.genius.infra.RetryingManagedNewTransactionRunnerImpl.callWithNewWriteOnlyTransactionAndSubmit(RetryingManagedNewTransactionRunnerImpl.java:64)
       at org.opendaylight.genius.infra.RetryingManagedNewTransactionRunnerImpl.callWithNewWriteOnlyTransactionAndSubmit(RetryingManagedNewTransactionRunnerImpl.java:57)
       at org.opendaylight.genius.infra.RetryingManagedNewTransactionRunner.callWithNewWriteOnlyTransactionAndSubmit(RetryingManagedNewTransactionRunner.java:41)
       at org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker.syncWrite(SingleTransactionDataBroker.java:194)
       at org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker.syncWrite(SingleTransactionDataBroker.java:186)
       at org.opendaylight.genius.mdsalutil.MDSALUtil.syncWrite(MDSALUtil.java:581)
       at org.opendaylight.netvirt.sfc.classifier.providers.SfcProviderTest.storeRsp(SfcProviderTest.java:172)
       at org.opendaylight.netvirt.sfc.classifier.providers.SfcProviderTest.getRenderedServicePath(SfcProviderTest.java:64)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498)
       at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
       at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
       at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
       at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
       at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
       at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
       at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
       at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
       at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
       at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
       at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
       at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

      Attachments

        Issue Links

          # Subject Branch Project Status CR V

          Activity

            People

              jaicaa Jaime Caamaño Ruiz
              jaicaa Jaime Caamaño Ruiz
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: