Fix InMemory shard transaction chaining.
[mdsal.git] / dom / mdsal-dom-inmemory-datastore / src / main / java / org / opendaylight / mdsal / dom / store / inmemory / ShardCommitCoordinationTask.java
index 76318212192326103ea31e2a02279067d1e1ec52..a6adbb675f3f3acbfe7b786d32b5926edb6f86a6 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.mdsal.dom.store.inmemory;
 
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collection;
 import java.util.concurrent.Callable;
@@ -18,17 +20,24 @@ import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class ShardCommitCoordinationTask implements Callable<Void> {
+/**
+ * Task that coordinates the Commit phase of the provided {@link DOMStoreThreePhaseCommitCohort}'s.
+ */
+@Beta
+public class ShardCommitCoordinationTask implements Callable<Void> {
 
     private static final Logger LOG = LoggerFactory.getLogger(ShardCommitCoordinationTask.class);
 
     private final DOMDataTreeIdentifier rootShardPrefix;
     private final Collection<DOMStoreThreePhaseCommitCohort> cohorts;
+    private InmemoryDOMDataTreeShardWriteTransaction transaction;
 
-    ShardCommitCoordinationTask(final DOMDataTreeIdentifier rootShardPrefix,
-                                       final Collection<DOMStoreThreePhaseCommitCohort> cohorts) {
-        this.rootShardPrefix = rootShardPrefix;
-        this.cohorts = cohorts;
+    public ShardCommitCoordinationTask(final DOMDataTreeIdentifier rootShardPrefix,
+                                       final Collection<DOMStoreThreePhaseCommitCohort> cohorts,
+                                       final InmemoryDOMDataTreeShardWriteTransaction transaction) {
+        this.rootShardPrefix = Preconditions.checkNotNull(rootShardPrefix);
+        this.cohorts = Preconditions.checkNotNull(cohorts);
+        this.transaction = Preconditions.checkNotNull(transaction);
     }
 
     @Override
@@ -37,9 +46,10 @@ class ShardCommitCoordinationTask implements Callable<Void> {
         try {
             LOG.debug("Shard {}, commit started", rootShardPrefix);
             commitBlocking();
+            transaction.transactionCommited(transaction);
 
             return null;
-        } catch (TransactionCommitFailedException e) {
+        } catch (final TransactionCommitFailedException e) {
             LOG.warn("Shard: {} Submit Error during phase Commit, starting Abort", rootShardPrefix, e);
             //FIXME abort here
             throw e;
@@ -58,9 +68,9 @@ class ShardCommitCoordinationTask implements Callable<Void> {
 
     private ListenableFuture<?>[] commitAll() {
         final ListenableFuture<?>[] ops = new ListenableFuture<?>[cohorts.size()];
-        int i = 0;
+        int index = 0;
         for (final DOMStoreThreePhaseCommitCohort cohort : cohorts) {
-            ops[i++] = cohort.commit();
+            ops[index++] = cohort.commit();
         }
         return ops;
     }