This is an automated email from the ASF dual-hosted git repository. williamsong pushed a commit to branch snapshot-3 in repository https://gitbox.apache.org/repos/asf/ratis.git
commit 8eafc4f9f8abaffb8ce5683a7d2894fe68cdbcba 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 708b499cd..26584f788 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 @@ -139,6 +139,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()); } @@ -330,9 +338,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 4936525cb..eff49b411 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 @@ -263,7 +263,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)); } } } @@ -518,7 +518,7 @@ public final class SegmentedRaftLog extends RaftLogBase { cacheEviction.signal(); } } - return purgeImpl(lastSnapshotIndex); + return purgeImpl(lastSnapshotIndex).whenComplete((purged, e) -> updatePurgeIndex(purged)); } @Override
