X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDataChangeListenerSupport.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDataChangeListenerSupport.java;h=9b2beccdad99740cbcba027e4a893d8cf9555133;hp=26d8fa1b646af75e2775eea23a72d64ae75e28c8;hb=013a6679470bf692753f2e04ab4398c97fd9f5d0;hpb=08221ab20d1632f7c1995d5e1038411a89bc4d4a diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerSupport.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerSupport.java index 26d8fa1b64..9b2beccdad 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerSupport.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerSupport.java @@ -10,10 +10,15 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorRef; import akka.actor.ActorSelection; import com.google.common.base.Optional; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Collections; import java.util.Map.Entry; +import java.util.Set; import org.opendaylight.controller.cluster.datastore.messages.EnableNotification; import org.opendaylight.controller.cluster.datastore.messages.RegisterChangeListener; import org.opendaylight.controller.cluster.datastore.messages.RegisterChangeListenerReply; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener; import org.opendaylight.controller.md.sal.dom.store.impl.DataChangeListenerRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -26,14 +31,20 @@ final class DataChangeListenerSupport extends AbstractDataListenerSupport< DelayedDataChangeListenerRegistration, DataChangeListenerRegistration< AsyncDataChangeListener>>> { + private final Set listenerActors = Sets.newConcurrentHashSet(); + DataChangeListenerSupport(final Shard shard) { super(shard); } + Collection getListenerActors() { + return Collections.unmodifiableCollection(listenerActors); + } + @Override - Entry>>, - Optional> createDelegate(final RegisterChangeListener message) { - ActorSelection dataChangeListenerPath = selectActor(message.getDataChangeListenerPath()); + DataChangeListenerRegistration>> + createDelegate(final RegisterChangeListener message) { + final ActorSelection dataChangeListenerPath = selectActor(message.getDataChangeListenerPath()); // Notify the listener if notifications should be enabled or not // If this shard is the leader then it will enable notifications else @@ -57,7 +68,32 @@ final class DataChangeListenerSupport extends AbstractDataListenerSupport< getShard().getDataStore().notifyOfInitialData(regEntry.getKey(), regEntry.getValue()); - return regEntry; + listenerActors.add(dataChangeListenerPath); + final DataChangeListenerRegistration>> + delegate = regEntry.getKey(); + return new DataChangeListenerRegistration>>() { + @Override + public void close() { + listenerActors.remove(dataChangeListenerPath); + delegate.close(); + } + + @Override + public AsyncDataChangeListener> getInstance() { + return delegate.getInstance(); + } + + @Override + public YangInstanceIdentifier getPath() { + return delegate.getPath(); + } + + @Override + public DataChangeScope getScope() { + return delegate.getScope(); + } + }; } @Override