X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FLeader.java;h=827364c29faeefd03149b5b65777195ca3afa5d6;hp=36e9b646e66f069504e8d220ceafb80bdc0a1b6a;hb=a0b8be5ce48c0d1e0b573d1952211913c58d4935;hpb=f276ae33b951d173b51c467bb7bb1a5f5cf9a1e6 diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java index 36e9b646e6..827364c29f 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java @@ -19,7 +19,7 @@ import org.opendaylight.controller.cluster.raft.FollowerLogInformation; import org.opendaylight.controller.cluster.raft.RaftActorContext; import org.opendaylight.controller.cluster.raft.RaftActorLeadershipTransferCohort; import org.opendaylight.controller.cluster.raft.RaftState; -import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout; +import org.opendaylight.controller.cluster.raft.base.messages.TimeoutNow; import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply; /** @@ -55,8 +55,12 @@ public class Leader extends AbstractLeader { private final Stopwatch isolatedLeaderCheck = Stopwatch.createStarted(); private @Nullable LeadershipTransferContext leadershipTransferContext; + Leader(RaftActorContext context, @Nullable AbstractLeader initializeFromLeader) { + super(context, RaftState.Leader, initializeFromLeader); + } + public Leader(RaftActorContext context) { - super(context, RaftState.Leader); + this(context, null); } @Override @@ -67,7 +71,7 @@ public class Leader extends AbstractLeader { if (isLeaderIsolated()) { LOG.warn("{}: At least {} followers need to be active, Switching {} from Leader to IsolatedLeader", context.getId(), getMinIsolatedLeaderPeerCount(), getLeaderId()); - return internalSwitchBehavior(RaftState.IsolatedLeader); + return internalSwitchBehavior(new IsolatedLeader(context, this)); } else { return this; } @@ -147,9 +151,9 @@ public class Leader extends AbstractLeader { // additional AppendEntries with the latest commit index. sendAppendEntries(0, false); - // Now send an ElectionTimeout to the matching follower to immediately start an election. + // Now send a TimeoutNow message to the matching follower to immediately start an election. ActorSelection followerActor = context.getPeerActorSelection(followerId); - followerActor.tell(ElectionTimeout.INSTANCE, context.getActor()); + followerActor.tell(TimeoutNow.INSTANCE, context.getActor()); LOG.debug("{}: Leader transfer complete", logName()); @@ -161,7 +165,9 @@ public class Leader extends AbstractLeader { @Override public void close() { if(leadershipTransferContext != null) { - leadershipTransferContext.transferCohort.abortTransfer(); + LeadershipTransferContext localLeadershipTransferContext = leadershipTransferContext; + leadershipTransferContext = null; + localLeadershipTransferContext.transferCohort.abortTransfer(); } super.close();