Skip to content

Commit 55a1423

Browse files
authored
Do not keep 5.x commits once having 6.x commits (#28188)
Currently we keep a 5.x index commit as a safe commit until we have a 6.x safe commit. During that time, if peer-recovery happens, a primary will send a 5.x commit in file-based sync and the recovery will even fail as the snapshotted commit does not have sequence number tags. This commit updates the combined deletion policy to delete legacy commits if there are 6.x commits. Relates #27606 Relates #28038
1 parent 99f88f1 commit 55a1423

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

server/src/main/java/org/elasticsearch/index/engine/CombinedDeletionPolicy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,9 @@ private static int indexOfKeptCommits(List<? extends IndexCommit> commits, long
160160
if (expectedTranslogUUID.equals(commitUserData.get(Translog.TRANSLOG_UUID_KEY)) == false) {
161161
return i + 1;
162162
}
163-
// 5.x commits do not contain MAX_SEQ_NO.
163+
// 5.x commits do not contain MAX_SEQ_NO, we should not keep it and the older commits.
164164
if (commitUserData.containsKey(SequenceNumbers.MAX_SEQ_NO) == false) {
165-
return i;
165+
return Math.min(commits.size() - 1, i + 1);
166166
}
167167
final long maxSeqNoFromCommit = Long.parseLong(commitUserData.get(SequenceNumbers.MAX_SEQ_NO));
168168
if (maxSeqNoFromCommit <= globalCheckpoint) {

server/src/test/java/org/elasticsearch/index/engine/CombinedDeletionPolicyTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,15 +171,15 @@ public void testLegacyIndex() throws Exception {
171171

172172
globalCheckpoint.set(randomLongBetween(0, maxSeqNo - 1));
173173
indexPolicy.onCommit(Arrays.asList(legacyCommit, freshCommit));
174-
verify(legacyCommit, times(0)).delete();
174+
verify(legacyCommit, times(1)).delete(); // Do not keep the legacy commit once we have a new commit.
175175
verify(freshCommit, times(0)).delete();
176-
assertThat(translogPolicy.getMinTranslogGenerationForRecovery(), equalTo(legacyTranslogGen));
176+
assertThat(translogPolicy.getMinTranslogGenerationForRecovery(), equalTo(safeTranslogGen));
177177
assertThat(translogPolicy.getTranslogGenerationOfLastCommit(), equalTo(safeTranslogGen));
178178

179179
// Make the fresh commit safe.
180180
globalCheckpoint.set(randomLongBetween(maxSeqNo, Long.MAX_VALUE));
181181
indexPolicy.onCommit(Arrays.asList(legacyCommit, freshCommit));
182-
verify(legacyCommit, times(1)).delete();
182+
verify(legacyCommit, times(2)).delete();
183183
verify(freshCommit, times(0)).delete();
184184
assertThat(translogPolicy.getMinTranslogGenerationForRecovery(), equalTo(safeTranslogGen));
185185
assertThat(translogPolicy.getTranslogGenerationOfLastCommit(), equalTo(safeTranslogGen));

0 commit comments

Comments
 (0)