diff --git a/server/src/main/java/org/opensearch/indices/replication/AbstractSegmentReplicationTarget.java b/server/src/main/java/org/opensearch/indices/replication/AbstractSegmentReplicationTarget.java index 2275034f1ec81..5a21b10d04c06 100644 --- a/server/src/main/java/org/opensearch/indices/replication/AbstractSegmentReplicationTarget.java +++ b/server/src/main/java/org/opensearch/indices/replication/AbstractSegmentReplicationTarget.java @@ -162,6 +162,20 @@ public void startReplication(ActionListener listener, BiConsumer { + 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; + } updateCheckpoint(checkpointInfo.getCheckpoint(), checkpointUpdater); final List filesToFetch = getFiles(checkpointInfo); state.setStage(SegmentReplicationState.Stage.GET_FILES);