X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardDataTreeCohort.java;h=77b8db92099df0a2e3b014530de87f288983a1cb;hp=213e36a570ce1c445e11f8d6e175b37abf9a7388;hb=118cd0216b0c6b0ec1a01689ec2025a13e090861;hpb=dd174b7754c8ab975b6dd37d1891eafa3abba115 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeCohort.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeCohort.java index 213e36a570..77b8db9209 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeCohort.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeCohort.java @@ -8,22 +8,69 @@ package org.opendaylight.controller.cluster.datastore; import com.google.common.annotations.VisibleForTesting; -import com.google.common.util.concurrent.ListenableFuture; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateTip; +import com.google.common.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; +import com.google.common.primitives.UnsignedLong; +import com.google.common.util.concurrent.FutureCallback; +import java.util.Optional; +import java.util.SortedSet; +import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; +import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.common.Empty; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateTip; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; + +@VisibleForTesting +public abstract class ShardDataTreeCohort implements Identifiable { + public enum State { + READY, + CAN_COMMIT_PENDING, + CAN_COMMIT_COMPLETE, + PRE_COMMIT_PENDING, + PRE_COMMIT_COMPLETE, + COMMIT_PENDING, + + ABORTED, + COMMITTED, + FAILED, + } -public abstract class ShardDataTreeCohort { ShardDataTreeCohort() { // Prevent foreign instantiation } + // FIXME: This leaks internal state generated in preCommit, + // should be result of canCommit abstract DataTreeCandidateTip getCandidate(); + abstract DataTreeModification getDataTreeModification(); + + abstract Optional> getParticipatingShardNames(); + + // FIXME: Should return rebased DataTreeCandidateTip @VisibleForTesting - public abstract ListenableFuture canCommit(); + public abstract void canCommit(FutureCallback callback); + @VisibleForTesting - public abstract ListenableFuture preCommit(); + public abstract void preCommit(FutureCallback callback); + @VisibleForTesting - public abstract ListenableFuture abort(); + public abstract void abort(FutureCallback callback); + @VisibleForTesting - public abstract ListenableFuture commit(); + public abstract void commit(FutureCallback callback); + + public abstract boolean isFailed(); + + public abstract State getState(); + + @Override + public final String toString() { + return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); + } + + ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return toStringHelper.add("id", getIdentifier()).add("state", getState()); + } }