[TOPOPROCES-92] Topoprocessing can't handle preexisting request on bundle restarts and requests without pre-loaded model support Created: 07/Feb/17  Updated: 19/Oct/17

Status: Confirmed
Project: topoprocessing
Component/s: General
Affects Version/s: unspecified
Fix Version/s: None

Type: Bug
Reporter: Martin Dindoffer Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


External issue ID: 7755

 Description   

When a bundle tree is restarted (e.g. due to a change from config do operational ds and vice versa) and there are topo processing requests present in the DS, the processing fails with NPEs because of missing model support. This applies to any startup with requests present, but a typical problem occurs when a NTmodel support is loaded, request listener picks up a NT-based request, but fails to process the inventory underlay topologies, whose model-supporting is just booting up.
We need to provide a mechanism to:
1. gracefully refuse a topology processing request, when required model support is missing
2. schedule retriggering of refused requests, when required model support gets loaded

2017-02-07 17:46:37,220 | WARN | n-dispatcher-550 | TopologyRequestHandler | 217 - org.opendaylight.topoprocessing.impl - 0.3.0.SNAPSHOT | Processing new request for topology change failed.
java.lang.NullPointerException
at org.opendaylight.topoprocessing.impl.request.TopologyRequestHandler.initFiltration(TopologyRequestHandler.java:369)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.topoprocessing.impl.request.TopologyRequestHandler.processNewRequest(TopologyRequestHandler.java:195)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.topoprocessing.impl.request.TopologyRequestListener.processCreatedData(TopologyRequestListener.java:136)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.topoprocessing.impl.request.TopologyRequestListener.onDataTreeChanged(TopologyRequestListener.java:100)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:54)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:35)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:28)[205:org.opendaylight.controller.sal-clustering-commons:1.5.0.SNAPSHOT]
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.Actor$class.aroundReceive(Actor.scala:496)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.ActorCell.invoke(ActorCell.scala:495)[178:com.typesafe.akka.actor:2.4.16]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)[178:com.typesafe.akka.actor:2.4.16]
at akka.dispatch.Mailbox.run(Mailbox.scala:224)[178:com.typesafe.akka.actor:2.4.16]
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)[178:com.typesafe.akka.actor:2.4.16]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
2017-02-07 17:46:37,222 | ERROR | n-dispatcher-550 | DataTreeChangeListenerActor | 205 - org.opendaylight.controller.sal-clustering-commons - 1.5.0.SNAPSHOT | Error notifying listener org.opendaylight.topoprocessing.nt.request.NTTopologyRequestListener@4f319383
java.lang.IllegalStateException: Processing new request for topology change failed.
at org.opendaylight.topoprocessing.impl.request.TopologyRequestHandler.processNewRequest(TopologyRequestHandler.java:217)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.topoprocessing.impl.request.TopologyRequestListener.processCreatedData(TopologyRequestListener.java:136)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.topoprocessing.impl.request.TopologyRequestListener.onDataTreeChanged(TopologyRequestListener.java:100)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:54)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:35)[211:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:28)[205:org.opendaylight.controller.sal-clustering-commons:1.5.0.SNAPSHOT]
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.Actor$class.aroundReceive(Actor.scala:496)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)[178:com.typesafe.akka.actor:2.4.16]
at akka.actor.ActorCell.invoke(ActorCell.scala:495)[178:com.typesafe.akka.actor:2.4.16]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)[178:com.typesafe.akka.actor:2.4.16]
at akka.dispatch.Mailbox.run(Mailbox.scala:224)[178:com.typesafe.akka.actor:2.4.16]
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)[178:com.typesafe.akka.actor:2.4.16]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[174:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
Caused by: java.lang.NullPointerException
at org.opendaylight.topoprocessing.impl.request.TopologyRequestHandler.initFiltration(TopologyRequestHandler.java:369)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
at org.opendaylight.topoprocessing.impl.request.TopologyRequestHandler.processNewRequest(TopologyRequestHandler.java:195)[217:org.opendaylight.topoprocessing.impl:0.3.0.SNAPSHOT]
... 17 more



 Comments   
Comment by Martin Dindoffer [ 08/Feb/17 ]

An even easier way to trigger this exception is to install:
odl-restconf-noauth odl-openflowplugin-nsf-model odl-topoprocessing-network-topology
and then create a topo processing request on an inventory (Openflow) topology. This fails, because although the are correct models present in the system, ther is no correct modelAdapter installed in topoprocessing.

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