From 5b094bb7682f8b2172ba4a605a8a715a19d4d6bb 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 --- .../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 319b9ed219..5068e87a6d 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 @@ -17,7 +17,6 @@ import com.google.common.util.concurrent.MoreExecutors; 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; @@ -133,17 +132,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