From ffcb48a9753892ff97df6ee997446afe44047976 Mon Sep 17 00:00:00 2001 From: Ashish Singh Date: Thu, 7 Aug 2025 12:10:54 +0530 Subject: [PATCH] Fix segment replication bug during primary relocation (#18944) * Fix segment replication bug during primary relocation Signed-off-by: Ashish Singh * Fix applicable for segrep local indexes only Signed-off-by: Ashish Singh --------- Signed-off-by: Ashish Singh --- .../replication/SegmentReplicationTarget.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/server/src/main/java/org/opensearch/indices/replication/SegmentReplicationTarget.java b/server/src/main/java/org/opensearch/indices/replication/SegmentReplicationTarget.java index 7131b49a41834..0e41f89d22358 100644 --- a/server/src/main/java/org/opensearch/indices/replication/SegmentReplicationTarget.java +++ b/server/src/main/java/org/opensearch/indices/replication/SegmentReplicationTarget.java @@ -177,6 +177,20 @@ public void startReplication(ActionListener listener) { source.getCheckpointMetadata(getId(), checkpoint, checkpointInfoListener); checkpointInfoListener.whenComplete(checkpointInfo -> { + ReplicationCheckpoint getMetadataCheckpoint = checkpointInfo.getCheckpoint(); + if (indexShard.indexSettings().isSegRepLocalEnabled() && checkpoint.isAheadOf(getMetadataCheckpoint)) { + // Fixes https://github.com/opensearch-project/OpenSearch/issues/18490 + listener.onFailure( + new ReplicationFailedException( + "Rejecting stale metadata checkpoint [" + + getMetadataCheckpoint + + "] since initial checkpoint [" + + checkpoint + + "] is ahead of it" + ) + ); + return; + } final List filesToFetch = getFiles(checkpointInfo); state.setStage(SegmentReplicationState.Stage.GET_FILES); cancellableThreads.checkForCancel();