X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=dom%2Fmdsal-dom-inmemory-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fdom%2Fstore%2Finmemory%2FInMemoryDOMStoreTreeChangePublisher.java;h=d98697ecde6c679e29e7973643f3420a6429f00a;hb=11408d627adca7eb71ac956c3ad01f75b6b91596;hp=ac355ed3e2dee979a49450b893f7351634d29f4d;hpb=c71394328f488ea5f3bccf5ac8d42c8802cb637e;p=mdsal.git diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreTreeChangePublisher.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreTreeChangePublisher.java index ac355ed3e2..d98697ecde 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreTreeChangePublisher.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreTreeChangePublisher.java @@ -9,7 +9,7 @@ package org.opendaylight.mdsal.dom.store.inmemory; import static com.google.common.base.Preconditions.checkState; -import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.concurrent.ExecutorService; import org.eclipse.jdt.annotation.NonNull; @@ -17,42 +17,46 @@ 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; -import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager; +import org.opendaylight.yangtools.util.concurrent.EqualityQueuedNotificationManager; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.tree.spi.DataTreeCandidates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; final class InMemoryDOMStoreTreeChangePublisher extends AbstractDOMStoreTreeChangePublisher { private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMStoreTreeChangePublisher.class); - private final QueuedNotificationManager, DataTreeCandidate> + // Registrations use identity for equality, hence we can skip wrapping them + private final EqualityQueuedNotificationManager, DataTreeCandidate> notificationManager; - InMemoryDOMStoreTreeChangePublisher(final ExecutorService listenerExecutor, final int maxQueueSize) { - notificationManager = QueuedNotificationManager.create(listenerExecutor, (listener, notifications) -> { - if (!listener.isClosed()) { - listener.getInstance().onDataTreeChanged(notifications); - } - }, maxQueueSize, "DataTreeChangeListenerQueueMgr"); + InMemoryDOMStoreTreeChangePublisher(final String dsName, final ExecutorService listenerExecutor, + final int maxQueueSize) { + notificationManager = new EqualityQueuedNotificationManager<>("DataTreeChangeListenerQueueMgr + dsName", + listenerExecutor, maxQueueSize, + (listener, notifications) -> { + if (!listener.isClosed()) { + listener.getInstance().onDataTreeChanged(notifications); + } + }); } - private InMemoryDOMStoreTreeChangePublisher(final QueuedNotificationManager< + private InMemoryDOMStoreTreeChangePublisher(final EqualityQueuedNotificationManager< AbstractDOMDataTreeChangeListenerRegistration, DataTreeCandidate> notificationManager) { this.notificationManager = notificationManager; } - QueuedNotificationManager getNotificationManager() { + EqualityQueuedNotificationManager getNotificationManager() { return notificationManager; } @Override protected void notifyListener(final AbstractDOMDataTreeChangeListenerRegistration registration, - final Collection changes) { + final List changes) { LOG.debug("Enqueueing candidates {} for registration {}", changes, registration); notificationManager.submitNotifications(registration, changes); } @@ -68,20 +72,20 @@ final class InMemoryDOMStoreTreeChangePublisher extends AbstractDOMStoreTreeChan ListenerRegistration registerTreeChangeListener( final YangInstanceIdentifier treeId, final L listener, final DataTreeSnapshot snapshot) { final AbstractDOMDataTreeChangeListenerRegistration reg = registerTreeChangeListener(treeId, listener); - final Optional> preExistingData = snapshot.readNode(YangInstanceIdentifier.empty()); + final Optional preExistingData = snapshot.readNode(YangInstanceIdentifier.empty()); if (!preExistingData.isPresent()) { listener.onInitialData(); return reg; } - final NormalizedNode data = preExistingData.get(); + final NormalizedNode data = preExistingData.get(); if (treeId.isEmpty()) { checkState(data instanceof DataContainerNode, "Unexpected root node %s", data); - if (((DataContainerNode) data).getValue().isEmpty()) { + if (((DataContainerNode) data).isEmpty()) { // If we are listening on root of data tree we still get empty normalized node, root is always present, // we should filter this out separately and notify it by 'onInitialData()' once. // Otherwise, it is just a valid data node with empty value which also should be notified by - // "onDataTreeChanged(Collection)". + // "onDataTreeChanged(List)". listener.onInitialData(); return reg; }