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 8913a999d RATIS-2056. Update purge index when snapshot installed. 
(#1065)
8913a999d is described below

commit 8913a999dd79cda58d18e17f4dd7971dda7070b7
Author: William Song <[email protected]>
AuthorDate: Sat Apr 13 02:05:11 2024 +0800

    RATIS-2056. Update purge index when snapshot installed. (#1065)
---
 .../java/org/apache/ratis/server/raftlog/RaftLogBase.java    | 12 +++++++++---
 .../ratis/server/raftlog/segmented/SegmentedRaftLog.java     |  4 ++--
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java 
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java
index 9e079564f..a41d90b1a 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java
@@ -142,6 +142,14 @@ public abstract class RaftLogBase implements RaftLog {
     return false;
   }
 
+  protected void updatePurgeIndex(Long purged) {
+    try (AutoCloseableLock writeLock = writeLock()) {
+      if (purged != null) {
+        purgeIndex.updateToMax(purged, infoIndexChange);
+      }
+    }
+  }
+
   protected void updateSnapshotIndexFromStateMachine() {
       updateSnapshotIndex(getSnapshotIndexFromStateMachine.getAsLong());
   }
@@ -340,9 +348,7 @@ public abstract class RaftLogBase implements RaftLog {
     LOG.info("{}: purge {}", getName(), suggestedIndex);
     final long finalSuggestedIndex = suggestedIndex;
     return purgeImpl(suggestedIndex).whenComplete((purged, e) -> {
-      if (purged != null) {
-        purgeIndex.updateToMax(purged, infoIndexChange);
-      }
+      updatePurgeIndex(purged);
       if (e != null) {
         LOG.warn(getName() + ": Failed to purge " + finalSuggestedIndex, e);
       }
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
index 8d972a1e2..7f9ef3098 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
@@ -272,7 +272,7 @@ public final class SegmentedRaftLog extends RaftLogBase {
       if (!cache.isEmpty() && cache.getEndIndex() < lastIndexInSnapshot) {
         LOG.warn("End log index {} is smaller than last index in snapshot {}",
             cache.getEndIndex(), lastIndexInSnapshot);
-        purgeImpl(lastIndexInSnapshot);
+        purgeImpl(lastIndexInSnapshot).whenComplete((purged, e) -> 
updatePurgeIndex(purged));
       }
     }
   }
@@ -557,7 +557,7 @@ public final class SegmentedRaftLog extends RaftLogBase {
         cacheEviction.signal();
       }
     }
-    return purgeImpl(lastSnapshotIndex);
+    return purgeImpl(lastSnapshotIndex).whenComplete((purged, e) -> 
updatePurgeIndex(purged));
   }
 
   @Override

Reply via email to