You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sz...@apache.org on 2023/04/27 17:10:06 UTC

[ratis] branch master updated: RATIS-1838. Compare commit index with last included index when installSnapshot (#878)

This is an automated email from the ASF dual-hosted git repository.

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new 197252212 RATIS-1838. Compare commit index with last included index when installSnapshot (#878)
197252212 is described below

commit 19725221286da5d56d7dd9efc4070b48d6f8ae6d
Author: William Song <48...@users.noreply.github.com>
AuthorDate: Fri Apr 28 01:09:57 2023 +0800

    RATIS-1838. Compare commit index with last included index when installSnapshot (#878)
---
 .../apache/ratis/server/impl/SnapshotInstallationHandler.java  | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/SnapshotInstallationHandler.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/SnapshotInstallationHandler.java
index abb398367..334ef3059 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/SnapshotInstallationHandler.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/SnapshotInstallationHandler.java
@@ -157,7 +157,7 @@ class SnapshotInstallationHandler {
     final InstallSnapshotRequestProto.SnapshotChunkProto snapshotChunkRequest = request.getSnapshotChunk();
     final TermIndex lastIncluded = TermIndex.valueOf(snapshotChunkRequest.getTermIndex());
     final long lastIncludedIndex = lastIncluded.getIndex();
-    synchronized (this) {
+    synchronized (server) {
       final boolean recognized = state.recognizeLeader(leaderId, leaderTerm);
       currentTerm = state.getCurrentTerm();
       if (!recognized) {
@@ -174,9 +174,9 @@ class SnapshotInstallationHandler {
         // Check and append the snapshot chunk. We simply put this in lock
         // considering a follower peer requiring a snapshot installation does not
         // have a lot of requests
-        Preconditions.assertTrue(state.getLog().getNextIndex() <= lastIncludedIndex,
-            "%s log's next id is %s, last included index in snapshot is %s",
-            getMemberId(), state.getLog().getNextIndex(), lastIncludedIndex);
+        Preconditions.assertTrue(state.getLog().getLastCommittedIndex() < lastIncludedIndex,
+            "%s log's commit index is %s, last included index in snapshot is %s",
+            getMemberId(), state.getLog().getLastCommittedIndex(), lastIncludedIndex);
 
         //TODO: We should only update State with installed snapshot once the request is done.
         state.installSnapshot(request);
@@ -204,7 +204,7 @@ class SnapshotInstallationHandler {
     final TermIndex firstAvailableLogTermIndex = TermIndex.valueOf(
         request.getNotification().getFirstAvailableTermIndex());
     final long firstAvailableLogIndex = firstAvailableLogTermIndex.getIndex();
-    synchronized (this) {
+    synchronized (server) {
       final boolean recognized = state.recognizeLeader(leaderId, leaderTerm);
       currentTerm = state.getCurrentTerm();
       if (!recognized) {