X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDataTreeCohortActor.java;h=da1117764f8b8146ef7f8f49e22bcc7f2ef64d8b;hb=806ca77eb8f5c6a7de07f5f6a0f2b3d234752050;hp=485e8b5c2496711506cec4459708067e849cd6d7;hpb=1d3c54640b9fff649fe8d0f57e20d56f8f936cc1;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActor.java index 485e8b5c24..da1117764f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActor.java @@ -12,32 +12,37 @@ import akka.actor.ActorRef; import akka.actor.Props; import akka.actor.Status; import com.google.common.base.Preconditions; +import java.util.Collection; +import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; import org.opendaylight.mdsal.common.api.PostCanCommitStep; import org.opendaylight.mdsal.common.api.PostPreCommitStep; import org.opendaylight.mdsal.common.api.ThreePhaseCommitStep; import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Proxy actor which acts as a facade to the user-provided commit cohort. Responsible for * decapsulating DataTreeChanged messages and dispatching their context to the user. */ final class DataTreeCohortActor extends AbstractUntypedActor { - private static final Logger LOG = LoggerFactory.getLogger(DataTreeCohortActor.class); private final CohortBehaviour idleState = new Idle(); private final DOMDataTreeCommitCohort cohort; + private final YangInstanceIdentifier registeredPath; private CohortBehaviour currentState = idleState; - private DataTreeCohortActor(final DOMDataTreeCommitCohort cohort) { + private DataTreeCohortActor(final DOMDataTreeCommitCohort cohort, final YangInstanceIdentifier registeredPath) { this.cohort = Preconditions.checkNotNull(cohort); + this.registeredPath = Preconditions.checkNotNull(registeredPath); } @Override protected void handleReceive(final Object message) { + LOG.debug("handleReceive for cohort {} - currentState: {}, message: {}", cohort.getClass().getName(), + currentState, message); + currentState = currentState.handle(message); } @@ -47,34 +52,40 @@ final class DataTreeCohortActor extends AbstractUntypedActor { * * @param Reply message type */ - static abstract class CommitProtocolCommand { + abstract static class CommitProtocolCommand { - private final String txId; + private final TransactionIdentifier txId; - final String getTxId() { + final TransactionIdentifier getTxId() { return txId; } - protected CommitProtocolCommand(String txId) { + protected CommitProtocolCommand(TransactionIdentifier txId) { this.txId = Preconditions.checkNotNull(txId); } + + @Override + public String toString() { + return getClass().getSimpleName() + " [txId=" + txId + "]"; + } } static final class CanCommit extends CommitProtocolCommand { - private final DOMDataTreeCandidate candidate; + private final Collection candidates; private final ActorRef cohort; private final SchemaContext schema; - CanCommit(String txId, DOMDataTreeCandidate candidate, SchemaContext schema, ActorRef cohort) { + CanCommit(TransactionIdentifier txId, Collection candidates, SchemaContext schema, + ActorRef cohort) { super(txId); this.cohort = Preconditions.checkNotNull(cohort); - this.candidate = Preconditions.checkNotNull(candidate); + this.candidates = Preconditions.checkNotNull(candidates); this.schema = Preconditions.checkNotNull(schema); } - DOMDataTreeCandidate getCandidate() { - return candidate; + Collection getCandidates() { + return candidates; } SchemaContext getSchema() { @@ -85,14 +96,18 @@ final class DataTreeCohortActor extends AbstractUntypedActor { return cohort; } + @Override + public String toString() { + return "CanCommit [txId=" + getTxId() + ", candidates=" + candidates + ", cohort=" + cohort + "]"; + } } - static abstract class CommitReply { + abstract static class CommitReply { private final ActorRef cohortRef; - private final String txId; + private final TransactionIdentifier txId; - protected CommitReply(ActorRef cohortRef, String txId) { + protected CommitReply(ActorRef cohortRef, TransactionIdentifier txId) { this.cohortRef = Preconditions.checkNotNull(cohortRef); this.txId = Preconditions.checkNotNull(txId); } @@ -101,42 +116,45 @@ final class DataTreeCohortActor extends AbstractUntypedActor { return cohortRef; } - final String getTxId() { + final TransactionIdentifier getTxId() { return txId; } + @Override + public String toString() { + return getClass().getSimpleName() + " [txId=" + txId + ", cohortRef=" + cohortRef + "]"; + } } static final class Success extends CommitReply { - public Success(ActorRef cohortRef, String txId) { + Success(ActorRef cohortRef, TransactionIdentifier txId) { super(cohortRef, txId); } - } static final class PreCommit extends CommitProtocolCommand { - public PreCommit(String txId) { + PreCommit(TransactionIdentifier txId) { super(txId); } } static final class Abort extends CommitProtocolCommand { - public Abort(String txId) { + Abort(TransactionIdentifier txId) { super(txId); } } static final class Commit extends CommitProtocolCommand { - public Commit(String txId) { + Commit(TransactionIdentifier txId) { super(txId); } } - private static abstract class CohortBehaviour { + private abstract static class CohortBehaviour { abstract Class getHandledMessageType(); @@ -146,13 +164,18 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } else if (message instanceof Abort) { return abort(); } - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException(String.format("Unexpected message %s in cohort behavior %s", + message.getClass(), getClass().getSimpleName())); } abstract CohortBehaviour abort(); abstract CohortBehaviour process(E message); + @Override + public String toString() { + return getClass().getSimpleName(); + } } private class Idle extends CohortBehaviour { @@ -163,10 +186,11 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } @Override + @SuppressWarnings("checkstyle:IllegalCatch") CohortBehaviour process(CanCommit message) { final PostCanCommitStep nextStep; try { - nextStep = cohort.canCommit(message.getTxId(), message.getCandidate(), message.getSchema()).get(); + nextStep = cohort.canCommit(message.getTxId(), message.getCandidates(), message.getSchema()).get(); } catch (final Exception e) { getSender().tell(new Status.Failure(e), getSelf()); return this; @@ -179,7 +203,6 @@ final class DataTreeCohortActor extends AbstractUntypedActor { CohortBehaviour abort() { return this; } - } @@ -187,9 +210,9 @@ final class DataTreeCohortActor extends AbstractUntypedActor { extends CohortBehaviour { private final S step; - private final String txId; + private final TransactionIdentifier txId; - CohortStateWithStep(String txId, S step) { + CohortStateWithStep(TransactionIdentifier txId, S step) { this.txId = Preconditions.checkNotNull(txId); this.step = Preconditions.checkNotNull(step); } @@ -198,11 +221,12 @@ final class DataTreeCohortActor extends AbstractUntypedActor { return step; } - final String getTxId() { + final TransactionIdentifier getTxId() { return txId; } @Override + @SuppressWarnings("checkstyle:IllegalCatch") final CohortBehaviour abort() { try { getStep().abort().get(); @@ -215,11 +239,15 @@ final class DataTreeCohortActor extends AbstractUntypedActor { return idleState; } + @Override + public String toString() { + return getClass().getSimpleName() + " [txId=" + txId + ", step=" + step + "]"; + } } private class PostCanCommit extends CohortStateWithStep { - PostCanCommit(String txId, PostCanCommitStep nextStep) { + PostCanCommit(TransactionIdentifier txId, PostCanCommitStep nextStep) { super(txId, nextStep); } @@ -229,6 +257,7 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } @Override + @SuppressWarnings("checkstyle:IllegalCatch") CohortBehaviour process(PreCommit message) { final PostPreCommitStep nextStep; try { @@ -245,11 +274,12 @@ final class DataTreeCohortActor extends AbstractUntypedActor { private class PostPreCommit extends CohortStateWithStep { - PostPreCommit(String txId, PostPreCommitStep step) { + PostPreCommit(TransactionIdentifier txId, PostPreCommitStep step) { super(txId, step); } @Override + @SuppressWarnings("checkstyle:IllegalCatch") CohortBehaviour process(Commit message) { try { getStep().commit().get(); @@ -268,7 +298,7 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } - static Props props(final DOMDataTreeCommitCohort cohort) { - return Props.create(DataTreeCohortActor.class, cohort); + static Props props(final DOMDataTreeCommitCohort cohort, final YangInstanceIdentifier registeredPath) { + return Props.create(DataTreeCohortActor.class, cohort, registeredPath); } }