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;
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