Promote ForeignShardThreePhaseCommitCohort to dom.spi 12/90112/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 29 May 2020 19:17:19 +0000 (21:17 +0200)
committerRobert Varga <nite@hq.sk>
Fri, 29 May 2020 20:25:05 +0000 (20:25 +0000)
This class is really a sharding SPI thing, promote it as a beta
construct. This allows us to also promote
AbstractShardModificationFactoryBuilder.

Change-Id: I7d29ecbb691cefb79775d384898905a300e9af47
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransaction.java
dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryShardDataModificationFactoryBuilder.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/AbstractShardModificationFactoryBuilder.java [moved from dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/ShardDataModificationFactoryBuilder.java with 82% similarity]
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardThreePhaseCommitCohort.java [moved from dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/ForeignShardThreePhaseCommitCohort.java with 73% similarity]
dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardThreePhaseCommitCohortTest.java [moved from dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/ForeignShardThreePhaseCommitCohortTest.java with 75% similarity]

index 078299b3f3a6e677f8e93783617f490e9ba3f352..5fe19519798c2993081a80a09743f80a326a86e6 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor;
 import org.opendaylight.mdsal.dom.spi.shard.DOMDataTreeShardWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.shard.ForeignShardModificationContext;
+import org.opendaylight.mdsal.dom.spi.shard.ForeignShardThreePhaseCommitCohort;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
 import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
index e6a5aa2362fc283b434d4891f55c4ee2c422f2e0..5b9478b13948d08c54dcff0f8734f80088e1b84e 100644 (file)
@@ -9,9 +9,10 @@
 package org.opendaylight.mdsal.dom.store.inmemory;
 
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.spi.shard.AbstractShardModificationFactoryBuilder;
 
 class InmemoryShardDataModificationFactoryBuilder
-        extends ShardDataModificationFactoryBuilder<InMemoryShardDataModificationFactory> {
+        extends AbstractShardModificationFactoryBuilder<InMemoryShardDataModificationFactory> {
 
     InmemoryShardDataModificationFactoryBuilder(final DOMDataTreeIdentifier root) {
         super(root);
@@ -5,28 +5,26 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
-package org.opendaylight.mdsal.dom.store.inmemory;
+package org.opendaylight.mdsal.dom.spi.shard;
 
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.annotations.Beta;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
-import org.opendaylight.mdsal.dom.spi.shard.ForeignShardModificationContext;
-import org.opendaylight.mdsal.dom.spi.shard.ModificationContextNodeBuilder;
-import org.opendaylight.mdsal.dom.spi.shard.WriteableSubshardBoundaryNode;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 
-public abstract class ShardDataModificationFactoryBuilder<T> extends ModificationContextNodeBuilder
+@Beta
+public abstract class AbstractShardModificationFactoryBuilder<T> extends ModificationContextNodeBuilder
         implements Builder<T> {
-    protected final DOMDataTreeIdentifier root;
     protected final Map<DOMDataTreeIdentifier, ForeignShardModificationContext> childShards = new HashMap<>();
+    protected final DOMDataTreeIdentifier root;
 
-    public ShardDataModificationFactoryBuilder(final DOMDataTreeIdentifier root) {
+    public AbstractShardModificationFactoryBuilder(final DOMDataTreeIdentifier root) {
         this.root = requireNonNull(root);
     }
 
@@ -39,6 +37,9 @@ public abstract class ShardDataModificationFactoryBuilder<T> extends Modificatio
         childShards.put(prefix, value);
     }
 
+    @Override
+    public abstract T build();
+
     private void putNode(final YangInstanceIdentifier key, final WriteableSubshardBoundaryNode subshardNode) {
         final Iterator<PathArgument> toBoundary = toRelative(key).getPathArguments().iterator();
         if (toBoundary.hasNext()) {
@@ -58,6 +59,4 @@ public abstract class ShardDataModificationFactoryBuilder<T> extends Modificatio
     private YangInstanceIdentifier toRelative(final YangInstanceIdentifier key) {
         return key.relativeTo(root.getRootIdentifier()).get();
     }
-
-    public abstract T build();
 }
@@ -5,26 +5,22 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
-package org.opendaylight.mdsal.dom.store.inmemory;
+package org.opendaylight.mdsal.dom.spi.shard;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.util.concurrent.Futures;
+import com.google.common.annotations.Beta;
 import com.google.common.util.concurrent.ListenableFuture;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
-import org.opendaylight.mdsal.dom.spi.shard.ForeignShardModificationContext;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
+import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Beta
 public class ForeignShardThreePhaseCommitCohort implements DOMStoreThreePhaseCommitCohort {
-
     private static final Logger LOG = LoggerFactory.getLogger(ForeignShardThreePhaseCommitCohort.class);
 
-    private static final ListenableFuture<Boolean> SUCCESS_VALIDATE = Futures.immediateFuture(Boolean.TRUE);
-    private static final ListenableFuture<Void> SUCCESS_FUTURE = Futures.immediateFuture(null);
-
     private final DOMDataTreeIdentifier prefix;
     private final ForeignShardModificationContext shard;
 
@@ -37,25 +33,25 @@ public class ForeignShardThreePhaseCommitCohort implements DOMStoreThreePhaseCom
     @Override
     public ListenableFuture<Boolean> canCommit() {
         LOG.debug("Validating transaction on foreign shard {}", prefix);
-        return shard.isModified() ? shard.validate() : SUCCESS_VALIDATE;
+        return shard.isModified() ? shard.validate() : FluentFutures.immediateTrueFluentFuture();
     }
 
     @Override
     public ListenableFuture<Void> preCommit() {
         LOG.debug("Preparing transaction on foreign shard {}", prefix);
-        return shard.isModified() ? shard.prepare() : SUCCESS_FUTURE;
+        return shard.isModified() ? shard.prepare() : FluentFutures.immediateNullFluentFuture();
     }
 
     @Override
     public ListenableFuture<Void> abort() {
         LOG.debug("Aborting transaction of foreign shard {}", prefix);
         shard.closeForeignTransaction();
-        return SUCCESS_FUTURE;
+        return FluentFutures.immediateNullFluentFuture();
     }
 
     @Override
     public ListenableFuture<Void> commit() {
         LOG.debug("Submitting transaction on foreign shard {}", prefix);
-        return shard.isModified() ? shard.submit() : SUCCESS_FUTURE;
+        return shard.isModified() ? shard.submit() : FluentFutures.immediateNullFluentFuture();
     }
 }
\ No newline at end of file
@@ -5,25 +5,23 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.mdsal.dom.store.inmemory;
+package org.opendaylight.mdsal.dom.spi.shard;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
-import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_IDENTIFIER;
-import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_SHARD_PRODUCER;
-import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_SHARD_WRITE_TRANSACTION;
-import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_WRITE_CURSOR;
-import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.resetMocks;
+import static org.opendaylight.mdsal.dom.spi.shard.TestUtils.DOM_DATA_TREE_IDENTIFIER;
+import static org.opendaylight.mdsal.dom.spi.shard.TestUtils.DOM_DATA_TREE_SHARD_PRODUCER;
+import static org.opendaylight.mdsal.dom.spi.shard.TestUtils.DOM_DATA_TREE_SHARD_WRITE_TRANSACTION;
+import static org.opendaylight.mdsal.dom.spi.shard.TestUtils.DOM_DATA_TREE_WRITE_CURSOR;
+import static org.opendaylight.mdsal.dom.spi.shard.TestUtils.resetMocks;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.mdsal.dom.spi.shard.ForeignShardModificationContext;
 
 public class ForeignShardThreePhaseCommitCohortTest {
-
     @Before
     public void setUp() throws Exception {
         doNothing().when(DOM_DATA_TREE_WRITE_CURSOR).close();
@@ -55,7 +53,7 @@ public class ForeignShardThreePhaseCommitCohortTest {
         foreignShardThreePhaseCommitCohort.commit();
         verify(DOM_DATA_TREE_SHARD_WRITE_TRANSACTION).commit();
 
-        assertEquals(null, foreignShardThreePhaseCommitCohort.abort().get());
+        assertNull(foreignShardThreePhaseCommitCohort.abort().get());
     }
 
     @After