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();