From 55490ce1e312edfdb52891751b1420b848cc0ad5 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 13 Jul 2017 17:34:56 +0200 Subject: [PATCH] Optimize transaction collection 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 (cherry picked from commit 5b094bb7682f8b2172ba4a605a8a715a19d4d6bb) --- .../ShardedDOMDataTreeWriteTransaction.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java index ef91b4f86e..ef7a108b6f 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java @@ -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 success, final BiConsumer failure) { - - final ListenableFuture> 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>() { + Futures.addCallback(future, new FutureCallback() { @Override - public void onSuccess(final List result) { + public void onSuccess(final Object result) { success.accept(ShardedDOMDataTreeWriteTransaction.this); } -- 2.36.6