Repository: incubator-ratis
Updated Branches:
  refs/heads/master 00f80b446 -> 7a955ef43


RATIS-177. Raft Leader should not return LeaderNotReady Exception for old 
completed requests.  Contributed by Lokesh Jain


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

Branch: refs/heads/master
Commit: 7a955ef438af44de89f031c49ec1bb763361d06a
Parents: 00f80b4
Author: Tsz-Wo Nicholas Sze <[email protected]>
Authored: Fri Jan 5 14:31:17 2018 +0800
Committer: Tsz-Wo Nicholas Sze <[email protected]>
Committed: Fri Jan 5 14:31:17 2018 +0800

----------------------------------------------------------------------
 .../java/org/apache/ratis/server/impl/RaftServerImpl.java    | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/7a955ef4/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 89ea019..d039e6c 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
@@ -367,10 +367,12 @@ public class RaftServerImpl implements RaftServerProtocol,
       NotLeaderException exception = generateNotLeaderException();
       final RaftClientReply reply = new RaftClientReply(request, exception);
       return RetryCache.failWithReply(reply, entry);
-    } else {
-      if (leaderState == null || !leaderState.isReady()) {
-        return RetryCache.failWithException(new 
LeaderNotReadyException(getId()), entry);
+    } else if (leaderState == null || !leaderState.isReady()) {
+      RetryCache.CacheEntry cacheEntry = retryCache.get(request.getClientId(), 
request.getCallId());
+      if (cacheEntry != null && cacheEntry.isCompletedNormally()) {
+        return cacheEntry.getReplyFuture();
       }
+      return RetryCache.failWithException(new 
LeaderNotReadyException(getId()), entry);
     }
     return null;
   }

Reply via email to