import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.Map.Entry;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
import org.opendaylight.controller.md.sal.dom.spi.ForwardingDOMDataReadWriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.MappingCheckedFuture;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.slf4j.Logger;
return slowAllocateTransaction();
}
- // Fast path: reuse current transaction. We will check failures and similar on submit().
+ // Fast path: reuse current transaction. We will check failures and similar on commit().
if (!LOCKED_UPDATER.compareAndSet(this, null, oldTx)) {
// Ouch. Delegate chain has not detected a duplicate transaction allocation. This is the best we can do.
oldTx.getTransaction().cancel();
LOG.warn("Submitting transaction {} while {} is still running", tx, inflightTx);
}
- Futures.addCallback(tx.getTransaction().submit(), new FutureCallback<Void>() {
+ tx.getTransaction().commit().addCallback(new FutureCallback<CommitInfo>() {
@Override
- public void onSuccess(final Void result) {
+ public void onSuccess(final CommitInfo result) {
transactionSuccessful(tx, result);
}
}
}
- void transactionSuccessful(final PingPongTransaction tx, final Void result) {
+ void transactionSuccessful(final PingPongTransaction tx, final CommitInfo result) {
LOG.debug("Transaction {} completed successfully", tx);
tx.onSuccess(result);
@Override
public CheckedFuture<Void, TransactionCommitFailedException> submit() {
+ return MappingCheckedFuture.create(commit().transform(ignored -> null,
+ MoreExecutors.directExecutor()), TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER);
+ }
+
+ @Override
+ public FluentFuture<? extends CommitInfo> commit() {
readyTransaction(tx);
isOpen = false;
- return tx.getSubmitFuture();
+ return FluentFuture.from(tx.getSubmitFuture()).transformAsync(
+ ignored -> CommitInfo.emptyFluentFuture(), MoreExecutors.directExecutor());
}
@Override