X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fbroker%2Fimpl%2FCommitCoordinationTask.java;h=810f09a8c71eef625248221eaad62d53fc7e12d3;hp=37f33aabeed7610ec0a6fce481dbfe108f702193;hb=84d6864d26fddddd92da32fd00d57c7224d4213d;hpb=971a5efd2c7721e23c50ebef115419649c6a44a9 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/CommitCoordinationTask.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/CommitCoordinationTask.java index 37f33aabee..810f09a8c7 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/CommitCoordinationTask.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/CommitCoordinationTask.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.md.sal.dom.broker.impl; import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; import com.google.common.base.Throwables; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory; * Implementation of blocking three-phase commit-coordination tasks without * support of cancellation. */ -final class CommitCoordinationTask implements Callable { +final class CommitCoordinationTask implements Callable { private enum Phase { canCommit, preCommit, @@ -37,17 +38,20 @@ final class CommitCoordinationTask implements Callable { private final Collection cohorts; private final DurationStatisticsTracker commitStatTracker; private final DOMDataWriteTransaction tx; + private final Supplier futureValueSupplier; CommitCoordinationTask(final DOMDataWriteTransaction transaction, final Collection cohorts, - final DurationStatisticsTracker commitStatTracker) { + final DurationStatisticsTracker commitStatTracker, + final Supplier futureValueSupplier) { this.tx = Preconditions.checkNotNull(transaction, "transaction must not be null"); this.cohorts = Preconditions.checkNotNull(cohorts, "cohorts must not be null"); this.commitStatTracker = commitStatTracker; + this.futureValueSupplier = futureValueSupplier; } @Override - public Void call() throws TransactionCommitFailedException { + public T call() throws TransactionCommitFailedException { final long startTime = commitStatTracker != null ? System.nanoTime() : 0; Phase phase = Phase.canCommit; @@ -65,7 +69,7 @@ final class CommitCoordinationTask implements Callable { commitBlocking(); LOG.debug("Transaction {}: doCommit completed", tx.getIdentifier()); - return null; + return futureValueSupplier.get(); } catch (final TransactionCommitFailedException e) { LOG.warn("Tx: {} Error during phase {}, starting Abort", tx.getIdentifier(), phase, e); abortBlocking(e);