Default AsyncWriteTransaction#submit() 72/72172/4
authorTom Pantelis <tompantelis@gmail.com>
Tue, 22 May 2018 16:27:46 +0000 (12:27 -0400)
committerRobert Varga <nite@hq.sk>
Tue, 29 May 2018 08:39:27 +0000 (08:39 +0000)
Also changed all overrides and call sites of submit()
to commit().

Change-Id: I3306aacf0d91de0ce902b9d5983b30f0ff912b64
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
33 files changed:
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractWriteTransaction.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMTransactionChainAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/DataTreeChangeListenerTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/LeafDefaultValueTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/Mdsal298Test.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/WriteTransactionTest.java
binding/mdsal-binding-test-utils/src/test/java/org/opendaylight/mdsal/binding/testutils/AssertDataObjectsTest.java
binding/mdsal-binding-test-utils/src/test/java/org/opendaylight/mdsal/binding/testutils/AugmentableExtensionTest.java
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMTransactionChainAdapter.java
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMWriteTransactionAdapter.java
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/spi/AbstractWriteTransaction.java
binding2/mdsal-binding2-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/test/BasicLeafValueTest.java
common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/AsyncWriteTransaction.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/AbstractDOMForwardedTransactionFactory.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/CommitCoordinationTask.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMDataBrokerTransactionChainImpl.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMForwardedWriteTransaction.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/SerializedDOMDataBroker.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMTransactionChainAdapter.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMWriteTransactionAdapter.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/TransactionChainReadTransaction.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/TransactionChainReadWriteTransaction.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/TransactionChainWriteTransaction.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMBrokerTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMDataTreeListenerTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMForwardedWriteTransactionTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMTransactionChainTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/ShardedDOMTransactionChainAdapterTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TransactionChainReadTransactionTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TransactionChainWriteTransactionTest.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMDataWriteTransaction.java
dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMDataWriteTransactionTest.java

index 7c2829dab189625770616f2803e0741aadd04b6a..3e453dcf268a8b6cd28e44661b814de033049c2b 100644 (file)
@@ -9,10 +9,11 @@ package org.opendaylight.mdsal.binding.dom.adapter;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.Map.Entry;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.Identifiable;
@@ -134,8 +135,8 @@ public abstract class AbstractWriteTransaction<T extends DOMDataTreeWriteTransac
         getDelegate().delete(store, normalized);
     }
 
-    protected final CheckedFuture<Void,TransactionCommitFailedException> doSubmit() {
-        return getDelegate().submit();
+    protected final @NonNull FluentFuture<? extends @NonNull CommitInfo> doCommit() {
+        return getDelegate().commit();
     }
 
     protected final boolean doCancel() {
index 71d971606506a55e9e6b86d57ed080d6ec82b45c..e0c4b28174f5b0c77210b71aa92329a4dc6d76b5 100644 (file)
@@ -8,19 +8,20 @@
 package org.opendaylight.mdsal.binding.dom.adapter;
 
 import com.google.common.base.Preconditions;
-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.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.BindingTransactionChain;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.AsyncTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.TransactionChain;
 import org.opendaylight.mdsal.common.api.TransactionChainListener;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
@@ -65,8 +66,8 @@ final class BindingDOMTransactionChainAdapter implements BindingTransactionChain
         return new BindingDOMWriteTransactionAdapter<DOMDataTreeWriteTransaction>(delegateTx, codec) {
 
             @Override
-            public CheckedFuture<Void,TransactionCommitFailedException> submit() {
-                return listenForFailure(this,super.submit());
+            public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+                return listenForFailure(this, super.commit());
             }
 
         };
@@ -78,10 +79,9 @@ final class BindingDOMTransactionChainAdapter implements BindingTransactionChain
         return new BindingDOMReadWriteTransactionAdapter(delegateTx, codec) {
 
             @Override
-            public CheckedFuture<Void, TransactionCommitFailedException> submit() {
-                return listenForFailure(this,super.submit());
+            public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+                return listenForFailure(this, super.commit());
             }
-
         };
     }
 
@@ -101,6 +101,7 @@ final class BindingDOMTransactionChainAdapter implements BindingTransactionChain
         return future;
     }
 
+
     private void failTransactionChain(final WriteTransaction tx, final Throwable throwable) {
         /*
          *  We asume correct state change for underlaying transaction
index c67f210e4e36d2c83308cdff8f250e057a21af36..86b8b345557c7b6a776e265e889a60d05efaf53a 100644 (file)
@@ -7,10 +7,11 @@
  */
 package org.opendaylight.mdsal.binding.dom.adapter;
 
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -42,12 +43,12 @@ class BindingDOMWriteTransactionAdapter<T extends DOMDataTreeWriteTransaction> e
     }
 
     @Override
-    public CheckedFuture<Void,TransactionCommitFailedException> submit() {
-        return doSubmit();
+    public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+        return doCommit();
     }
 
     @Override
     public boolean cancel() {
         return doCancel();
     }
-}
\ No newline at end of file
+}
index e51936493cc69473d1149b8ff569e5a243ea74fe..05690ca368d4ef628d96c04e4348294e8c5f5602 100644 (file)
@@ -98,7 +98,7 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
 
         createAndVerifyTop(listener);
 
-        putTx(BAR_PATH, BAR_DATA).submit().get();
+        putTx(BAR_PATH, BAR_DATA).commit().get();
         final DataObjectModification<Top> afterBarPutEvent
                 = Iterables.getOnlyElement(listener.nextEvent()).getRootNode();
         verifyModification(afterBarPutEvent, TOP_ARGUMENT, ModificationType.SUBTREE_MODIFIED);
@@ -107,7 +107,7 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
         assertNotNull(barPutMod);
         verifyModification(barPutMod, BAR_ARGUMENT, ModificationType.WRITE);
 
-        deleteTx(BAR_PATH).submit().get();
+        deleteTx(BAR_PATH).commit().get();
         final DataObjectModification<Top> afterBarDeleteEvent
                 = Iterables.getOnlyElement(listener.nextEvent()).getRootNode();
         verifyModification(afterBarDeleteEvent, TOP_ARGUMENT, ModificationType.SUBTREE_MODIFIED);
@@ -125,18 +125,18 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
                 LogicalDatastoreType.OPERATIONAL, TOP_PATH.child(TopLevelList.class));
         dataBrokerImpl.registerDataTreeChangeListener(wildcard, listener);
 
-        putTx(TOP_PATH, TOP_INITIAL_DATA).submit().get();
+        putTx(TOP_PATH, TOP_INITIAL_DATA).commit().get();
 
         final DataTreeModification<TopLevelList> fooWriteEvent = Iterables.getOnlyElement(listener.nextEvent());
         assertEquals(FOO_PATH, fooWriteEvent.getRootPath().getRootIdentifier());
         verifyModification(fooWriteEvent.getRootNode(), FOO_ARGUMENT, ModificationType.WRITE);
 
-        putTx(BAR_PATH, BAR_DATA).submit().get();
+        putTx(BAR_PATH, BAR_DATA).commit().get();
         final DataTreeModification<TopLevelList> barWriteEvent = Iterables.getOnlyElement(listener.nextEvent());
         assertEquals(BAR_PATH, barWriteEvent.getRootPath().getRootIdentifier());
         verifyModification(barWriteEvent.getRootNode(), BAR_ARGUMENT, ModificationType.WRITE);
 
-        deleteTx(BAR_PATH).submit().get();
+        deleteTx(BAR_PATH).commit().get();
         final DataTreeModification<TopLevelList> barDeleteEvent = Iterables.getOnlyElement(listener.nextEvent());
         assertEquals(BAR_PATH, barDeleteEvent.getRootPath().getRootIdentifier());
         verifyModification(barDeleteEvent.getRootNode(), BAR_ARGUMENT, ModificationType.DELETE);
@@ -144,7 +144,7 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
 
     @Test
     public void testWildcardedListListenerWithPreexistingData() throws Exception {
-        putTx(TOP_PATH, TOP_INITIAL_DATA).submit().get();
+        putTx(TOP_PATH, TOP_INITIAL_DATA).commit().get();
 
         final EventCapturingListener<TopLevelList> listener = new EventCapturingListener<>();
         final DataTreeIdentifier<TopLevelList> wildcard = DataTreeIdentifier.create(
@@ -157,7 +157,7 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
     }
 
     private void createAndVerifyTop(final EventCapturingListener<Top> listener) throws Exception {
-        putTx(TOP_PATH,TOP_INITIAL_DATA).submit().get();
+        putTx(TOP_PATH,TOP_INITIAL_DATA).commit().get();
         final Collection<DataTreeModification<Top>> events = listener.nextEvent();
 
         assertFalse("Non empty collection should be received.",events.isEmpty());
index e597b391bbe9dc6d536f3dd08fcb95c190282aef..14a58bd943c06dbe0db77395acfb5c2ec7f739f8 100644 (file)
@@ -97,7 +97,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testTinyIntDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, TINY_INT_NODE_PATH, new TinyIntContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<TinyIntContainer> tinyIntContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -118,7 +118,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testSmallIntDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, SMALL_INT_NODE_PATH, new SmallIntContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<SmallIntContainer> smallIntContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -139,7 +139,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testNormalIntDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, NORMAL_INT_NODE_PATH, new NormalIntContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<NormalIntContainer> normalIntContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -160,7 +160,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testBigIntDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, BIG_INT_NODE_PATH, new BigIntContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<BigIntContainer> bigIntContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -181,7 +181,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testTinyUintDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, TINY_UINT_NODE_PATH, new TinyUintContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<TinyUintContainer> tinyUintContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -202,7 +202,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testSmallUintDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, SMALL_UINT_NODE_PATH, new SmallUintContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<SmallUintContainer> smallUintContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -223,7 +223,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testNormalUintDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, NORMAL_UINT_NODE_PATH, new NormalUintContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<NormalUintContainer> normalUintContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -244,7 +244,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testBigUintDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, BIG_UINT_NODE_PATH, new BigUintContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<BigUintContainer> bigUintContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -265,7 +265,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testDecimalDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, DECIMAL_NODE_PATH, new DecimalContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<DecimalContainer> decimalContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -286,7 +286,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testStringDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, STRING_NODE_PATH, new StringContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<StringContainer> stringContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -307,7 +307,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testBooleanDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, BOOLEAN_NODE_PATH, new BooleanContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<BooleanContainer> booleanContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -324,7 +324,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testEnumerationDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, ENUM_NODE_PATH, new EnumContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<EnumContainer> enumContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -341,7 +341,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testBitsDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, BITS_NODE_PATH, new BitsContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<BitsContainer> bitsContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -360,7 +360,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testBinaryDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, BINARY_NODE_PATH, new BinaryContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<BinaryContainer> binaryContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
@@ -379,7 +379,7 @@ public class LeafDefaultValueTest extends AbstractDataBrokerTest {
     public void testIdentityrefDefaultValue() throws ExecutionException, InterruptedException {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, IDENTITYREF_NODE_PATH, new IdentityrefContainerBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<IdentityrefContainer> identityrefContainerNode = readTx.read(LogicalDatastoreType.OPERATIONAL,
index 7da7f656991edce12fb0883ee59757fc17cdd16d..e4dfc2a103d3c1530c08871aee1037e97daff1f6 100644 (file)
@@ -104,7 +104,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
                 .addChild(ImmutableNodes.leafNode(FOO_QNAME, "bar"))
                 .build())
             .build());
-        domTx.submit().get();
+        domTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -159,7 +159,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
                 .addChild(ImmutableNodes.leafNode(FOO_QNAME, "bar"))
                 .build())
             .build());
-        domTx.submit().get();
+        domTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -191,7 +191,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
 
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(CONFIGURATION, ADDRESSABLE_CASE, new AddressableBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -224,7 +224,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(CONFIGURATION, ADDRESSABLE_CONTAINER.child(AddressableChild.class),
             new AddressableChildBuilder().build());
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -258,7 +258,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
         domTx.put(CONFIGURATION, YangInstanceIdentifier.create(UNADDRESSABLE_CONTAINER_NID)
             .node(QName.create(UnaddressableCont.QNAME, "baz")),
             ImmutableNodes.leafNode(BAZ_QNAME, "baz"));
-        domTx.submit().get();
+        domTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -290,7 +290,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
                 .withChildValue("foo")
                 .build())
             .build());
-        domTx.submit().get();
+        domTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -322,7 +322,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
         final DOMDataTreeWriteTransaction domTx = getDomBroker().newWriteOnlyTransaction();
         domTx.put(CONFIGURATION, YangInstanceIdentifier.create(new NodeIdentifier(qname)),
             ImmutableNodes.containerNode(qname));
-        domTx.submit().get();
+        domTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
@@ -358,7 +358,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
             .withNodeIdentifier(CHOICE_CONTAINER_NID)
             .withChild(Builders.choiceBuilder().withNodeIdentifier(CHOICE_NID).build())
             .build());
-        domTx.submit().get();
+        domTx.commit().get();
 
         final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
index 72702aee4712e1276ecda63b66720693082c8cd7..9c4277390fc1c5bdc20e49e16113772eb726c574 100644 (file)
@@ -34,7 +34,7 @@ public class WriteTransactionTest extends AbstractDataBrokerTest {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, TOP_PATH, new TopBuilder().build());
         writeTx.put(LogicalDatastoreType.OPERATIONAL, NODE_PATH, NODE);
-        writeTx.submit().get();
+        writeTx.commit().get();
     }
 
     @Test
@@ -42,7 +42,7 @@ public class WriteTransactionTest extends AbstractDataBrokerTest {
 
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.OPERATIONAL, NODE_PATH, NODE,true);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<Top> topNode = readTx.read(LogicalDatastoreType.OPERATIONAL, TOP_PATH).get();
@@ -56,7 +56,7 @@ public class WriteTransactionTest extends AbstractDataBrokerTest {
 
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.merge(LogicalDatastoreType.OPERATIONAL, NODE_PATH, NODE,true);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         final Optional<Top> topNode = readTx.read(LogicalDatastoreType.OPERATIONAL, TOP_PATH).get();
index 89b4d0ff688e2a1c8ca5b5ab34ccaee4d8ac12d9..e20ba7a60b042e4d538d4dbca8b622162a0cc4f2 100644 (file)
@@ -75,7 +75,7 @@ public class AssertDataObjectsTest extends AbstractDataBrokerTest {
         WriteTransaction initialTx = getDataBroker().newWriteOnlyTransaction();
         put(initialTx, OPERATIONAL, ExampleYangObjects.topEmpty());
         put(initialTx, OPERATIONAL, ExampleYangObjects.topLevelList());
-        initialTx.submit().checkedGet();
+        initialTx.commit().get();
 
         ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         InstanceIdentifier<Top> id = InstanceIdentifier.create(Top.class);
index e335ced7c9f7ea89b5de482523e9e4a30933c77f..efebed4232d89e0ac8e00dbf0060b9778e0b4501 100644 (file)
@@ -50,7 +50,7 @@ public class AugmentableExtensionTest extends AbstractDataBrokerTest {
     public void testAugmentableExtensionWithDataBroker() throws Exception {
         WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         put(writeTx, OPERATIONAL, ExampleYangObjects.topLevelList());
-        writeTx.submit().checkedGet();
+        writeTx.commit().get();
 
         ReadTransaction readTx = getDataBroker().newReadOnlyTransaction();
         InstanceIdentifier<Top> id = InstanceIdentifier.create(Top.class);
index 10de48694b9f3d16f0c6ae256ca083391e504fc5..5566b85dc0394986e5b3dce0b090035e4d2bc456 100644 (file)
@@ -9,11 +9,12 @@ package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.transaction;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
-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.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.javav2.api.BindingTransactionChain;
 import org.opendaylight.mdsal.binding.javav2.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.javav2.api.WriteTransaction;
@@ -22,9 +23,9 @@ import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
 import org.opendaylight.mdsal.common.api.AsyncReadWriteTransaction;
 import org.opendaylight.mdsal.common.api.AsyncTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.TransactionChain;
 import org.opendaylight.mdsal.common.api.TransactionChainListener;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
@@ -71,8 +72,8 @@ public final class BindingDOMTransactionChainAdapter
         return new BindingDOMWriteTransactionAdapter<DOMDataTreeWriteTransaction>(delegateTx, codec) {
 
             @Override
-            public CheckedFuture<Void, TransactionCommitFailedException> submit() {
-                return listenForFailure(this, super.submit());
+            public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+                return listenForFailure(this, super.commit());
             }
 
         };
index 6c1c5cf3f995a9ea449d451a3fb941f6af36eb51..df2b96c096baf3d3cf26984d25105e84be09048d 100644 (file)
@@ -8,14 +8,15 @@
 package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.transaction;
 
 import com.google.common.annotations.Beta;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.javav2.api.WriteTransaction;
 import org.opendaylight.mdsal.binding.javav2.dom.adapter.spi.AbstractWriteTransaction;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
 import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 
 /**
@@ -51,12 +52,12 @@ public class BindingDOMWriteTransactionAdapter<T extends DOMDataTreeWriteTransac
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
-        return doSubmit();
+    public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+        return doCommit();
     }
 
     @Override
     public boolean cancel() {
         return doCancel();
     }
-}
\ No newline at end of file
+}
index 83491cd99bc0e1b3b4b8363564bd7fb8fba7d438..b94d821df18829d24d9acea077ceb6ac9c81faa5 100644 (file)
@@ -9,14 +9,15 @@ package org.opendaylight.mdsal.binding.javav2.dom.adapter.spi;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.Map.Entry;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
 import org.opendaylight.mdsal.binding.javav2.spec.base.IdentifiableItem;
 import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -160,8 +161,8 @@ public abstract class AbstractWriteTransaction<T extends DOMDataTreeWriteTransac
         getDelegate().delete(store, normalized);
     }
 
-    protected final CheckedFuture<Void, TransactionCommitFailedException> doSubmit() {
-        return getDelegate().submit();
+    protected final @NonNull FluentFuture<? extends @NonNull CommitInfo> doCommit() {
+        return getDelegate().commit();
     }
 
     protected final boolean doCancel() {
index d599d4048595557b6fdfc378d419a9382ed12032..bea6d4f5cd27081d4456c9d9c6b4169d5198dcb4 100644 (file)
@@ -8,12 +8,12 @@
 
 package org.opendaylight.mdsal.binding.javav2.dom.adapter.test;
 
+import java.util.concurrent.ExecutionException;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.javav2.api.WriteTransaction;
 import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.gen.javav2.urn.test.rev170627.data.MyCont;
 import org.opendaylight.mdsal.gen.javav2.urn.test.rev170627.dto.MyContBuilder;
 
@@ -24,10 +24,10 @@ public class BasicLeafValueTest extends AbstractDataBrokerTest {
 
     @Ignore
     @Test
-    public void testMyContLeafNode() throws TransactionCommitFailedException {
+    public void testMyContLeafNode() throws InterruptedException, ExecutionException  {
         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         final MyContBuilder hello = new MyContBuilder().setMyLeaf("hello");
         writeTx.put(LogicalDatastoreType.OPERATIONAL, MY_CONT_NODE_PATH, hello.build());
-        writeTx.submit().checkedGet();
+        writeTx.commit().get();
     }
 }
index 46697aeae8f14cd8cf39c4d9a122b350914a1a99..ac0d137e07952d4282d031b1dd6c609c4a30836f 100644 (file)
@@ -14,6 +14,7 @@ import com.google.common.util.concurrent.MoreExecutors;
 import javax.annotation.CheckReturnValue;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.Path;
+import org.opendaylight.yangtools.util.concurrent.ExceptionMapper;
 
 /**
  * Write transaction provides mutation capabilities for a data tree.
@@ -122,344 +123,6 @@ public interface AsyncWriteTransaction<P extends Path<P>, D> extends AsyncTransa
      * Submits this transaction to be asynchronously applied to update the logical data tree. The
      * returned CheckedFuture conveys the result of applying the data changes.
      *
-     * <p>
-     * <b>Note:</b> It is strongly recommended to process the CheckedFuture result in an
-     * asynchronous manner rather than using the blocking get() method. See example usage below.
-     *
-     * <p>
-     * This call logically seals the transaction, which prevents the client from further changing
-     * data tree using this transaction. Any subsequent calls to
-     * <code>put(LogicalDatastoreType, Path, Object)</code>,
-     * <code>merge(LogicalDatastoreType, Path, Object)</code>,
-     * <code>delete(LogicalDatastoreType, Path)</code> will fail with {@link IllegalStateException}.
-     * The transaction is marked as submitted and enqueued into the data store back-end for
-     * processing.
-     *
-     * <p>
-     * Whether or not the commit is successful is determined by versioning of the data tree and
-     * validation of registered commit participants if the transaction changes the data tree.
-     *
-     * <p>
-     * The effects of a successful commit of data depends on listeners
-     * and commit participants that are registered with the data
-     * broker.
-     * <h3>Example usage:</h3>
-     *
-     * <pre>
-     *  private void doWrite(final int tries) {
-     *      WriteTransaction writeTx = dataBroker.newWriteOnlyTransaction();
-     *      MyDataObject data = ...;
-     *      InstanceIdentifier&lt;MyDataObject&gt; path = ...;
-     *      writeTx.put(LogicalDatastoreType.OPERATIONAL, path, data);
-     *      Futures.addCallback(writeTx.submit(), new FutureCallback&lt;Void&gt;() {
-     *          public void onSuccess(Void result) {
-     *              // succeeded
-     *          }
-     *          public void onFailure(Throwable t) {
-     *              if(t instanceof OptimisticLockFailedException) {
-     *                  if(( tries - 1) &gt; 0 ) {
-     *                      // do retry
-     *                      doWrite(tries - 1);
-     *                  } else {
-     *                      // out of retries
-     *                  }
-     *              } else {
-     *                  // failed due to another type of TransactionCommitFailedException.
-     *              }
-     *          });
-     * }
-     * ...
-     * doWrite(2);
-     * </pre>
-     *
-     * <h2>Failure scenarios</h2>
-     *
-     * <p>
-     * Transaction may fail because of multiple reasons, such as
-     * <ul>
-     * <li>Another transaction finished earlier and modified the same node in a non-compatible way
-     * (see below). In this case the returned future will fail with an
-     * {@link OptimisticLockFailedException}. It is the responsibility of the caller to create a new
-     * transaction and submit the same modification again in order to update data tree.
-     * <i><b>Warning</b>: In most cases, retrying after an OptimisticLockFailedException will result
-     * in a high probability of success. However, there are scenarios, albeit unusual, where any
-     * number of retries will not succeed. Therefore it is strongly recommended to limit the number
-     * of retries (2 or 3) to avoid an endless loop.</i></li>
-     * <li>Data change introduced by this transaction did not pass validation by commit handlers or
-     * data was incorrectly structured. Returned future will fail with a
-     * {@link DataValidationFailedException}. User should not retry to create new transaction with
-     * same data, since it probably will fail again.</li>
-     * </ul>
-     *
-     * <h3>Change compatibility</h3>
-     * There are several sets of changes which could be considered incompatible between two
-     * transactions which are derived from same initial state. Rules for conflict detection applies
-     * recursively for each subtree level.
-     *
-     * <h4>Change compatibility of leafs, leaf-list items</h4>
-     * Following table shows state changes and failures between two concurrent transactions, which
-     * are based on same initial state, Tx 1 completes successfully before Tx 2 is submitted.
-     *
-     * <table summary="Change compatibility of leaf values">
-     * <tr>
-     * <th>Initial state</th>
-     * <th>Tx 1</th>
-     * <th>Tx 2</th>
-     * <th>Result</th>
-     * </tr>
-     * <tr>
-     * <td>Empty</td>
-     * <td>put(A,1)</td>
-     * <td>put(A,2)</td>
-     * <td>Tx 2 will fail, state is A=1</td>
-     * </tr>
-     * <tr>
-     * <td>Empty</td>
-     * <td>put(A,1)</td>
-     * <td>merge(A,2)</td>
-     * <td>A=2</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>Empty</td>
-     * <td>merge(A,1)</td>
-     * <td>put(A,2)</td>
-     * <td>Tx 2 will fail, state is A=1</td>
-     * </tr>
-     * <tr>
-     * <td>Empty</td>
-     * <td>merge(A,1)</td>
-     * <td>merge(A,2)</td>
-     * <td>A=2</td>
-     * </tr>
-     *
-     *
-     * <tr>
-     * <td>A=0</td>
-     * <td>put(A,1)</td>
-     * <td>put(A,2)</td>
-     * <td>Tx 2 will fail, A=1</td>
-     * </tr>
-     * <tr>
-     * <td>A=0</td>
-     * <td>put(A,1)</td>
-     * <td>merge(A,2)</td>
-     * <td>A=2</td>
-     * </tr>
-     * <tr>
-     * <td>A=0</td>
-     * <td>merge(A,1)</td>
-     * <td>put(A,2)</td>
-     * <td>Tx 2 will fail, A=1</td>
-     * </tr>
-     * <tr>
-     * <td>A=0</td>
-     * <td>merge(A,1)</td>
-     * <td>merge(A,2)</td>
-     * <td>A=2</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>A=0</td>
-     * <td>delete(A)</td>
-     * <td>put(A,2)</td>
-     * <td>Tx 2 will fail, A does not exists</td>
-     * </tr>
-     * <tr>
-     * <td>A=0</td>
-     * <td>delete(A)</td>
-     * <td>merge(A,2)</td>
-     * <td>A=2</td>
-     * </tr>
-     * </table>
-     *
-     * <h4>Change compatibility of subtrees</h4>
-     * Following table shows state changes and failures between two concurrent transactions, which
-     * are based on same initial state, Tx 1 completes successfully before Tx 2 is submitted.
-     *
-     * <table summary="Change compatibility of containers">
-     * <tr>
-     * <th>Initial state</th>
-     * <th>Tx 1</th>
-     * <th>Tx 2</th>
-     * <th>Result</th>
-     * </tr>
-     *
-     * <tr>
-     * <td>Empty</td>
-     * <td>put(TOP,[])</td>
-     * <td>put(TOP,[])</td>
-     * <td>Tx 2 will fail, state is TOP=[]</td>
-     * </tr>
-     * <tr>
-     * <td>Empty</td>
-     * <td>put(TOP,[])</td>
-     * <td>merge(TOP,[])</td>
-     * <td>TOP=[]</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>Empty</td>
-     * <td>put(TOP,[FOO=1])</td>
-     * <td>put(TOP,[BAR=1])</td>
-     * <td>Tx 2 will fail, state is TOP=[FOO=1]</td>
-     * </tr>
-     * <tr>
-     * <td>Empty</td>
-     * <td>put(TOP,[FOO=1])</td>
-     * <td>merge(TOP,[BAR=1])</td>
-     * <td>TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>Empty</td>
-     * <td>merge(TOP,[FOO=1])</td>
-     * <td>put(TOP,[BAR=1])</td>
-     * <td>Tx 2 will fail, state is TOP=[FOO=1]</td>
-     * </tr>
-     * <tr>
-     * <td>Empty</td>
-     * <td>merge(TOP,[FOO=1])</td>
-     * <td>merge(TOP,[BAR=1])</td>
-     * <td>TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>put(TOP,[FOO=1])</td>
-     * <td>put(TOP,[BAR=1])</td>
-     * <td>Tx 2 will fail, state is TOP=[FOO=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>put(TOP,[FOO=1])</td>
-     * <td>merge(TOP,[BAR=1])</td>
-     * <td>state is TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>merge(TOP,[FOO=1])</td>
-     * <td>put(TOP,[BAR=1])</td>
-     * <td>Tx 2 will fail, state is TOP=[FOO=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>merge(TOP,[FOO=1])</td>
-     * <td>merge(TOP,[BAR=1])</td>
-     * <td>state is TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>delete(TOP)</td>
-     * <td>put(TOP,[BAR=1])</td>
-     * <td>Tx 2 will fail, state is empty store</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>delete(TOP)</td>
-     * <td>merge(TOP,[BAR=1])</td>
-     * <td>state is TOP=[BAR=1]</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>put(TOP/FOO,1)</td>
-     * <td>put(TOP/BAR,1])</td>
-     * <td>state is TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>put(TOP/FOO,1)</td>
-     * <td>merge(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>merge(TOP/FOO,1)</td>
-     * <td>put(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>merge(TOP/FOO,1)</td>
-     * <td>merge(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=1,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>delete(TOP)</td>
-     * <td>put(TOP/BAR,1)</td>
-     * <td>Tx 2 will fail, state is empty store</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[]</td>
-     * <td>delete(TOP)</td>
-     * <td>merge(TOP/BAR,1]</td>
-     * <td>Tx 2 will fail, state is empty store</td>
-     * </tr>
-     *
-     * <tr>
-     * <td>TOP=[FOO=1]</td>
-     * <td>put(TOP/FOO,2)</td>
-     * <td>put(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=2,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[FOO=1]</td>
-     * <td>put(TOP/FOO,2)</td>
-     * <td>merge(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=2,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[FOO=1]</td>
-     * <td>merge(TOP/FOO,2)</td>
-     * <td>put(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=2,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[FOO=1]</td>
-     * <td>merge(TOP/FOO,2)</td>
-     * <td>merge(TOP/BAR,1)</td>
-     * <td>state is TOP=[FOO=2,BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[FOO=1]</td>
-     * <td>delete(TOP/FOO)</td>
-     * <td>put(TOP/BAR,1)</td>
-     * <td>state is TOP=[BAR=1]</td>
-     * </tr>
-     * <tr>
-     * <td>TOP=[FOO=1]</td>
-     * <td>delete(TOP/FOO)</td>
-     * <td>merge(TOP/BAR,1]</td>
-     * <td>state is TOP=[BAR=1]</td>
-     * </tr>
-     * </table>
-     *
-     *
-     * <h3>Examples of failure scenarios</h3>
-     *
-     * <h4>Conflict of two transactions</h4>
-     * This example illustrates two concurrent transactions, which derived from same initial state
-     * of data tree and proposes conflicting modifications.
-     *
-     * <pre>
-     * txA = broker.newWriteTransaction(); // allocates new transaction, data tree is empty
-     * txB = broker.newWriteTransaction(); // allocates new transaction, data tree is empty
-     * txA.put(CONFIGURATION, PATH, A);    // writes to PATH value A
-     * txB.put(CONFIGURATION, PATH, B)     // writes to PATH value B
-     * ListenableFuture futureA = txA.submit(); // transaction A is sealed and submitted
-     * ListenebleFuture futureB = txB.submit(); // transaction B is sealed and submitted
-     * </pre>
-     * Commit of transaction A will be processed asynchronously and data tree will be updated to
-     * contain value <code>A</code> for <code>PATH</code>. Returned {@link ListenableFuture} will
-     * successfully complete once state is applied to data tree.
-     * Commit of Transaction B will fail, because previous transaction also modified path in a
-     * concurrent way. The state introduced by transaction B will not be applied. Returned
-     * {@link ListenableFuture} object will fail with {@link OptimisticLockFailedException}
-     * exception, which indicates to client that concurrent transaction prevented the submitted
-     * transaction from being applied. <br>
-     *
      * @return a CheckFuture containing the result of the commit. The Future blocks until the commit
      *         operation is complete. A successful commit returns nothing. On failure, the Future
      *         will fail with a {@link TransactionCommitFailedException} or an exception derived
@@ -469,7 +132,10 @@ public interface AsyncWriteTransaction<P extends Path<P>, D> extends AsyncTransa
      */
     @Deprecated
     @CheckReturnValue
-    CheckedFuture<Void, TransactionCommitFailedException> submit();
+    default CheckedFuture<Void, TransactionCommitFailedException> submit() {
+        return MappingCheckedFuture.create(commit().transform(ignored -> null, MoreExecutors.directExecutor()),
+                SUBMIT_EXCEPTION_MAPPER);
+    }
 
     /**
      * Submits this transaction to be asynchronously applied to update the logical data tree. The returned
@@ -821,8 +487,17 @@ public interface AsyncWriteTransaction<P extends Path<P>, D> extends AsyncTransa
      * @throws IllegalStateException if the transaction is already submitted or was canceled.
      */
     @CheckReturnValue
-    default @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
-        return FluentFuture.from(submit()).transformAsync((ignored) -> CommitInfo.emptyFluentFuture(),
-            MoreExecutors.directExecutor());
-    }
+    @NonNull FluentFuture<? extends @NonNull CommitInfo> commit();
+
+    /**
+     * This only exists for reuse by the deprecated {@link #submit} method and is not intended for general use.
+     */
+    @Deprecated
+    ExceptionMapper<TransactionCommitFailedException> SUBMIT_EXCEPTION_MAPPER =
+        new ExceptionMapper<TransactionCommitFailedException>("submit", TransactionCommitFailedException.class) {
+            @Override
+            protected TransactionCommitFailedException newWithCause(String message, Throwable cause) {
+                return new TransactionCommitFailedException(message, cause);
+            }
+        };
 }
index e1825babd9358c25598fe0a88ba87e513a752f62..396b1b56cf25dfbd9f7918e75ea55d6feb32e5a0 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.mdsal.dom.broker;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.Collection;
 import java.util.EnumMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
@@ -61,21 +62,20 @@ abstract class AbstractDOMForwardedTransactionFactory<T extends DOMStoreTransact
     protected abstract Object newTransactionIdentifier();
 
     /**
-     * User-supplied implementation of {@link DOMDataTreeWriteTransaction#submit()} for transaction.
+     * User-supplied implementation of {@link DOMDataTreeWriteTransaction#commit()} for transaction.
      *
      *<p>
-     * Callback invoked when {@link DOMDataTreeWriteTransaction#submit()} is invoked on transaction
+     * Callback invoked when {@link DOMDataTreeWriteTransaction#commit()} is invoked on transaction
      * created by this factory.
      *
-     * @param transaction Transaction on which {@link DOMDataTreeWriteTransaction#submit()} was invoked.
+     * @param transaction Transaction on which {@link DOMDataTreeWriteTransaction#commit()} was invoked.
      * @param cohorts Iteratable of cohorts for subtransactions associated with the transaction
      *        being committed.
-     * @return a CheckedFuture. if commit coordination on cohorts finished successfully, nothing is
-     *         returned from the Future, On failure, the Future fails with a
-     *         {@link TransactionCommitFailedException}.
+     * @return a FluentFuture. if commit coordination on cohorts finished successfully,
+     *         a CommitInfo is returned from the Future, On failure,
+     *         the Future fails with a {@link TransactionCommitFailedException}.
      */
-    protected abstract CheckedFuture<Void,TransactionCommitFailedException> submit(
-            DOMDataTreeWriteTransaction transaction,
+    protected abstract FluentFuture<? extends CommitInfo> commit(DOMDataTreeWriteTransaction transaction,
             Collection<DOMStoreThreePhaseCommitCohort> cohorts);
 
     /**
@@ -139,9 +139,9 @@ abstract class AbstractDOMForwardedTransactionFactory<T extends DOMStoreTransact
      * - backing subtransaction is selected by {@link LogicalDatastoreType},
      * {@link DOMStoreWriteTransaction#delete(org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier)}
      * is invoked on selected subtransaction.
-     * <li> {@link DOMDataTreeWriteTransaction#submit()} - results in invoking
+     * <li> {@link DOMDataTreeWriteTransaction#commit()} - results in invoking
      * {@link DOMStoreWriteTransaction#ready()}, gathering all resulting cohorts and then invoking
-     * finalized implementation callback {@link #submit(DOMDataTreeWriteTransaction, Collection)} with
+     * finalized implementation callback {@link #commit(DOMDataTreeWriteTransaction, Collection)} with
      * transaction which was commited and gathered results.</li>
      * </ul>
      *
index 29539b3f2dab0aad65ba2dba8813bfacd1039e48..d243a4da1ec48506c53d2d6861e649a1677bfa52 100644 (file)
@@ -15,6 +15,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collection;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
@@ -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<Void> {
+final class CommitCoordinationTask implements Callable<CommitInfo> {
     private enum Phase {
         CAN_COMMIT,
         PRE_COMMIT,
@@ -47,7 +48,7 @@ final class CommitCoordinationTask implements Callable<Void> {
     }
 
     @Override
-    public Void call() throws TransactionCommitFailedException {
+    public CommitInfo call() throws TransactionCommitFailedException {
         final long startTime = commitStatTracker != null ? System.nanoTime() : 0;
 
         Phase phase = Phase.CAN_COMMIT;
@@ -65,7 +66,7 @@ final class CommitCoordinationTask implements Callable<Void> {
             commitBlocking();
 
             LOG.debug("Transaction {}: doCommit completed", tx.getIdentifier());
-            return null;
+            return CommitInfo.empty();
         } catch (final TransactionCommitFailedException e) {
             LOG.warn("Tx: {} Error during phase {}, starting Abort", tx.getIdentifier(), phase, e);
             abortBlocking(e);
index 4fce1300c9cfbb737ae8ddce6d866842d9c3af83..0551244a89dd1ba68ab4ebfc74f2ac95c4bb3b40 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.mdsal.dom.broker;
 
 import com.google.common.base.Preconditions;
-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;
@@ -18,9 +18,9 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.TransactionChainListener;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
@@ -91,17 +91,17 @@ final class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTransa
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> submit(
-            final DOMDataTreeWriteTransaction transaction, final Collection<DOMStoreThreePhaseCommitCohort> cohorts) {
+    protected FluentFuture<? extends CommitInfo> commit(DOMDataTreeWriteTransaction transaction,
+            Collection<DOMStoreThreePhaseCommitCohort> cohorts) {
         checkNotFailed();
         checkNotClosed();
 
-        final CheckedFuture<Void, TransactionCommitFailedException> ret = broker.submit(transaction, cohorts);
+        final FluentFuture<? extends CommitInfo> ret = broker.commit(transaction, cohorts);
 
         COUNTER_UPDATER.incrementAndGet(this);
-        Futures.addCallback(ret, new FutureCallback<Void>() {
+        Futures.addCallback(ret, new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(final Void result) {
+            public void onSuccess(final CommitInfo result) {
                 transactionCompleted();
             }
 
index 2c9cb721c1a61f6ec0a6b780261fdfe755a348c7..29b3f3f22024b834400a9b9f2b1f6964ce1573db 100644 (file)
@@ -8,15 +8,16 @@
 package org.opendaylight.mdsal.dom.broker;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
@@ -124,24 +125,24 @@ class DOMForwardedWriteTransaction<T extends DOMStoreWriteTransaction> extends
     }
 
     @Override
-    @SuppressWarnings("checkstyle:illegalcatch")
-    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
+    @SuppressWarnings("checkstyle:IllegalCatch")
+    public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
         final AbstractDOMForwardedTransactionFactory<?> impl = IMPL_UPDATER.getAndSet(this, null);
         checkRunning(impl);
 
         final Collection<T> txns = getSubtransactions();
         final Collection<DOMStoreThreePhaseCommitCohort> cohorts = new ArrayList<>(txns.size());
 
-        CheckedFuture<Void, TransactionCommitFailedException> ret;
+        FluentFuture<? extends CommitInfo> ret;
         try {
             for (final DOMStoreWriteTransaction txn : txns) {
                 cohorts.add(txn.ready());
             }
 
-            ret = impl.submit(this, cohorts);
+            ret = impl.commit(this, cohorts);
         } catch (RuntimeException e) {
-            ret = Futures.immediateFailedCheckedFuture(
-                    TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER.apply(e));
+            ret = FluentFuture.from(Futures.immediateFailedFuture(
+                    TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER.apply(e)));
         }
         FUTURE_UPDATER.lazySet(this, ret);
         return ret;
index a7bd1c310b841f08dcce8e46b24efade77a2be36..93c4bdcd0c494aaa08c52de90977133c8959233a 100644 (file)
@@ -9,15 +9,15 @@
 package org.opendaylight.mdsal.dom.broker;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.RejectedExecutionException;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.MappingCheckedFuture;
 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
@@ -63,26 +63,24 @@ public class SerializedDOMDataBroker extends AbstractDOMDataBroker {
     }
 
     @Override
-    protected CheckedFuture<Void,TransactionCommitFailedException> submit(
-            final DOMDataTreeWriteTransaction transaction,
+    protected FluentFuture<? extends CommitInfo> commit(final DOMDataTreeWriteTransaction transaction,
             final Collection<DOMStoreThreePhaseCommitCohort> cohorts) {
         Preconditions.checkArgument(transaction != null, "Transaction must not be null.");
         Preconditions.checkArgument(cohorts != null, "Cohorts must not be null.");
         LOG.debug("Tx: {} is submitted for execution.", transaction.getIdentifier());
 
-        ListenableFuture<Void> commitFuture = null;
+        ListenableFuture<CommitInfo> commitFuture = null;
         try {
             commitFuture = executor.submit(new CommitCoordinationTask(transaction, cohorts,
                     commitStatsTracker));
         } catch (RejectedExecutionException e) {
             LOG.error("The commit executor's queue is full - submit task was rejected. \n"
                     + executor, e);
-            return Futures.immediateFailedCheckedFuture(
+            return FluentFuture.from(Futures.immediateFailedFuture(
                     new TransactionCommitFailedException(
-                        "Could not submit the commit task - the commit queue capacity has been exceeded.", e));
+                        "Could not submit the commit task - the commit queue capacity has been exceeded.", e)));
         }
 
-        return MappingCheckedFuture.create(commitFuture,
-                TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER);
+        return FluentFuture.from(commitFuture);
     }
 }
index b939df64673c2cb1b01dd0716549468cdc500442..1252431127cdce22248b43b1c3d442e9b1e7e946 100644 (file)
@@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.mdsal.common.api.AsyncTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.TransactionChainListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
@@ -46,7 +47,7 @@ public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
     private final CachedDataTreeService cachedDataTreeService;
     private TransactionChainWriteTransaction writeTx;
     private TransactionChainReadTransaction readTx;
-    private ListenableFuture<Void> writeTxSubmitFuture;
+    private ListenableFuture<? extends CommitInfo> writeTxCommitFuture;
     private boolean finished = false;
 
     public ShardedDOMTransactionChainAdapter(final Object txChainIdentifier,
@@ -67,7 +68,7 @@ public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
         checkWriteTxClosed();
         readTx = new TransactionChainReadTransaction(newTransactionIdentifier(),
                 new ShardedDOMReadTransactionAdapter(newTransactionIdentifier(), dataTreeService),
-                writeTxSubmitFuture, this);
+                writeTxCommitFuture, this);
 
         return readTx;
     }
@@ -92,7 +93,7 @@ public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
         ShardedDOMReadWriteTransactionAdapter adapter = new ShardedDOMReadWriteTransactionAdapter(
                 newTransactionIdentifier(), cachedDataTreeService);
         TransactionChainReadWriteTransaction readWriteTx = new TransactionChainReadWriteTransaction(
-                newTransactionIdentifier(), adapter, adapter.getReadAdapter(), writeTxSubmitFuture, this);
+                newTransactionIdentifier(), adapter, adapter.getReadAdapter(), writeTxCommitFuture, this);
 
         writeTx = readWriteTx;
         return readWriteTx;
@@ -107,9 +108,9 @@ public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
 
         checkReadTxClosed();
         checkWriteTxClosed();
-        Futures.addCallback(writeTxSubmitFuture, new FutureCallback<Void>() {
+        Futures.addCallback(writeTxCommitFuture, new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(@Nullable final Void result) {
+            public void onSuccess(@Nullable final CommitInfo result) {
                 txChainListener.onTransactionChainSuccessful(ShardedDOMTransactionChainAdapter.this);
             }
 
@@ -128,8 +129,8 @@ public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
         readTx = null;
     }
 
-    public void closeWriteTransaction(final ListenableFuture<Void> submitFuture) {
-        writeTxSubmitFuture = submitFuture;
+    public void closeWriteTransaction(final ListenableFuture<? extends CommitInfo> commitFuture) {
+        writeTxCommitFuture = commitFuture;
         writeTx = null;
     }
 
index 6ead33c0e05e20c5e1f671836e00e08241633950..b446477194672350813c55808a2d80a32a92e3db 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.mdsal.dom.broker;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -17,8 +17,9 @@ import java.util.Collections;
 import java.util.EnumMap;
 import java.util.List;
 import java.util.Map;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
@@ -69,7 +70,7 @@ public class ShardedDOMWriteTransactionAdapter implements DOMDataTreeWriteTransa
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
+    public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
         checkRunning();
         LOG.debug("{}: Submitting transaction", txIdentifier);
         if (!initialized) {
@@ -77,7 +78,7 @@ public class ShardedDOMWriteTransactionAdapter implements DOMDataTreeWriteTransa
             // not even initialized just seal this transaction and
             // return immediate future
             finished = true;
-            return Futures.immediateCheckedFuture(null);
+            return CommitInfo.emptyFluentFuture();
         }
         // First we need to close cursors
         cursorMap.values().forEach(DOMDataTreeWriteCursor::close);
@@ -89,9 +90,8 @@ public class ShardedDOMWriteTransactionAdapter implements DOMDataTreeWriteTransa
         closeProducers();
         finished = true;
 
-        return Futures.makeChecked(
-                Futures.transform(aggregatedSubmit, input -> input.get(0), MoreExecutors.directExecutor()),
-                TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER);
+        return FluentFuture.from(Futures.transform(aggregatedSubmit,
+            unused -> CommitInfo.empty(), MoreExecutors.directExecutor()));
     }
 
     @Override
index 5f553b399675c2255dd7f48111b280741f1053fe..f3c76929a9cd947cd35728ed21d61a926721e430 100644 (file)
@@ -17,6 +17,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 import javax.annotation.Nullable;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.ReadFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
@@ -26,12 +27,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 public class TransactionChainReadTransaction implements DOMDataTreeReadTransaction {
 
     private final DOMDataTreeReadTransaction delegateReadTx;
-    private final ListenableFuture<Void> previousWriteTxFuture;
+    private final ListenableFuture<? extends CommitInfo> previousWriteTxFuture;
     private final Object identifier;
     private final ShardedDOMTransactionChainAdapter txChain;
 
     TransactionChainReadTransaction(final Object txIdentifier, final DOMDataTreeReadTransaction delegateReadTx,
-                                    final ListenableFuture<Void> previousWriteTxFuture,
+                                    final ListenableFuture<? extends CommitInfo> previousWriteTxFuture,
                                     final ShardedDOMTransactionChainAdapter txChain) {
         this.delegateReadTx = delegateReadTx;
         this.previousWriteTxFuture = previousWriteTxFuture;
@@ -44,9 +45,9 @@ public class TransactionChainReadTransaction implements DOMDataTreeReadTransacti
             final YangInstanceIdentifier path) {
         final SettableFuture<Optional<NormalizedNode<?, ?>>> readResult = SettableFuture.create();
 
-        Futures.addCallback(previousWriteTxFuture, new FutureCallback<Void>() {
+        Futures.addCallback(previousWriteTxFuture, new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(@Nullable final Void result) {
+            public void onSuccess(@Nullable final CommitInfo result) {
                 Futures.addCallback(delegateReadTx.read(store, path),
                     new FutureCallback<Optional<NormalizedNode<?, ?>>>() {
 
index 430b5dd425ef8570ce3cea0894ed65e2a772360e..86197a036db7120c7a32ca30ac05a63bdc3b47ed 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.dom.broker;
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.ReadFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
@@ -24,7 +25,8 @@ class TransactionChainReadWriteTransaction extends TransactionChainWriteTransact
 
     TransactionChainReadWriteTransaction(final Object identifier,
             final DOMDataTreeReadWriteTransaction delegateWriteTx, final DOMDataTreeReadTransaction delegateReadTx,
-            final ListenableFuture<Void> previousWriteTxFuture, final ShardedDOMTransactionChainAdapter txChain) {
+            final ListenableFuture<? extends CommitInfo> previousWriteTxFuture,
+            final ShardedDOMTransactionChainAdapter txChain) {
         super(identifier, delegateWriteTx, txChain);
         readTx = new TransactionChainReadTransaction(identifier, delegateReadTx, previousWriteTxFuture, txChain);
     }
index d18eb98747c9397870db09d2e5125b3414deae72..34f168817f94f055b617734bf028c21373e34c6d 100644 (file)
@@ -9,13 +9,14 @@
 package org.opendaylight.mdsal.dom.broker;
 
 import com.google.common.base.Preconditions;
-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 javax.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -57,11 +58,11 @@ public class TransactionChainWriteTransaction implements DOMDataTreeWriteTransac
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
-        final CheckedFuture<Void, TransactionCommitFailedException> writeResultFuture = delegateTx.submit();
-        Futures.addCallback(writeResultFuture, new FutureCallback<Void>() {
+    public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+        final FluentFuture<? extends CommitInfo> writeResultFuture = delegateTx.commit();
+        Futures.addCallback(writeResultFuture, new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(@Nullable final Void result) {
+            public void onSuccess(@Nullable final CommitInfo result) {
                 // NOOP
             }
 
index a40a2cab278f6ee67a182fc04e2c219090449e36..2ec3f64baffd104b84f36f1a961412f7632d6ca0 100644 (file)
@@ -127,7 +127,7 @@ public class DOMBrokerTest {
          */
         writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
 
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final Optional<NormalizedNode<?, ?>> afterCommitRead = domBroker.newReadOnlyTransaction()
                 .read(OPERATIONAL, TestModel.TEST_PATH).get();
@@ -135,7 +135,8 @@ public class DOMBrokerTest {
     }
 
     @Test(expected = TransactionCommitFailedException.class)
-    public void testRejectedCommit() throws Exception {
+    @SuppressWarnings({"checkstyle:AvoidHidingCauseException", "checkstyle:IllegalThrows"})
+    public void testRejectedCommit() throws Throwable {
         commitExecutor.delegate = Mockito.mock(ExecutorService.class);
         Mockito.doThrow(new RejectedExecutionException("mock"))
             .when(commitExecutor.delegate).execute(Mockito.any(Runnable.class));
@@ -148,7 +149,11 @@ public class DOMBrokerTest {
         final DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
 
-        writeTx.submit().checkedGet(5, TimeUnit.SECONDS);
+        try {
+            writeTx.commit().get(5, TimeUnit.SECONDS);
+        } catch (ExecutionException e) {
+            throw e.getCause();
+        }
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
@@ -159,7 +164,7 @@ public class DOMBrokerTest {
             public void run() {
 
                 try {
-                    writeTx.submit();
+                    writeTx.commit();
                 } catch (final Throwable e) {
                     caughtEx.set(e);
                 }
@@ -187,7 +192,7 @@ public class DOMBrokerTest {
         assertNotNull(((SerializedDOMDataBroker) domBroker).getCommitStatsTracker());
 
         writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
-        writeTx.submit().get();
+        writeTx.commit().get();
         assertFalse(writeTx.cancel());
 
         assertEquals(false, domBroker.newReadOnlyTransaction().exists(CONFIGURATION, TestModel.TEST_PATH).get());
@@ -197,14 +202,14 @@ public class DOMBrokerTest {
         writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
         writeTx.delete(OPERATIONAL, TestModel.TEST_PATH);
-        writeTx.submit().get();
+        writeTx.commit().get();
         assertEquals(false, domBroker.newReadOnlyTransaction().exists(OPERATIONAL, TestModel.TEST_PATH).get());
         assertTrue(domBroker.newWriteOnlyTransaction().cancel());
 
         writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
         writeTx.merge(OPERATIONAL, TestModel.TEST_PATH, testContainer);
-        writeTx.submit().get();
+        writeTx.commit().get();
         assertEquals(Boolean.TRUE, domBroker.newReadOnlyTransaction().exists(OPERATIONAL, TestModel.TEST_PATH).get());
         assertEquals(Boolean.TRUE, domBroker.newReadOnlyTransaction().read(OPERATIONAL, TestModel.TEST_PATH).get()
                  .get().toString().contains(testContainer.toString()));
index 64519a509af9f72292d36fc3883d137b5f376cda..0cd97131f7bf16b4564032eaf4eef2870c7336af 100644 (file)
@@ -140,7 +140,7 @@ public class DOMDataTreeListenerTest {
 
         final DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER);
-        writeTx.submit();
+        writeTx.commit();
 
         latch.await(5, TimeUnit.SECONDS);
 
@@ -165,14 +165,14 @@ public class DOMDataTreeListenerTest {
 
         DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final TestDataTreeListener listener = new TestDataTreeListener(latch);
         final ListenerRegistration<TestDataTreeListener> listenerReg =
                 dataTreeChangeService.registerDataTreeChangeListener(ROOT_DATA_TREE_ID, listener);
         writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER_2);
-        writeTx.submit();
+        writeTx.commit();
 
         latch.await(5, TimeUnit.SECONDS);
 
@@ -205,7 +205,7 @@ public class DOMDataTreeListenerTest {
 
         DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final TestDataTreeListener listener = new TestDataTreeListener(latch);
         final ListenerRegistration<TestDataTreeListener> listenerReg =
@@ -213,7 +213,7 @@ public class DOMDataTreeListenerTest {
 
         writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.delete(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH);
-        writeTx.submit();
+        writeTx.commit();
 
         latch.await(5, TimeUnit.SECONDS);
 
@@ -246,7 +246,7 @@ public class DOMDataTreeListenerTest {
 
         DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final TestDataTreeListener listener = new TestDataTreeListener(latch);
         final ListenerRegistration<TestDataTreeListener> listenerReg =
@@ -254,7 +254,7 @@ public class DOMDataTreeListenerTest {
 
         writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.OUTER_LIST_PATH, OUTER_LIST_2);
-        writeTx.submit();
+        writeTx.commit();
 
         latch.await(5, TimeUnit.SECONDS);
 
@@ -291,7 +291,7 @@ public class DOMDataTreeListenerTest {
 
         DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final TestDataTreeListener listener = new TestDataTreeListener(latch);
         final ListenerRegistration<TestDataTreeListener> listenerReg =
@@ -299,7 +299,7 @@ public class DOMDataTreeListenerTest {
 
         writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER_2);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         latch.await(1, TimeUnit.SECONDS);
 
@@ -332,7 +332,7 @@ public class DOMDataTreeListenerTest {
 
         DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH, TEST_CONTAINER);
-        writeTx.submit().get();
+        writeTx.commit().get();
 
         final TestDataTreeListener listener = new TestDataTreeListener(latch);
         final ListenerRegistration<TestDataTreeListener> listenerReg =
@@ -363,7 +363,7 @@ public class DOMDataTreeListenerTest {
                 outerListEntry2);
         writeTx.put(LogicalDatastoreType.CONFIGURATION, TestModel.OUTER_LIST_PATH.node(outerListEntryId3),
                 outerListEntry3);
-        writeTx.submit();
+        writeTx.commit();
 
         latch.await(5, TimeUnit.SECONDS);
 
index dc37003a4dd7a616fd6c7e3258acc8dcb1afff68..34f76547e72e8745e629e955a7bf728e9bfb1d0e 100644 (file)
@@ -11,13 +11,15 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.Collections;
+import java.util.concurrent.ExecutionException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
@@ -36,7 +38,7 @@ public class DOMForwardedWriteTransactionTest {
     }
 
     @Test
-    public void readyRuntimeExceptionAndCancel() {
+    public void readyRuntimeExceptionAndCancel() throws InterruptedException {
         RuntimeException thrown = new RuntimeException();
         doThrow(thrown).when(domStoreWriteTransaction).ready();
         DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
@@ -44,33 +46,35 @@ public class DOMForwardedWriteTransactionTest {
                         new Object(),
                         Collections.singletonMap(LogicalDatastoreType.OPERATIONAL, domStoreWriteTransaction),
                         abstractDOMForwardedTransactionFactory);
-        CheckedFuture<Void, TransactionCommitFailedException> submitFuture = domForwardedWriteTransaction.submit();
+        FluentFuture<? extends CommitInfo> submitFuture = domForwardedWriteTransaction.commit();
         try {
-            submitFuture.checkedGet();
+            submitFuture.get();
             Assert.fail("TransactionCommitFailedException expected");
-        } catch (TransactionCommitFailedException e) {
-            assertTrue(e.getCause() == thrown);
+        } catch (ExecutionException e) {
+            assertTrue(e.getCause() instanceof TransactionCommitFailedException);
+            assertTrue(e.getCause().getCause() == thrown);
             domForwardedWriteTransaction.cancel();
         }
     }
 
     @Test
-    public void submitRuntimeExceptionAndCancel() {
+    public void submitRuntimeExceptionAndCancel() throws InterruptedException {
         RuntimeException thrown = new RuntimeException();
         doReturn(null).when(domStoreWriteTransaction).ready();
-        doThrow(thrown).when(abstractDOMForwardedTransactionFactory).submit(any(), any());
+        doThrow(thrown).when(abstractDOMForwardedTransactionFactory).commit(any(), any());
         DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
                 new DOMForwardedWriteTransaction<>(
                         new Object(),
                         Collections.singletonMap(LogicalDatastoreType.OPERATIONAL, domStoreWriteTransaction),
                         abstractDOMForwardedTransactionFactory);
-        CheckedFuture<Void, TransactionCommitFailedException> submitFuture = domForwardedWriteTransaction.submit();
+        FluentFuture<? extends CommitInfo> submitFuture = domForwardedWriteTransaction.commit();
         try {
-            submitFuture.checkedGet();
+            submitFuture.get();
             Assert.fail("TransactionCommitFailedException expected");
-        } catch (TransactionCommitFailedException e) {
-            assertTrue(e.getCause() == thrown);
+        } catch (ExecutionException e) {
+            assertTrue(e.getCause() instanceof TransactionCommitFailedException);
+            assertTrue(e.getCause().getCause() == thrown);
             domForwardedWriteTransaction.cancel();
         }
     }
-}
\ No newline at end of file
+}
index 73c7dcc5030bb56f8c92f1f37be520b86a89bf8b..6bea6dcbfe9260a386de62c57b00b7b3e7f79ac7 100644 (file)
@@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
@@ -77,7 +78,7 @@ public class DOMTransactionChainTest {
          * First transaction is marked as ready, we are able to allocate chained
          * transactions.
          */
-        final ListenableFuture<Void> firstWriteTxFuture = firstTx.submit();
+        final ListenableFuture<? extends CommitInfo> firstWriteTxFuture = firstTx.commit();
 
         /**
          * We alocate chained transaction - read transaction.
@@ -121,8 +122,7 @@ public class DOMTransactionChainTest {
         /**
          * third transaction is sealed and commited.
          */
-        final ListenableFuture<Void> thirdDeleteTxFuture = thirdDeleteTx.submit();
-        assertCommitSuccessful(thirdDeleteTxFuture);
+        assertCommitSuccessful(thirdDeleteTx.commit());
 
         /**
          * We close transaction chain.
@@ -174,9 +174,9 @@ public class DOMTransactionChainTest {
         return tx;
     }
 
-    private static void assertCommitSuccessful(final ListenableFuture<Void> future)
+    private static void assertCommitSuccessful(final ListenableFuture<? extends CommitInfo> firstWriteTxFuture)
             throws InterruptedException, ExecutionException {
-        future.get();
+        firstWriteTxFuture.get();
     }
 
     private static void assertTestContainerExists(final DOMDataTreeReadTransaction readTx)
index 1755349858a1aabc1db22d0323959d0c5d3f28a8..4d6945f4dbc4f282566ecea8bdd5046437f69d48 100644 (file)
@@ -74,11 +74,11 @@ public class ShardedDOMTransactionChainAdapterTest {
                 new ShardedDOMTransactionChainAdapter(identifier, dataTreeService, chainListener);
         writeTransaction = transactionChainAdapter.newWriteOnlyTransaction();
         writeTransaction.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
-        assertNotNull(writeTransaction.submit());
+        assertNotNull(writeTransaction.commit());
         assertFalse(writeTransaction.cancel());
         transactionChainAdapter.closeWriteTransaction(Futures.immediateFuture(null));
 
-        assertNotNull(transactionChainAdapter.newWriteOnlyTransaction().submit());
+        assertNotNull(transactionChainAdapter.newWriteOnlyTransaction().commit());
 
         DOMDataTreeReadTransaction readTransaction = transactionChainAdapter.newReadOnlyTransaction();
         assertNotNull(readTransaction);
index 90d4c323cf608e4cdca0874ed48030b9009387e1..06c047c0b12121ac3336cedbfac7d4319b17cb14 100644 (file)
@@ -19,6 +19,7 @@ import static org.mockito.Mockito.verify;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import org.junit.Test;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -30,7 +31,7 @@ public class TransactionChainReadTransactionTest {
         final String identifier = "testIdent";
         final DOMDataTreeReadTransaction readTransaction = mock(DOMDataTreeReadTransaction.class);
         final ShardedDOMTransactionChainAdapter chainAdapter = mock(ShardedDOMTransactionChainAdapter.class);
-        ListenableFuture<Void> previousWriteTxFuture = Futures.immediateFuture(null);
+        ListenableFuture<? extends CommitInfo> previousWriteTxFuture = Futures.immediateFuture(null);
 
         TransactionChainReadTransaction transactionChainReadTransaction =
                 new TransactionChainReadTransaction(identifier, readTransaction, previousWriteTxFuture, chainAdapter);
@@ -60,4 +61,4 @@ public class TransactionChainReadTransactionTest {
         assertNotNull(transactionChainReadTransaction.read(
                 LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.EMPTY));
     }
-}
\ No newline at end of file
+}
index 6a0ef43044861883edf2368558c6904059f3f1d4..f6bcc16ae0907203611ba24aa9ccd318d6351524 100644 (file)
@@ -14,9 +14,10 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import org.junit.Test;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 
@@ -50,13 +51,13 @@ public class TransactionChainWriteTransactionTest {
         transactionChainWriteTransaction.delete(any(), any());
         verify(writeTransaction).delete(any(), any());
 
-        CheckedFuture<Void, TransactionCommitFailedException> writeResult = Futures.immediateCheckedFuture(null);
-        doReturn(writeResult).when(writeTransaction).submit();
-        assertEquals(writeResult, transactionChainWriteTransaction.submit());
+        ListenableFuture<? extends CommitInfo> writeResult = Futures.immediateFuture(null);
+        doReturn(writeResult).when(writeTransaction).commit();
+        assertEquals(writeResult, transactionChainWriteTransaction.commit());
 
-        writeResult = Futures.immediateFailedCheckedFuture(mock(TransactionCommitFailedException.class));
+        writeResult = Futures.immediateFailedFuture(mock(TransactionCommitFailedException.class));
         doNothing().when(chainAdapter).transactionFailed(any(), any());
-        doReturn(writeResult).when(writeTransaction).submit();
-        assertEquals(writeResult, transactionChainWriteTransaction.submit());
+        doReturn(writeResult).when(writeTransaction).commit();
+        assertEquals(writeResult, transactionChainWriteTransaction.commit());
     }
-}
\ No newline at end of file
+}
index ff2fc61cc851f282761bb57fd986f6bcc51f30a1..5064ec45f93af65fab64600ae508266a58284d96 100644 (file)
@@ -8,10 +8,10 @@
 package org.opendaylight.mdsal.dom.spi;
 
 import com.google.common.collect.ForwardingObject;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import javax.annotation.Nonnull;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -54,8 +54,7 @@ public abstract class ForwardingDOMDataWriteTransaction extends ForwardingObject
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
-        return delegate().submit();
+    public FluentFuture<? extends CommitInfo> commit() {
+        return delegate().commit();
     }
-
 }
index 74f1fe870b2e4f9305caf1d8e17660ad0dd3315a..caed2264f36b0dcd290aecf83833378843f58c12 100644 (file)
@@ -42,9 +42,9 @@ public class ForwardingDOMDataWriteTransactionTest extends ForwardingDOMDataWrit
         this.delete(null, null);
         verify(domDataTreeWriteTransaction).delete(null, null);
 
-        doReturn(null).when(domDataTreeWriteTransaction).submit();
-        this.submit();
-        verify(domDataTreeWriteTransaction).submit();
+        doReturn(null).when(domDataTreeWriteTransaction).commit();
+        this.commit();
+        verify(domDataTreeWriteTransaction).commit();
 
         doReturn(false).when(domDataTreeWriteTransaction).cancel();
         this.cancel();
@@ -56,4 +56,4 @@ public class ForwardingDOMDataWriteTransactionTest extends ForwardingDOMDataWrit
     protected DOMDataTreeWriteTransaction delegate() {
         return domDataTreeWriteTransaction;
     }
-}
\ No newline at end of file
+}