Optimize transaction collection 93/60493/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 13 Jul 2017 15:34:56 +0000 (17:34 +0200)
committerRobert Varga <nite@hq.sk>
Tue, 18 Jul 2017 08:13:52 +0000 (08:13 +0000)
For cases when we have a single transaction it is not necessary
to use Futures.allAsList(). Discover this property and reuse returned
future directly.

Change-Id: I10c2d0371d8bc2c2c0585de41a114adcb7250f3c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 5b094bb7682f8b2172ba4a605a8a715a19d4d6bb)

dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java

index ef91b4f86e0c25a735d5aff028b6107edcc78a00..ef7a108b6fdcff2c7f8f53ae3731586499d01b00 100644 (file)
@@ -16,7 +16,6 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.ArrayDeque;
 import java.util.Deque;
-import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicLong;
@@ -132,17 +131,29 @@ final class ShardedDOMDataTreeWriteTransaction implements DOMDataTreeCursorAware
 
     void doSubmit(final Consumer<ShardedDOMDataTreeWriteTransaction> success,
             final BiConsumer<ShardedDOMDataTreeWriteTransaction, Throwable> failure) {
-
-        final ListenableFuture<List<Void>> listListenableFuture = Futures.allAsList(
-            transactions.values().stream().map(tx -> {
-                LOG.debug("Readying tx {}", identifier);
+        LOG.debug("Readying tx {}", identifier);
+
+        final ListenableFuture<?> future;
+        switch (transactions.size()) {
+            case 0:
+                success.accept(this);
+                return;
+            case 1: {
+                final DOMDataTreeShardWriteTransaction tx = transactions.values().iterator().next();
                 tx.ready();
-                return tx.submit();
-            }).collect(Collectors.toList()));
+                future = tx.submit();
+                break;
+            }
+            default:
+                future = Futures.allAsList(transactions.values().stream().map(tx -> {
+                    tx.ready();
+                    return tx.submit();
+                }).collect(Collectors.toList()));
+        }
 
-        Futures.addCallback(listListenableFuture, new FutureCallback<List<Void>>() {
+        Futures.addCallback(future, new FutureCallback<Object>() {
             @Override
-            public void onSuccess(final List<Void> result) {
+            public void onSuccess(final Object result) {
                 success.accept(ShardedDOMDataTreeWriteTransaction.this);
             }