Repository: incubator-ratis
Updated Branches:
  refs/heads/master 9f93037a9 -> 0f7169db5


RATIS-153. AsyncAppendEntries misses updating followerstate at end of logsync. 
Contributed by Mukul Kumar Singh.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/0f7169db
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/0f7169db
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/0f7169db

Branch: refs/heads/master
Commit: 0f7169db51ba15108c265b1e937e9daeaa085045
Parents: 9f93037
Author: Mukul Kumar Singh <[email protected]>
Authored: Mon Jan 22 12:59:31 2018 +0530
Committer: Mukul Kumar Singh <[email protected]>
Committed: Mon Jan 22 12:59:31 2018 +0530

----------------------------------------------------------------------
 .../ratis/server/impl/RaftServerImpl.java       | 22 ++++++++++++--------
 1 file changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/0f7169db/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
----------------------------------------------------------------------
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
index b58ffdb..44499be 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
@@ -795,14 +795,6 @@ public class RaftServerImpl implements RaftServerProtocol, 
RaftServerAsynchronou
       CodeInjectionForTesting.execute(RaftLog.LOG_SYNC, getId(), null);
       nextIndex = entries[entries.length - 1].getIndex() + 1;
     }
-    synchronized (this) {
-      if (lifeCycle.getCurrentState() == RUNNING && isFollower()
-          && getState().getCurrentTerm() == currentTerm) {
-        // reset election timer to avoid punishing the leader for our own
-        // long disk writes
-        heartbeatMonitor.updateLastRpcTime(false);
-      }
-    }
     final AppendEntriesReplyProto reply = 
ServerProtoUtils.toAppendEntriesReplyProto(
         leaderId, getId(), groupId, currentTerm, nextIndex, SUCCESS);
     logAppendEntries(isHeartbeat,
@@ -810,7 +802,19 @@ public class RaftServerImpl implements RaftServerProtocol, 
RaftServerAsynchronou
             + ServerProtoUtils.toString(reply));
     return CompletableFuture
         .allOf(futures.toArray(new CompletableFuture[futures.size()]))
-        .thenApply(v -> reply);
+        .thenApply(v -> {
+          // reset election timer to avoid punishing the leader for our own
+          // long disk writes
+          synchronized (this) {
+            if (lifeCycle.getCurrentState() == RUNNING && isFollower()
+                && getState().getCurrentTerm() == currentTerm) {
+              // reset election timer to avoid punishing the leader for our own
+              // long disk writes
+              heartbeatMonitor.updateLastRpcTime(false);
+            }
+          }
+          return reply;
+        });
   }
 
   private boolean containPrevious(TermIndex previous) {

Reply via email to