BUG-2138: Add shard DTO classes to spi
[mdsal.git] / dom / mdsal-dom-inmemory-datastore / src / main / java / org / opendaylight / mdsal / dom / store / inmemory / ForeignShardThreePhaseCommitCohort.java
index 6516b17d51957ca6cabe8bb690168f798977c462..324a8be5404e1b791b2817197bd959a0aa6f4bbf 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.mdsal.dom.store.inmemory;
 
+import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
@@ -20,36 +21,40 @@ public class ForeignShardThreePhaseCommitCohort implements DOMStoreThreePhaseCom
 
     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;
 
     public ForeignShardThreePhaseCommitCohort(final DOMDataTreeIdentifier prefix,
             final ForeignShardModificationContext shard) {
-        this.prefix = prefix;
-        this.shard = shard;
+        this.prefix = Preconditions.checkNotNull(prefix);
+        this.shard = Preconditions.checkNotNull(shard);
     }
 
     @Override
     public ListenableFuture<Boolean> canCommit() {
         LOG.debug("Validating transaction on foreign shard {}", prefix);
-        return shard.validate();
+        return shard.isModified() ? shard.validate() : SUCCESS_VALIDATE;
     }
 
     @Override
     public ListenableFuture<Void> preCommit() {
         LOG.debug("Preparing transaction on foreign shard {}", prefix);
-        return shard.prepare();
+        return shard.isModified() ? shard.prepare() : SUCCESS_FUTURE;
     }
 
     @Override
     public ListenableFuture<Void> abort() {
-        // FIXME abort on the shard
+        LOG.debug("Aborting transaction of foreign shard {}", prefix);
+        shard.closeForeignTransaction();
         return Futures.immediateFuture(null);
     }
 
     @Override
     public ListenableFuture<Void> commit() {
         LOG.debug("Submitting transaction on foreign shard {}", prefix);
-        return shard.submit();
+        return shard.isModified() ? shard.submit() : SUCCESS_FUTURE;
     }
 }
\ No newline at end of file