X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcds-access-client%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Faccess%2Fclient%2FAbstractClientActor.java;h=98edb1d3419dbde6e97352c964f143f10558bfcb;hb=HEAD;hp=2fb4c943079527f489cbaeb609b5c10ee9c6b8d3;hpb=0d05ea3fd79780e2526d9f049d2500825b629955;p=controller.git diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java index 2fb4c94307..bed5ffc35c 100644 --- a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java @@ -9,25 +9,21 @@ package org.opendaylight.controller.cluster.access.client; import akka.actor.ActorRef; import akka.actor.PoisonPill; -import akka.persistence.UntypedPersistentActor; -import com.google.common.annotations.Beta; +import akka.persistence.AbstractPersistentActor; import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Frontend actor which takes care of persisting generations and creates an appropriate ClientIdentifier. - * - * @author Robert Varga */ -@Beta -public abstract class AbstractClientActor extends UntypedPersistentActor { +public abstract class AbstractClientActor extends AbstractPersistentActor { private static final Logger LOG = LoggerFactory.getLogger(AbstractClientActor.class); + private AbstractClientActorBehavior currentBehavior; protected AbstractClientActor(final FrontendIdentifier frontendId) { - currentBehavior = new RecoveringClientActorBehavior( - new InitialClientActorContext(this, frontendId.toPersistentId()), frontendId); + currentBehavior = new RecoveringClientActorBehavior(this, frontendId); } @Override @@ -35,6 +31,15 @@ public abstract class AbstractClientActor extends UntypedPersistentActor { return currentBehavior.persistenceId(); } + @Override + public void postStop() throws Exception { + if (currentBehavior != null) { + currentBehavior.close(); + } + + super.postStop(); + } + private void switchBehavior(final AbstractClientActorBehavior nextBehavior) { if (!currentBehavior.equals(nextBehavior)) { if (nextBehavior == null) { @@ -44,12 +49,22 @@ public abstract class AbstractClientActor extends UntypedPersistentActor { LOG.debug("{}: switched from {} to {}", persistenceId(), currentBehavior, nextBehavior); } + currentBehavior.close(); currentBehavior = nextBehavior; } } @Override - public final void onReceiveCommand(final Object command) { + public Receive createReceive() { + return receiveBuilder().matchAny(this::onReceiveCommand).build(); + } + + @Override + public Receive createReceiveRecover() { + return receiveBuilder().matchAny(this::onReceiveRecover).build(); + } + + private void onReceiveCommand(final Object command) { if (command == null) { LOG.debug("{}: ignoring null command", persistenceId()); return; @@ -62,8 +77,7 @@ public abstract class AbstractClientActor extends UntypedPersistentActor { } } - @Override - public final void onReceiveRecover(final Object recover) { + private void onReceiveRecover(final Object recover) { switchBehavior(currentBehavior.onReceiveRecover(recover)); }