Do not use ExecutorService unnecessarily 58/46358/1
authorRobert Varga <rovarga@cisco.com>
Tue, 20 Sep 2016 01:09:40 +0000 (03:09 +0200)
committerRobert Varga <rovarga@cisco.com>
Mon, 3 Oct 2016 11:36:00 +0000 (13:36 +0200)
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 <rovarga@cisco.com>
(cherry picked from commit 195ee42d6fe586b331ec949a0f3579a27bb51eed)

dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java
dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardChangePublisher.java
dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardThreePhaseCommitCohortTest.java
dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java

index 98ad468a4bb6bfc14c69fbd7105324f17b08a9f1..afdc2ee28051db955f98a15b2080510e7ba2b3e2 100644 (file)
@@ -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<DOMDataTreeIdentifier, DOMDataTreeShard> getChildShards() {
-        final Map<DOMDataTreeIdentifier, DOMDataTreeShard> ret = new HashMap<>();
-        for (final Entry<DOMDataTreeIdentifier, ChildShardContext> entry : childShards.entrySet()) {
-            ret.put(entry.getKey(), entry.getValue().getShard());
-        }
-        return ret;
+        return ImmutableMap.copyOf(Maps.transformValues(childShards, ChildShardContext::getShard));
     }
 
     DataTreeSnapshot takeSnapshot() {
index 8f6bfbdf7949644784287432ca196ffe19ab286b..df0223e58723ab8e53850b91ea3c2595c067f425 100644 (file)
@@ -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<AbstractDOMDataTreeChangeListenerRegistration<?>,
         DataTreeCandidate> notificationManager;
 
-    InMemoryDOMDataTreeShardChangePublisher(final ExecutorService executorService,
+    InMemoryDOMDataTreeShardChangePublisher(final Executor executor,
                                             final int maxQueueSize,
                                             final DataTree dataTree,
                                             final YangInstanceIdentifier rootPath,
                                             final Map<DOMDataTreeIdentifier, ChildShardContext> 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 <L extends DOMDataTreeChangeListener> AbstractDOMDataTreeChangeListenerRegistration<L>
-            registerTreeChangeListener(YangInstanceIdentifier path, L listener) {
+            registerTreeChangeListener(final YangInstanceIdentifier path, final L listener) {
         return super.registerTreeChangeListener(path, listener);
     }
 
index 345ddabbe1686ac722222182638a77349e34d551..b7a47226a50c885a1511e1842911707255f068ef 100644 (file)
@@ -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 =
index 08eb6adfb2125f73edfb1aa50b1a2b972d003990..9d63ce294fffd43e1e3c0a927436a1b0a7162592 100644 (file)
@@ -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());