We check for RaftState.Leader twice in an if/else chain. Check for non-Leader
first and bail early, leaving a simple if/else to handle the leader case.
Change-Id: I26e2821b0e3ab86f1fd50625ddd1a0ad6ae3b3be
Signed-off-by: Robert Varga <rovarga@cisco.com>
shuttingDown = true;
final RaftActorBehavior currentBehavior = context.getCurrentBehavior();
shuttingDown = true;
final RaftActorBehavior currentBehavior = context.getCurrentBehavior();
- if(currentBehavior.state() == RaftState.Leader && context.hasFollowers()) {
+ if (currentBehavior.state() != RaftState.Leader) {
+ // For non-leaders shutdown is a no-op
+ self().tell(PoisonPill.getInstance(), self());
+ return;
+ }
+
+ if (context.hasFollowers()) {
initiateLeadershipTransfer(new RaftActorLeadershipTransferCohort.OnComplete() {
@Override
public void onSuccess(ActorRef raftActorRef, ActorRef replyTo) {
initiateLeadershipTransfer(new RaftActorLeadershipTransferCohort.OnComplete() {
@Override
public void onSuccess(ActorRef raftActorRef, ActorRef replyTo) {
raftActorRef.tell(PoisonPill.getInstance(), raftActorRef);
}
});
raftActorRef.tell(PoisonPill.getInstance(), raftActorRef);
}
});
- } else if(currentBehavior.state() == RaftState.Leader) {
pauseLeader(new TimedRunnable(context.getConfigParams().getElectionTimeOutInterval(), this) {
@Override
protected void doRun() {
pauseLeader(new TimedRunnable(context.getConfigParams().getElectionTimeOutInterval(), this) {
@Override
protected void doRun() {
self().tell(PoisonPill.getInstance(), self());
}
});
self().tell(PoisonPill.getInstance(), self());
}
});
- } else {
- self().tell(PoisonPill.getInstance(), self());