X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDefaultShardDataTreeChangeListenerPublisher.java;h=e17e3faae94fbc864814423542b87ccbb6e8e333;hb=cfdfdee3a15d60a13dcee57d0679a517688d1126;hp=2757c2d231fdbafb799c04eaf1e31ea6db27c6dd;hpb=8232a626b43fdd2f5799da0fbcfb0f02d3c8f4fb;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java index 2757c2d231..e17e3faae9 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java @@ -11,7 +11,7 @@ import com.google.common.base.Optional; import java.util.Collection; import java.util.function.Consumer; import javax.annotation.concurrent.NotThreadSafe; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; +import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration; import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTreeChangePublisher; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -63,51 +63,35 @@ final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStore public void registerTreeChangeListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, Optional initialState, Consumer> onRegistration) { - LOG.debug("{}: registerTreeChangeListener: path: {}, listener: {}", logContext, treeId, listener); - - AbstractDOMDataTreeChangeListenerRegistration - registration = super.registerTreeChangeListener(treeId, new ForwardingDOMDataTreeChangeListener(listener)); - - onRegistration.accept( - new org.opendaylight.controller.md.sal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration< - DOMDataTreeChangeListener>(listener) { - @Override - protected void removeRegistration() { - registration.close(); - } - }); + registerTreeChangeListener(treeId, listener, onRegistration); if (initialState.isPresent()) { notifySingleListener(treeId, listener, initialState.get(), logContext); + } else { + listener.onInitialData(); } } + void registerTreeChangeListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, + Consumer> onRegistration) { + LOG.debug("{}: registerTreeChangeListener: path: {}, listener: {}", logContext, treeId, listener); + + AbstractDOMDataTreeChangeListenerRegistration registration = + super.registerTreeChangeListener(treeId, listener); + + onRegistration.accept(registration); + } + static void notifySingleListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, DataTreeCandidate state, String logContext) { LOG.debug("{}: notifySingleListener: path: {}, listener: {}", logContext, treeId, listener); DefaultShardDataTreeChangeListenerPublisher publisher = new DefaultShardDataTreeChangeListenerPublisher(logContext); publisher.logContext = logContext; - publisher.registerTreeChangeListener(treeId, listener, Optional.absent(), noop -> { /* NOOP */ }); - publisher.publishChanges(state); - } - - private static class ForwardingDOMDataTreeChangeListener - implements org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener { - final DOMDataTreeChangeListener delegate; - - ForwardingDOMDataTreeChangeListener(DOMDataTreeChangeListener delegate) { - this.delegate = delegate; - } - - @Override - public void onDataTreeChanged(Collection changes) { - delegate.onDataTreeChanged(changes); - } + publisher.registerTreeChangeListener(treeId, listener); - @Override - public String toString() { - return delegate.toString(); + if (!publisher.processCandidateTree(state)) { + listener.onInitialData(); } } }