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=e6f63d7154ba6d5f301ed7fd4b77f111d0ea8034;hp=939ddf8fad842ac947b427f28a09ee3810f8de42;hb=56c1339ee7dbd85bc567fc44f21ecfd322c9e803;hpb=81d25b3c5f4a040b5f11475752a26712b46f5c0b 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 939ddf8fad..e6f63d7154 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 @@ -7,21 +7,24 @@ */ package org.opendaylight.controller.cluster.datastore; -import java.util.ArrayList; -import java.util.List; import akka.actor.ActorRef; import akka.actor.ActorSelection; +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.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>> { +final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>, DOMImmutableDataChangeEvent> { private static final Logger LOG = LoggerFactory.getLogger(DataChangeListenerSupport.class); private final List delayedListenerRegistrations = new ArrayList<>(); private final List dataChangeListeners = new ArrayList<>(); @@ -39,7 +42,12 @@ final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>>, DOMImmutableDataChangeEvent> res = + createDelegate(reg.getRegisterChangeListener()); + reg.setDelegate(res.getKey()); + if (res.getValue() != null) { + reg.getInstance().onDataChanged(res.getValue()); + } } } @@ -52,16 +60,21 @@ final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>> registration; + final AsyncDataChangeEvent> event; if (isLeader) { - registration = createDelegate(message); + final Entry>>, DOMImmutableDataChangeEvent> res = + createDelegate(message); + registration = res.getKey(); + event = res.getValue(); } else { LOG.debug("{}: Shard is not the leader - delaying registration", persistenceId()); DelayedListenerRegistration delayedReg = new DelayedListenerRegistration(message); delayedListenerRegistrations.add(delayedReg); registration = delayedReg; + event = null; } ActorRef listenerRegistration = createActor(DataChangeListenerRegistration.props(registration)); @@ -70,10 +83,13 @@ final class DataChangeListenerSupport extends LeaderLocalDelegateFactory>> createDelegate( + Entry>>, DOMImmutableDataChangeEvent> createDelegate( final RegisterChangeListener message) { ActorSelection dataChangeListenerPath = selectActor(message.getDataChangeListenerPath());