Fix intermittent failure in testWriteTransactionWithSingleShard
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / utils / MockDataTreeChangeListener.java
index f5a61599df4e2a5a326b7870927b96d1b23b1c0e..4be431554118484f6760a0e78f72f0f82bfba86d 100644 (file)
@@ -27,8 +27,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
 
 public class MockDataTreeChangeListener implements DOMDataTreeChangeListener {
 
-    private final List<Collection<DataTreeCandidate>> changeList =
-            Lists.<Collection<DataTreeCandidate>>newArrayList();
+    private final List<DataTreeCandidate> changeList = Lists.newArrayList();
 
     private volatile CountDownLatch changeLatch;
     private int expChangeEventCount;
@@ -47,10 +46,12 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener {
 
     @Override
     public void onDataTreeChanged(@Nonnull final Collection<DataTreeCandidate> changes) {
-        synchronized (changeList) {
-            changeList.add(changes);
+        if (changeLatch.getCount() > 0) {
+            synchronized (changeList) {
+                changeList.addAll(changes);
+            }
+            changeLatch.countDown();
         }
-        changeLatch.countDown();
     }
 
     public void waitForChangeEvents() {
@@ -64,10 +65,8 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener {
     public void verifyNotifiedData(YangInstanceIdentifier... paths) {
         Set<YangInstanceIdentifier> pathSet = new HashSet<>(Arrays.asList(paths));
         synchronized (changeList) {
-            for (Collection<DataTreeCandidate> list : changeList) {
-                for (DataTreeCandidate c : list) {
-                    pathSet.remove(c.getRootPath());
-                }
+            for (DataTreeCandidate c : changeList) {
+                pathSet.remove(c.getRootPath());
             }
         }
 
@@ -86,11 +85,9 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener {
     public void verifyNoNotifiedData(YangInstanceIdentifier... paths) {
         Set<YangInstanceIdentifier> pathSet = new HashSet<>(Arrays.asList(paths));
         synchronized (changeList) {
-            for (Collection<DataTreeCandidate> list : changeList) {
-                for (DataTreeCandidate c : list) {
-                    assertFalse("Unexpected " + c.getRootPath() + " present in DataTreeCandidate",
-                            pathSet.contains(c.getRootPath()));
-                }
+            for (DataTreeCandidate c : changeList) {
+                assertFalse("Unexpected " + c.getRootPath() + " present in DataTreeCandidate",
+                        pathSet.contains(c.getRootPath()));
             }
         }
     }