From: Robert Varga Date: Tue, 20 Jun 2017 14:06:01 +0000 (+0200) Subject: BUG-8494: propagate submit failure immediately X-Git-Tag: release/nitrogen~93 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=677caabe6a1144ab43dd231fcea7037a5cb4bb64;ds=sidebyside BUG-8494: propagate submit failure immediately Rather than waiting for abort to complete, which cannot happen during isolation for example, propagate timeout immediately. Change-Id: I90333938cb951f3b478320c682c65be219660fdf Signed-off-by: Robert Varga (cherry picked from commit b6a43d9e31f6300fe35a27ecd1830a044b7cceb9) --- diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java index 156050485d..71cd2dc7fe 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java @@ -210,19 +210,8 @@ public class ConcurrentDOMDataBroker extends AbstractDOMBroker { } LOG.warn("Tx: {} Error during phase {}, starting Abort", transaction.getIdentifier(), phase, throwable); - final Exception e; - if (throwable instanceof NoShardLeaderException || throwable instanceof ShardLeaderNotRespondingException) { - e = new DataStoreUnavailableException(throwable.getMessage(), throwable); - } else if (throwable instanceof Exception) { - e = (Exception)throwable; - } else { - e = new RuntimeException("Unexpected error occurred", throwable); - } - - final TransactionCommitFailedException clientException = exMapper.apply(e); // Transaction failed - tell all cohorts to abort. - @SuppressWarnings("unchecked") ListenableFuture[] canCommitFutures = new ListenableFuture[cohorts.size()]; int index = 0; @@ -230,21 +219,28 @@ public class ConcurrentDOMDataBroker extends AbstractDOMBroker { canCommitFutures[index++] = cohort.abort(); } + // Propagate the original exception + final Exception e; + if (throwable instanceof NoShardLeaderException || throwable instanceof ShardLeaderNotRespondingException) { + e = new DataStoreUnavailableException(throwable.getMessage(), throwable); + } else if (throwable instanceof Exception) { + e = (Exception)throwable; + } else { + e = new RuntimeException("Unexpected error occurred", throwable); + } + clientSubmitFuture.setException(exMapper.apply(e)); + ListenableFuture> combinedFuture = Futures.allAsList(canCommitFutures); Futures.addCallback(combinedFuture, new FutureCallback>() { @Override public void onSuccess(List notUsed) { // Propagate the original exception to the client. - clientSubmitFuture.setException(clientException); + LOG.debug("Tx: {} aborted successfully", transaction.getIdentifier()); } @Override public void onFailure(Throwable failure) { LOG.error("Tx: {} Error during Abort.", transaction.getIdentifier(), failure); - - // Propagate the original exception as that is what caused the Tx to fail and is - // what's interesting to the client. - clientSubmitFuture.setException(clientException); } }, MoreExecutors.directExecutor()); }