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=05accddb7885625a89d93d4bc8936bf763c267b1;hp=c7b55414e6d8b8146cf8f00812860716baebf158;hb=d9ea4400df226eb65c964ab0cb2aa81ee495ba15;hpb=026eb3793faa8a3f072dcdc6a3746828d63e5f8b 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 c7b55414e6..05accddb78 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 @@ -9,22 +9,25 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorRef; import akka.actor.ActorSelection; +import com.google.common.base.Optional; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; 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.AsyncDataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener; -import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent; +import org.opendaylight.controller.md.sal.dom.store.impl.DataChangeListenerRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>, DOMImmutableDataChangeEvent> { +final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>, + Optional> { private static final Logger LOG = LoggerFactory.getLogger(DataChangeListenerSupport.class); private final List delayedListenerRegistrations = new ArrayList<>(); private final List dataChangeListeners = new ArrayList<>(); @@ -60,12 +63,10 @@ final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>, DOMImmutableDataChangeEvent> res = - createDelegate(reg.getRegisterChangeListener()); + final Entry>>, + Optional> res = createDelegate(reg.getRegisterChangeListener()); reg.setDelegate(res.getKey()); - if (res.getValue() != null) { - reg.getInstance().onDataChanged(res.getValue()); - } + getShard().getDataStore().notifyOfInitialData(res.getKey(), res.getValue()); } } @@ -77,12 +78,12 @@ final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>> registration; - final AsyncDataChangeEvent> event; if ((hasLeader && message.isRegisterOnAllInstances()) || isLeader) { - final Entry>>, DOMImmutableDataChangeEvent> res = - createDelegate(message); + final Entry>>, + Optional> res = createDelegate(message); registration = res.getKey(); - event = res.getValue(); + + getShard().getDataStore().notifyOfInitialData(res.getKey(), res.getValue()); } else { LOG.debug("{}: Shard is not the leader - delaying registration", persistenceId()); @@ -93,23 +94,19 @@ final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>, DOMImmutableDataChangeEvent> createDelegate( - final RegisterChangeListener message) { + Entry>>, + Optional> createDelegate(final RegisterChangeListener message) { ActorSelection dataChangeListenerPath = selectActor(message.getDataChangeListenerPath()); // Notify the listener if notifications should be enabled or not