X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fbroker%2Fimpl%2FDOMDataBrokerImpl.java;h=608ac9bc68d120c39d96b0389bbed324ba01652e;hb=refs%2Fchanges%2F38%2F6338%2F3;hp=3fafad7cf996b2dad776bb656f34d55eb07022bd;hpb=af4995552e842e052a085ed0845bfda97f5fe668;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java index 3fafad7cf9..608ac9bc68 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java @@ -10,10 +10,12 @@ package org.opendaylight.controller.md.sal.dom.broker.impl; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import java.util.Collections; import java.util.List; import java.util.Map.Entry; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicLong; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; @@ -23,6 +25,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction; @@ -30,6 +33,7 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCoh import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -45,12 +49,13 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; -public class DOMDataBrokerImpl implements DOMDataBroker { +public class DOMDataBrokerImpl implements DOMDataBroker, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(DOMDataBrokerImpl.class); private static final Logger COORDINATOR_LOG = LoggerFactory.getLogger(CommitCoordination.class); private final ImmutableMap datastores; private final ListeningExecutorService executor; + private final AtomicLong txNum = new AtomicLong(); public DOMDataBrokerImpl(final ImmutableMap datastores, final ListeningExecutorService executor) { @@ -83,7 +88,7 @@ public class DOMDataBrokerImpl implements DOMDataBroker { } private Object newTransactionIdentifier() { - return new Object(); + return "DOM-" + txNum.getAndIncrement(); } @Override @@ -115,6 +120,7 @@ public class DOMDataBrokerImpl implements DOMDataBroker { private ListenableFuture> submit( final WriteTransactionImpl transaction) { + LOG.debug("Tx: {} is submitted for execution.", transaction.getIdentifier()); return executor.submit(new CommitCoordination(transaction)); } @@ -184,7 +190,7 @@ public class DOMDataBrokerImpl implements DOMDataBroker { this.broker = broker; } - public Iterable ready() { + public synchronized Iterable ready() { checkState(cohorts == null, "Transaction was already marked as ready."); ImmutableList.Builder cohortsBuilder = ImmutableList.builder(); for (DOMStoreWriteTransaction subTx : getSubtransactions()) { @@ -211,8 +217,7 @@ public class DOMDataBrokerImpl implements DOMDataBroker { @Override public void merge(final LogicalDatastoreType store, final InstanceIdentifier path, final NormalizedNode data) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Not implemented yet."); + getSubtransaction(store).merge(path,data); } @Override @@ -258,14 +263,18 @@ public class DOMDataBrokerImpl implements DOMDataBroker { @Override public RpcResult call() throws Exception { - Boolean canCommit = canCommit().get(); try { + Boolean canCommit = canCommit().get(); + if (canCommit) { try { preCommit().get(); try { commit().get(); - return null; + COORDINATOR_LOG.debug("Tx: {} Is commited.", transaction.getIdentifier()); + return Rpcs.getRpcResult(true, TransactionStatus.COMMITED, + Collections. emptySet()); + } catch (InterruptedException | ExecutionException e) { COORDINATOR_LOG.error("Tx: {} Error during commit", transaction.getIdentifier(), e); } @@ -275,6 +284,7 @@ public class DOMDataBrokerImpl implements DOMDataBroker { transaction.getIdentifier(), e); } } else { + COORDINATOR_LOG.info("Tx: {} Did not pass canCommit phase.", transaction.getIdentifier()); abort().get(); } } catch (InterruptedException | ExecutionException e) { @@ -286,7 +296,7 @@ public class DOMDataBrokerImpl implements DOMDataBroker { } catch (InterruptedException | ExecutionException e) { COORDINATOR_LOG.error("Tx: {} Error during abort", transaction.getIdentifier(), e); } - return null; + return Rpcs.getRpcResult(false, TransactionStatus.FAILED, Collections. emptySet()); } public ListenableFuture preCommit() { @@ -328,4 +338,9 @@ public class DOMDataBrokerImpl implements DOMDataBroker { } + @Override + public void close() throws Exception { + + } + }