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%2FDOMDataBrokerTransactionChainImpl.java;h=7cd6afa466e7d57b57f6861ac12aabf30bf90347;hp=b9f096aafc251400b01ee6b7319395cc8ec739fd;hb=8148d0748c1578d928fde08f2875b65f9b09e04a;hpb=2a35e5ab8c3300757a425841d017097c1fa31e68 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java index b9f096aafc..7cd6afa466 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java @@ -6,26 +6,21 @@ */ package org.opendaylight.controller.md.sal.dom.broker.impl; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.CheckedFuture; +import java.util.Map; import java.util.concurrent.atomic.AtomicLong; - -import javax.annotation.concurrent.GuardedBy; - -import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; +import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; -import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; -import com.google.common.util.concurrent.ListenableFuture; - /** * NormalizedNode implementation of {@link org.opendaylight.controller.md.sal.common.api.data.TransactionChain} which is backed * by several {@link DOMStoreTransactionChain} differentiated by provided @@ -36,12 +31,12 @@ public class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTrans implements DOMTransactionChain, DOMDataCommitErrorListener { private static final Logger LOG = LoggerFactory.getLogger(DOMDataBrokerTransactionChainImpl.class); + private final AtomicLong txNum = new AtomicLong(); private final DOMDataCommitExecutor coordinator; private final TransactionChainListener listener; private final long chainId; - private final AtomicLong txNum = new AtomicLong(); - @GuardedBy("this") - private boolean failed = false; + + private volatile boolean failed = false; /** * @@ -59,7 +54,7 @@ public class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTrans * If any of arguments is null. */ public DOMDataBrokerTransactionChainImpl(final long chainId, - final ImmutableMap chains, + final Map chains, final DOMDataCommitExecutor coordinator, final TransactionChainListener listener) { super(chains); this.chainId = chainId; @@ -73,26 +68,30 @@ public class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTrans } @Override - public synchronized ListenableFuture> commit( + public CheckedFuture submit( final DOMDataWriteTransaction transaction, final Iterable cohorts) { + checkNotClosed(); + return coordinator.submit(transaction, cohorts, Optional. of(this)); } @Override - public synchronized void close() { + public void close() { super.close(); + for (DOMStoreTransactionChain subChain : getTxFactories().values()) { subChain.close(); } if (!failed) { LOG.debug("Transaction chain {} successfully finished.", this); + // FIXME: this event should be emitted once all operations complete listener.onTransactionChainSuccessful(this); } } @Override - public synchronized void onCommitFailed(final DOMDataWriteTransaction tx, final Throwable cause) { + public void onCommitFailed(final DOMDataWriteTransaction tx, final Throwable cause) { failed = true; LOG.debug("Transaction chain {} failed.", this, cause); listener.onTransactionChainFailed(this, tx, cause);