From: Robert Varga Date: Tue, 20 Sep 2016 01:09:40 +0000 (+0200) Subject: Do not use ExecutorService unnecessarily X-Git-Tag: release/boron-sr1~20 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=0b4eee8d787f1c4871e6fc44047d6f5f89e22ba6 Do not use ExecutorService unnecessarily Executor is the interface we need, not ExecutorService. ExecutorServices are more complex, and we do not care about shutting them down anyway. So require only an Executor, letting callers to deal with its lifecycle, which allows us to use more efficient MoreExecutors.directExecutor() instead. Change-Id: Ide57266cc1fac395e545b466bf3b5ad86dee7b2f Signed-off-by: Robert Varga (cherry picked from commit 195ee42d6fe586b331ec949a0f3579a27bb51eed) --- diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java index 98ad468a4b..afdc2ee280 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java @@ -11,6 +11,8 @@ package org.opendaylight.mdsal.dom.store.inmemory; import com.google.common.annotations.Beta; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; @@ -19,7 +21,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; -import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executor; import javax.annotation.Nonnull; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; @@ -71,7 +73,7 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha private final InMemoryDOMDataTreeShardChangePublisher shardChangePublisher; private final ListeningExecutorService executor; - private InMemoryDOMDataTreeShard(final DOMDataTreeIdentifier prefix, final ExecutorService dataTreeChangeExecutor, + private InMemoryDOMDataTreeShard(final DOMDataTreeIdentifier prefix, final Executor dataTreeChangeExecutor, final int maxDataChangeListenerQueueSize, final int submitQueueSize) { this.prefix = Preconditions.checkNotNull(prefix); @@ -87,14 +89,14 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha } public static InMemoryDOMDataTreeShard create(final DOMDataTreeIdentifier id, - final ExecutorService dataTreeChangeExecutor, + final Executor dataTreeChangeExecutor, final int maxDataChangeListenerQueueSize) { return new InMemoryDOMDataTreeShard(id, dataTreeChangeExecutor, maxDataChangeListenerQueueSize, DEFAULT_SUBMIT_QUEUE_SIZE); } public static InMemoryDOMDataTreeShard create(final DOMDataTreeIdentifier id, - final ExecutorService dataTreeChangeExecutor, + final Executor dataTreeChangeExecutor, final int maxDataChangeListenerQueueSize, final int submitQueueSize) { return new InMemoryDOMDataTreeShard(id, dataTreeChangeExecutor, @@ -190,11 +192,7 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha @VisibleForTesting Map getChildShards() { - final Map ret = new HashMap<>(); - for (final Entry entry : childShards.entrySet()) { - ret.put(entry.getKey(), entry.getValue().getShard()); - } - return ret; + return ImmutableMap.copyOf(Maps.transformValues(childShards, ChildShardContext::getShard)); } DataTreeSnapshot takeSnapshot() { diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardChangePublisher.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardChangePublisher.java index 8f6bfbdf79..df0223e587 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardChangePublisher.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardChangePublisher.java @@ -11,7 +11,7 @@ package org.opendaylight.mdsal.dom.store.inmemory; import com.google.common.collect.ImmutableList; import java.util.Collection; import java.util.Map; -import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executor; import javax.annotation.Nonnull; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; @@ -41,14 +41,14 @@ final class InMemoryDOMDataTreeShardChangePublisher extends AbstractDOMShardTree private final QueuedNotificationManager, DataTreeCandidate> notificationManager; - InMemoryDOMDataTreeShardChangePublisher(final ExecutorService executorService, + InMemoryDOMDataTreeShardChangePublisher(final Executor executor, final int maxQueueSize, final DataTree dataTree, final YangInstanceIdentifier rootPath, final Map childShards) { super(dataTree, rootPath, childShards); notificationManager = new QueuedNotificationManager<>( - executorService, MANAGER_INVOKER, maxQueueSize, "DataTreeChangeListenerQueueMgr"); + executor, MANAGER_INVOKER, maxQueueSize, "DataTreeChangeListenerQueueMgr"); } @Override @@ -65,13 +65,14 @@ final class InMemoryDOMDataTreeShardChangePublisher extends AbstractDOMShardTree } @Override - protected void registrationRemoved(@Nonnull AbstractDOMDataTreeChangeListenerRegistration registration) { + protected void registrationRemoved(@Nonnull final AbstractDOMDataTreeChangeListenerRegistration registration) { LOG.debug("Closing registration {}", registration); } + @Override public AbstractDOMDataTreeChangeListenerRegistration - registerTreeChangeListener(YangInstanceIdentifier path, L listener) { + registerTreeChangeListener(final YangInstanceIdentifier path, final L listener) { return super.registerTreeChangeListener(path, listener); } diff --git a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardThreePhaseCommitCohortTest.java b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardThreePhaseCommitCohortTest.java index 345ddabbe1..b7a47226a5 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardThreePhaseCommitCohortTest.java +++ b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardThreePhaseCommitCohortTest.java @@ -40,7 +40,7 @@ public class InMemoryDOMDataTreeShardThreePhaseCommitCohortTest { private static final DataTreeCandidateNode DATA_TREE_CANDIDATE_NODE = mock(DataTreeCandidateNode.class); private static final DataTreeModification DATA_TREE_MODIFICATION = mock(DataTreeModification.class); private static final InMemoryDOMDataTreeShardChangePublisher IN_MEMORY_DOM_DATA_TREE_SHARD_CHANGE_PUBLISHER = - new InMemoryDOMDataTreeShardChangePublisher(MoreExecutors.newDirectExecutorService(), 1, DATA_TREE, + new InMemoryDOMDataTreeShardChangePublisher(MoreExecutors.directExecutor(), 1, DATA_TREE, YangInstanceIdentifier.of(QName.create("test")), ImmutableMap.of()); private static final InMemoryDOMDataTreeShardThreePhaseCommitCohort IN_MEMORY_DOM_DATA_TREE_SHARD_THREE_PHASE_COMMIT_COHORT = diff --git a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java index 08eb6adfb2..9d63ce294f 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java +++ b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java @@ -80,7 +80,7 @@ public class InmemoryDOMDataTreeShardWriteTransactionTest { doReturn("testDataTreeCandidate").when(dataTreeCandidate).toString(); doReturn(dataTreeCandidate).when(DATA_TREE).prepare(any()); final InMemoryDOMDataTreeShardChangePublisher inMemoryDOMDataTreeShardChangePublisher = - new InMemoryDOMDataTreeShardChangePublisher(MoreExecutors.newDirectExecutorService(), 1, DATA_TREE, + new InMemoryDOMDataTreeShardChangePublisher(MoreExecutors.directExecutor(), 1, DATA_TREE, YANG_INSTANCE_IDENTIFIER, CHILD_SHARDS); mockProducer = mock(InMemoryDOMDataTreeShardProducer.class); doNothing().when(mockProducer).transactionReady(any(), any());