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%2FDefaultShardDataTreeChangeListenerPublisher.java;h=1b8ed12feda00d079d04e8f8b06f25eb1b319b98;hp=895ce30e8ba10ebd16f3bffddac94e706fd8d01c;hb=HEAD;hpb=4d15b2022b97238fa9da4df4239f88c619b2e264 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 895ce30e8b..d7d90474f3 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 @@ -7,102 +7,84 @@ */ package org.opendaylight.controller.cluster.datastore; -import com.google.common.base.Optional; -import java.util.Collection; +import java.util.List; +import java.util.Optional; import java.util.function.Consumer; -import javax.annotation.concurrent.NotThreadSafe; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration; +import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTreeChangePublisher; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Default implementation of ShardDataTreeChangeListenerPublisher that directly generates and publishes - * notifications for DataTreeChangeListeners. + * notifications for DataTreeChangeListeners. This class is NOT thread-safe. * * @author Thomas Pantelis */ -@NotThreadSafe final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStoreTreeChangePublisher implements ShardDataTreeChangeListenerPublisher { private static final Logger LOG = LoggerFactory.getLogger(DefaultShardDataTreeChangeListenerPublisher.class); private String logContext; - DefaultShardDataTreeChangeListenerPublisher(String logContext) { + DefaultShardDataTreeChangeListenerPublisher(final String logContext) { this.logContext = logContext; } @Override public void publishChanges(final DataTreeCandidate candidate) { - LOG.debug("{}: publishChanges: {}", logContext, candidate); + if (LOG.isTraceEnabled()) { + LOG.trace("{}: publishChanges: {}", logContext, candidate); + } else { + LOG.debug("{}: publishChanges: rootPath: {}", logContext, candidate.getRootPath()); + } + processCandidateTree(candidate); } @Override - protected void notifyListener(AbstractDOMDataTreeChangeListenerRegistration registration, - Collection changes) { - LOG.debug("{}: notifyListener: listener: {}", logContext, registration.getInstance()); - registration.getInstance().onDataTreeChanged(changes); + protected void notifyListener(final Reg registration, final List changes) { + final var listener = registration.listener(); + LOG.debug("{}: notifyListener: listener: {}", logContext, listener); + listener.onDataTreeChanged(changes); } @Override - protected void registrationRemoved(final AbstractDOMDataTreeChangeListenerRegistration registration) { + protected void registrationRemoved(final Reg registration) { LOG.debug("Registration {} removed", registration); } @Override - 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(); - } - }); + public void registerTreeChangeListener(final YangInstanceIdentifier treeId, + final DOMDataTreeChangeListener listener, final Optional initialState, + final Consumer onRegistration) { + registerTreeChangeListener(treeId, listener, onRegistration); if (initialState.isPresent()) { - notifySingleListener(treeId, listener, initialState.get(), logContext); + notifySingleListener(treeId, listener, initialState.orElseThrow(), logContext); + } else { + listener.onInitialData(); } } - static void notifySingleListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, - DataTreeCandidate state, String logContext) { + void registerTreeChangeListener(final YangInstanceIdentifier treeId, final DOMDataTreeChangeListener listener, + final Consumer onRegistration) { + LOG.debug("{}: registerTreeChangeListener: path: {}, listener: {}", logContext, treeId, listener); + onRegistration.accept(super.registerTreeChangeListener(treeId, listener)); + } + + static void notifySingleListener(final YangInstanceIdentifier treeId, final DOMDataTreeChangeListener listener, + final DataTreeCandidate state, final 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 -> { }); - 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(); } } }