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%2FFollower.java;h=974ec475856af94f6e36ad367b7cf555d71354bd;hp=d4755e63586f564cd71d106529cef910074b8cba;hb=a93bcbe711f66ef6ec7bc97972f108859c87a11e;hpb=4f14faf543088e101a8b3d234a30f4d6b3d68d77 diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java index d4755e6358..974ec47585 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java @@ -147,7 +147,7 @@ public class Follower extends AbstractRaftActorBehavior { int addEntriesFrom = 0; if (context.getReplicatedLog().size() > 0) { - // Find the entry up until which the one that is not in the follower's log + // Find the entry up until the one that is not in the follower's log for (int i = 0;i < appendEntries.getEntries().size(); i++, addEntriesFrom++) { ReplicatedLogEntry matchEntry = appendEntries.getEntries().get(i); ReplicatedLogEntry newEntry = context.getReplicatedLog().get(matchEntry.getIndex()); @@ -161,12 +161,19 @@ public class Follower extends AbstractRaftActorBehavior { continue; } - LOG.debug("{}: Removing entries from log starting at {}", logName(), + if(!context.getRaftPolicy().applyModificationToStateBeforeConsensus()) { + + LOG.debug("{}: Removing entries from log starting at {}", logName(), matchEntry.getIndex()); - // Entries do not match so remove all subsequent entries - context.getReplicatedLog().removeFromAndPersist(matchEntry.getIndex()); - break; + // Entries do not match so remove all subsequent entries + context.getReplicatedLog().removeFromAndPersist(matchEntry.getIndex()); + break; + } else { + sender.tell(new AppendEntriesReply(context.getId(), currentTerm(), false, lastIndex, + lastTerm(), context.getPayloadVersion(), true), actor()); + return this; + } } } @@ -313,7 +320,7 @@ public class Follower extends AbstractRaftActorBehavior { if (message instanceof ElectionTimeout) { LOG.debug("{}: Received ElectionTimeout - switching to Candidate", logName()); - return switchBehavior(new Candidate(context)); + return internalSwitchBehavior(RaftState.Candidate); } else if (message instanceof InstallSnapshot) { InstallSnapshot installSnapshot = (InstallSnapshot) message;