BUG 2185 : Introduce RaftPolicy & DefaultRaftPolicy
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / behaviors / Follower.java
index a6722e6ff98dbbe9ab68df6c9e04915c23c8721a..ede0f6af2c9cb11ce005aa76a9a047b97ef5d29c 100644 (file)
@@ -48,10 +48,12 @@ public class Follower extends AbstractRaftActorBehavior {
 
         initialSyncStatusTracker = new InitialSyncStatusTracker(context.getActor());
 
-        if(context.getPeerAddresses().isEmpty()){
-            actor().tell(ELECTION_TIMEOUT, actor());
-        } else {
-            scheduleElection(electionDuration());
+        if(context.getRaftPolicy().automaticElectionsEnabled()) {
+            if (context.getPeerAddresses().isEmpty()) {
+                actor().tell(ELECTION_TIMEOUT, actor());
+            } else {
+                scheduleElection(electionDuration());
+            }
         }
 
     }
@@ -104,7 +106,7 @@ public class Follower extends AbstractRaftActorBehavior {
         if (snapshotTracker != null) {
             // if snapshot install is in progress, follower should just acknowledge append entries with a reply.
             AppendEntriesReply reply = new AppendEntriesReply(context.getId(), currentTerm(), true,
-                    lastIndex(), lastTerm());
+                    lastIndex(), lastTerm(), context.getPayloadVersion());
 
             if(LOG.isDebugEnabled()) {
                 LOG.debug("{}: snapshot install is in progress, replying immediately with {}", logName(), reply);
@@ -120,6 +122,8 @@ public class Follower extends AbstractRaftActorBehavior {
         // If we got here then we do appear to be talking to the leader
         leaderId = appendEntries.getLeaderId();
 
+        setLeaderPayloadVersion(appendEntries.getPayloadVersion());
+
         // 2. Reply false if log doesn’t contain an entry at prevLogIndex
         // whose term matches prevLogTerm (§5.3)
 
@@ -168,7 +172,7 @@ public class Follower extends AbstractRaftActorBehavior {
                         logName(), lastIndex, lastTerm());
 
             sender.tell(new AppendEntriesReply(context.getId(), currentTerm(), false, lastIndex,
-                    lastTerm()), actor());
+                    lastTerm(), context.getPayloadVersion()), actor());
             return this;
         }
 
@@ -250,7 +254,7 @@ public class Follower extends AbstractRaftActorBehavior {
         }
 
         AppendEntriesReply reply = new AppendEntriesReply(context.getId(), currentTerm(), true,
-            lastIndex, lastTerm());
+            lastIndex, lastTerm(), context.getPayloadVersion());
 
         if(LOG.isTraceEnabled()) {
             LOG.trace("{}: handleAppendEntries returning : {}", logName(), reply);