[MDSAL-134] java.lang.IllegalStateException: Unsupported DOM Modification type UNMODIFIED Created: 08/Mar/16  Updated: 04/Aug/18  Resolved: 04/Aug/18

Status: Resolved
Project: mdsal
Component/s: Binding runtime
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Moiz Raja Assignee: Unassigned
Resolution: Cannot Reproduce 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: 5468

 Description   

I am seeing this exception happen in Lithium. This happens when I getModifiedChildren on a DataObjectModification and call getModificationType on one of the modified children. Why would this happen?

2016-03-05 00:15:12.844 GMT+00:00 [opendaylight-cluster-data-notification-dispatcher-54] ERROR o.o.c.c.d.DataTreeChangeListenerActor - Error notifying listener org.opendaylight.controller.md.sal.binding.impl.BindingClusteredDOMDataTreeChangeListenerAdapter@79048d7e
java.lang.IllegalStateException: Unsupported DOM Modification type UNMODIFIED
at org.opendaylight.controller.md.sal.binding.impl.LazyDataObjectModification.getModificationType(LazyDataObjectModification.java:150) [na:na]
at com.cisco.osc.application.MyListener.onDataTreeChanged(MyListener.java:106) [com.cisco.osc.application.my-provider:0.1.2.Lithium-SR2-00003-1000]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:41) [na:na]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:53) [org.opendaylight.controller.sal-distributed-datastore:1.2.2.Lithium-SR2-00003-865]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:37) [org.opendaylight.controller.sal-distributed-datastore:1.2.2.Lithium-SR2-00003-865]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:34) [org.opendaylight.controller.sal-clustering-commons:1.2.2.Lithium-SR2-00003-865]
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:167) [com.typesafe.akka.actor:2.3.10]
at akka.actor.Actor$class.aroundReceive(Actor.scala:467) [com.typesafe.akka.actor:2.3.10]
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:97) [com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) [com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.invoke(ActorCell.scala:487) [com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254) [com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.run(Mailbox.scala:221) [com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.exec(Mailbox.scala:231) [com.typesafe.akka.actor:2.3.10]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]



 Comments   
Comment by Tony Tkacik [ 08/Mar/16 ]

Effectivelly it means BindingDataTreeChangeListener received from clustering DataTreeCandidateNode with UNMODIFIED which means listener was triggered even if data were not modified.

Comment by Tom Pantelis [ 08/Mar/16 ]

I assume that can happen if a client wrote the same data?

Comment by Moiz Raja [ 08/Mar/16 ]

I think the bug is not in the generating of the notification but in the implementation of LazyDataObjectModification#getModifiedChildren(). It should not return a child which has the modificationType UNMODIFIED.

This is happening in my specific implementation when I listen at a top-level node and when I get a data tree change I navigate the modification tree to figure out whether a specific subtree change happened.

Comment by Robert Varga [ 08/Mar/16 ]

DTCL does not perform a comparison of the actual data, so an overwrite with the same data still shows up as WRITE.

Comment by Robert Varga [ 27/Oct/16 ]

Does this still happen with Boron/Carbon? Do we have a unit test?

Comment by Tom Pantelis [ 27/Oct/16 ]

I haven't seen this exception. It doesn't appear there's any test case available at this point.

Comment by Harinath Mallepally [ 01/Mar/17 ]

I am using BE SR3 and I see this exception
java.lang.IllegalStateException: Unsupported DOM Modification type UNMODIFIED

Comment by Srini Seetharaman [ 03/Apr/17 ]

It happens with Boron-SR2 too.

Comment by Robert Varga [ 30/Jan/18 ]

We will need at least some data on what the model/DS operation triggering this is, otherwise we can only guess as to what is going on.

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