import org.opendaylight.controller.cluster.raft.RaftActorContext;
import org.opendaylight.controller.cluster.raft.RaftState;
import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
/**
* Leader which is termed as isolated.
import org.opendaylight.controller.cluster.raft.RaftActorContext;
import org.opendaylight.controller.cluster.raft.RaftState;
import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
/**
* Leader which is termed as isolated.
* If the reply from the majority of the followers is not received then the leader changes its behavior
* to IsolatedLeader. An isolated leader may have followers and they would continue to receive replicated messages.
* If the reply from the majority of the followers is not received then the leader changes its behavior
* to IsolatedLeader. An isolated leader may have followers and they would continue to receive replicated messages.
* A schedule is run, at an interval of (10 * Heartbeat-time-interval), in the Leader
* to check if its isolated or not.
* A schedule is run, at an interval of (10 * Heartbeat-time-interval), in the Leader
* to check if its isolated or not.
* In the Isolated Leader , on every AppendEntriesReply, we aggressively check if the leader is isolated.
* If no, then the state is switched back to Leader.
* In the Isolated Leader , on every AppendEntriesReply, we aggressively check if the leader is isolated.
* If no, then the state is switched back to Leader.
// it can happen that this isolated leader interacts with a new leader in the cluster and
// changes its state to Follower, hence we only need to switch to Leader if the state is still Isolated
if (ret.state() == RaftState.IsolatedLeader && !isLeaderIsolated()) {
// it can happen that this isolated leader interacts with a new leader in the cluster and
// changes its state to Follower, hence we only need to switch to Leader if the state is still Isolated
if (ret.state() == RaftState.IsolatedLeader && !isLeaderIsolated()) {
- LOG.info("IsolatedLeader {} switching from IsolatedLeader to Leader", leaderId);
- return internalSwitchBehavior(RaftState.Leader);
+ log.info("IsolatedLeader {} switching from IsolatedLeader to Leader", getLeaderId());
+ return internalSwitchBehavior(new Leader(context, this));