Correctly forward DOMDataTreeChangeListener.onInitialData() 69/96669/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 25 Jun 2021 12:13:25 +0000 (14:13 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 25 Jun 2021 12:13:25 +0000 (14:13 +0200)
When registering proxy listener, make sure we do not lose
onInitialData() events.

Change-Id: I2529d64d10f477ad52e90dec15d88c6228a47af0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java

index 385297809236e3e5c2392c205d1ebd8e7b9b4d34..70fef4197e3c4a8f4faa71e59753a57ef70708cc 100644 (file)
@@ -20,6 +20,7 @@ import com.google.common.base.Throwables;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import com.google.common.util.concurrent.Uninterruptibles;
+import java.util.Collection;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
@@ -44,6 +45,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.slf4j.Logger;
@@ -348,11 +350,20 @@ public abstract class AbstractDataStore implements DistributedDataStoreInterface
         LOG.debug("Registering tree listener: {} for tree: {} shard: {}, path inside shard: {}",
                 delegate,shardLookup, shardName, insideShard);
 
+        // wrap this in the ClusteredDOMDataTreeChangeLister interface
+        // since we always want clustered registration
         final DataTreeChangeListenerProxy<DOMDataTreeChangeListener> listenerRegistrationProxy =
-                new DataTreeChangeListenerProxy<>(actorUtils,
-                        // wrap this in the ClusteredDOMDataTreeChangeLister interface
-                        // since we always want clustered registration
-                        (ClusteredDOMDataTreeChangeListener) delegate::onDataTreeChanged, insideShard);
+                new DataTreeChangeListenerProxy<>(actorUtils, new ClusteredDOMDataTreeChangeListener() {
+                    @Override
+                    public void onDataTreeChanged(final Collection<DataTreeCandidate> changes) {
+                        delegate.onDataTreeChanged(changes);
+                    }
+
+                    @Override
+                    public void onInitialData() {
+                        delegate.onInitialData();
+                    }
+                }, insideShard);
         listenerRegistrationProxy.init(shardName);
 
         return (ListenerRegistration<L>) listenerRegistrationProxy;