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

Having empty-containers make NormalizedNodeInputStreamReader go beserk

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Resolution: Cannot Reproduce
    • Beryllium
    • None
    • clustering
    • None
    • Operating System: Linux
      Platform: Other

    • 4590
    • High

    Description

      Version Used : Lithium Stable release. Planning to repeat this on Beryllium master – will update on the same.
      Cluster : Single-node - restart-with-persistent-data scenario

      Test Case (this case is very specific to Openflow inventory model, but this could be a generic issue)
      1. Create a group as following via RESTCONF in Config DS (please note that ‘Buckets’ is made intentionally empty)
      2. Shutdown controller gracefully or ungracefully
      3. Restart the controller
      4. Try to read the group from inventory nodes Config DS
      5. Read Operation would hang
      6. All shards become unrecoverable and reach notinitialized state. All journals to be wiped and controller to be restarted clean-slate

      Empty-bucket group addition case
      RESTCONF URL :
      http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1

      Operation : PUT

      Body :
      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <group xmlns="urn:opendaylight:flow:inventory">
      <group-type>group-indirect</group-type>
      <buckets>
      <!—EMPTY CONTAINER 
      </buckets>
      <barrier>false</barrier>
      <group-name>Foo1</group-name>
      <group-id>1</group-id>
      </group>

      Exception seen on the logs during RESTART (where NormalizedNodeInputStreamReader kicks-in)

      2015-11-05 04:10:44,317 | DEBUG | ult-dispatcher-7 | NormalizedNodeInputStreamReader | 218 - org.opendaylight.controller.sal-clustering-commons - 1.2.1.SNAPSHOT | Muthu: Reading map entry node MAP_ENTRY_NODE qName (urn:opendaylight:inventory?revision=2013-08-19)node keyValueMap

      {(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:1}

      2015-11-05 04:10:44,318 | ERROR | ult-dispatcher-7 | DataTreeCandidatePayload | 226 - org.opendaylight.controller.sal-distributed-datastore - 1.2.1.SNAPSHOT | Muthu : Exception in SUBTREE_MODIFIED case of parseCandidate ModifiedDataTreeCandidateNode {}
      com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Revision 'urn:opendaylight:inventory'is not in a supported format
      at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache.get(LocalCache.java:3937)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)[108:com.google.guava:18.0.0]
      at org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory.create(QNameFactory.java:36)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readQName(NormalizedNodeInputStreamReader.java:245)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readNormalizedNodeInternal(NormalizedNodeInputStreamReader.java:142)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.addDataContainerChildren(NormalizedNodeInputStreamReader.java:399)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readNodeIdentifierDependentNode(NormalizedNodeInputStreamReader.java:188)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readNormalizedNodeInternal(NormalizedNodeInputStreamReader.java:151)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.addDataContainerChildren(NormalizedNodeInputStreamReader.java:399)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readNodeIdentifierDependentNode(NormalizedNodeInputStreamReader.java:213)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readNormalizedNodeInternal(NormalizedNodeInputStreamReader.java:151)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader.readNormalizedNode(NormalizedNodeInputStreamReader.java:86)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.readNode(DataTreeCandidatePayload.java:156)[226:org.opendaylight.controller.sal-distributed-datastore:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.readChildren(DataTreeCandidatePayload.java:127)[226:org.opendaylight.controller.sal-distributed-datastore:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.parseCandidate(DataTreeCandidatePayload.java:175)[226:org.opendaylight.controller.sal-distributed-datastore:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.getCandidate(DataTreeCandidatePayload.java:203)[226:org.opendaylight.controller.sal-distributed-datastore:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.ShardRecoveryCoordinator.appendRecoveredLogEntry(ShardRecoveryCoordinator.java:70)[226:org.opendaylight.controller.sal-distributed-datastore:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.raft.RaftActorRecoverySupport.batchRecoveredLogEntry(RaftActorRecoverySupport.java:162)[219:org.opendaylight.controller.sal-akka-raft:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.raft.RaftActorRecoverySupport.onRecoveredApplyLogEntries(RaftActorRecoverySupport.java:141)[219:org.opendaylight.controller.sal-akka-raft:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.raft.RaftActorRecoverySupport.handleRecoveryMessage(RaftActorRecoverySupport.java:54)[219:org.opendaylight.controller.sal-akka-raft:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.raft.RaftActor.handleRecover(RaftActor.java:160)[219:org.opendaylight.controller.sal-akka-raft:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.common.actor.AbstractUntypedPersistentActor.onReceiveRecover(AbstractUntypedPersistentActor.java:48)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.Shard.onReceiveRecover(Shard.java:213)[226:org.opendaylight.controller.sal-distributed-datastore:1.2.1.SNAPSHOT]
      at akka.persistence.UntypedPersistentActor$$anonfun$receiveRecover$1.applyOrElse(Eventsourced.scala:433)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at scala.runtime.AbstractPartialFunction$mcVL$sp.apply$mcVL$sp(AbstractPartialFunction.scala:33)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:33)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:25)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at akka.persistence.Eventsourced$$anonfun$akka$persistence$Eventsourced$$recoveryBehavior$1.applyOrElse(Eventsourced.scala:168)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$class.runReceive(Recovery.scala:48)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.UntypedPersistentActor.runReceive(Eventsourced.scala:428)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$State$$anonfun$processPersistent$1.apply(Recovery.scala:33)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$State$$anonfun$processPersistent$1.apply(Recovery.scala:33)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$class.withCurrentPersistent(Recovery.scala:185)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.UntypedPersistentActor.withCurrentPersistent(Eventsourced.scala:428)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$State$class.processPersistent(Recovery.scala:33)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$$anon$1.processPersistent(Recovery.scala:104)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$$anon$1.aroundReceive(Recovery.scala:110)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Recovery$class.aroundReceive(Recovery.scala:265)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(Eventsourced.scala:428)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Eventsourced$$anon$1.aroundReceive(Eventsourced.scala:35)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.Eventsourced$class.aroundReceive(Eventsourced.scala:369)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.persistence.UntypedPersistentActor.aroundReceive(Eventsourced.scala:428)[216:com.typesafe.akka.persistence.experimental:2.3.10]
      at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[211:com.typesafe.akka.actor:2.3.10]
      at akka.actor.ActorCell.invoke(ActorCell.scala:487)[211:com.typesafe.akka.actor:2.3.10]
      at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)[211:com.typesafe.akka.actor:2.3.10]
      at akka.dispatch.Mailbox.run(Mailbox.scala:221)[211:com.typesafe.akka.actor:2.3.10]
      at akka.dispatch.Mailbox.exec(Mailbox.scala:231)[211:com.typesafe.akka.actor:2.3.10]
      at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[208:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
      Caused by: java.lang.IllegalArgumentException: Revision 'urn:opendaylight:inventory'is not in a supported format
      at org.opendaylight.yangtools.yang.common.QName.parseRevision(QName.java:351)[110:org.opendaylight.yangtools.yang-common:0.7.1.SNAPSHOT]
      at org.opendaylight.yangtools.yang.common.QName.create(QName.java:279)[110:org.opendaylight.yangtools.yang-common:0.7.1.SNAPSHOT]
      at org.opendaylight.yangtools.yang.common.QName.create(QName.java:127)[110:org.opendaylight.yangtools.yang-common:0.7.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory$1.load(QNameFactory.java:29)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory$1.load(QNameFactory.java:26)[218:org.opendaylight.controller.sal-clustering-commons:1.2.1.SNAPSHOT]
      at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)[108:com.google.guava:18.0.0]
      at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)[108:com.google.guava:18.0.0]
      ... 54 more
      Caused by: java.text.ParseException: Unparseable date: "urn:opendaylight:inventory"
      at java.text.DateFormat.parse(DateFormat.java:357)[:1.7.0_65]
      at org.opendaylight.yangtools.yang.common.QName.parseRevision(QName.java:349)[110:org.opendaylight.yangtools.yang-common:0.7.1.SNAPSHOT]
      ... 62 more
      2015-11-05 04:10:44,319 | ERROR | ult-dispatcher-7 | DataTreeCandidatePayload | 226 - org.opendaylight.controller.sal-distributed-datastore - 1.2.1.SNAPSHOT | Muthu: RotNode is NULL !!!

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            tpantelis Tom Pantelis
            shuva.jyoti.kar.87@gmail.com Shuva Jyoti Kar
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: