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%2FDataTreeCohortActor.java;h=da1117764f8b8146ef7f8f49e22bcc7f2ef64d8b;hp=10ffe1f7b7dd40793820caa078b58be7855a65e1;hb=806ca77eb8f5c6a7de07f5f6a0f2b3d234752050;hpb=4d1709660b7af992d4c382a2a38debb5c7d64fb9 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 10ffe1f7b7..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,6 +12,7 @@ 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; @@ -19,26 +20,29 @@ 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); } @@ -48,7 +52,7 @@ final class DataTreeCohortActor extends AbstractUntypedActor { * * @param Reply message type */ - static abstract class CommitProtocolCommand { + abstract static class CommitProtocolCommand { private final TransactionIdentifier txId; @@ -59,23 +63,29 @@ final class DataTreeCohortActor extends AbstractUntypedActor { 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(TransactionIdentifier 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() { @@ -86,9 +96,13 @@ 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 TransactionIdentifier txId; @@ -105,38 +119,42 @@ final class DataTreeCohortActor extends AbstractUntypedActor { 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, TransactionIdentifier txId) { + Success(ActorRef cohortRef, TransactionIdentifier txId) { super(cohortRef, txId); } - } static final class PreCommit extends CommitProtocolCommand { - public PreCommit(TransactionIdentifier txId) { + PreCommit(TransactionIdentifier txId) { super(txId); } } static final class Abort extends CommitProtocolCommand { - public Abort(TransactionIdentifier txId) { + Abort(TransactionIdentifier txId) { super(txId); } } static final class Commit extends CommitProtocolCommand { - public Commit(TransactionIdentifier 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; } - } @@ -203,6 +226,7 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } @Override + @SuppressWarnings("checkstyle:IllegalCatch") final CohortBehaviour abort() { try { getStep().abort().get(); @@ -215,6 +239,10 @@ final class DataTreeCohortActor extends AbstractUntypedActor { return idleState; } + @Override + public String toString() { + return getClass().getSimpleName() + " [txId=" + txId + ", step=" + step + "]"; + } } private class PostCanCommit extends CohortStateWithStep { @@ -229,6 +257,7 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } @Override + @SuppressWarnings("checkstyle:IllegalCatch") CohortBehaviour process(PreCommit message) { final PostPreCommitStep nextStep; try { @@ -250,6 +279,7 @@ final class DataTreeCohortActor extends AbstractUntypedActor { } @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); } }