@VisibleForTesting
static final Object ISOLATED_LEADER_CHECK = new Object();
- private final Stopwatch isolatedLeaderCheck;
+ private final Stopwatch isolatedLeaderCheck = Stopwatch.createStarted();
private @Nullable LeadershipTransferContext leadershipTransferContext;
public Leader(RaftActorContext context) {
super(context, RaftState.Leader);
- isolatedLeaderCheck = Stopwatch.createStarted();
}
@Override
public RaftActorBehavior handleMessage(ActorRef sender, Object originalMessage) {
Preconditions.checkNotNull(sender, "sender should not be null");
- if (ISOLATED_LEADER_CHECK.equals(originalMessage) && isLeaderIsolated()) {
- LOG.warn("{}: At least {} followers need to be active, Switching {} from Leader to IsolatedLeader",
- context.getId(), getMinIsolatedLeaderPeerCount(), leaderId);
-
- return internalSwitchBehavior(RaftState.IsolatedLeader);
+ if (ISOLATED_LEADER_CHECK.equals(originalMessage)) {
+ if (isLeaderIsolated()) {
+ LOG.warn("{}: At least {} followers need to be active, Switching {} from Leader to IsolatedLeader",
+ context.getId(), getMinIsolatedLeaderPeerCount(), getLeaderId());
+ return internalSwitchBehavior(RaftState.IsolatedLeader);
+ } else {
+ return this;
+ }
+ } else {
+ return super.handleMessage(sender, originalMessage);
}
-
- return super.handleMessage(sender, originalMessage);
}
@Override