Skip to content

Commit 5e9b629

Browse files
authored
Fix hard-deletes engine simulation (elastic#50517)
The test "testRecoverFromHardDeletesIndex" failed because the "min_retained_seqno" commit tag exists after we index using a hard-deletes engine. A hard-deletes engine must not create this commit tag; hence we need to remove it in the test. Relates elastic#50415
1 parent 858892f commit 5e9b629

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5464,7 +5464,22 @@ public long softUpdateDocuments(Term term, Iterable<? extends Iterable<? extends
54645464
}
54655465
docs = getDocIds(hardDeletesEngine, true);
54665466
}
5467+
// We need to remove min_retained_seq_no commit tag as the actual hard-deletes engine does not have it.
5468+
store.trimUnsafeCommits(translogPath);
5469+
Map<String, String> userData = new HashMap<>(store.readLastCommittedSegmentsInfo().userData);
5470+
userData.remove(Engine.MIN_RETAINED_SEQNO);
5471+
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(null)
5472+
.setOpenMode(IndexWriterConfig.OpenMode.APPEND)
5473+
.setIndexCreatedVersionMajor(Version.CURRENT.luceneVersion.major)
5474+
.setSoftDeletesField(Lucene.SOFT_DELETES_FIELD)
5475+
.setCommitOnClose(false)
5476+
.setMergePolicy(NoMergePolicy.INSTANCE);
5477+
try (IndexWriter writer = new IndexWriter(store.directory(), indexWriterConfig)) {
5478+
writer.setLiveCommitData(userData.entrySet());
5479+
writer.commit();
5480+
}
54675481
try (InternalEngine softDeletesEngine = new InternalEngine(config)) { // do not recover from translog
5482+
assertThat(softDeletesEngine.getLastCommittedSegmentInfos().userData, equalTo(userData));
54685483
assertThat(softDeletesEngine.getVersionMap().keySet(), empty());
54695484
softDeletesEngine.recoverFromTranslog(translogHandler, Long.MAX_VALUE);
54705485
if (randomBoolean()) {

test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,15 +1088,16 @@ public static void assertConsistentHistoryBetweenTranslogAndLuceneIndex(Engine e
10881088
}
10891089
final long globalCheckpoint = EngineTestCase.getTranslog(engine).getLastSyncedGlobalCheckpoint();
10901090
final long retainedOps = engine.config().getIndexSettings().getSoftDeleteRetentionOperations();
1091-
final long seqNoForRecovery;
1091+
final long minSeqNoToRetain;
10921092
if (engine.config().getIndexSettings().isSoftDeleteEnabled()) {
10931093
try (Engine.IndexCommitRef safeCommit = engine.acquireSafeIndexCommit()) {
1094-
seqNoForRecovery = Long.parseLong(safeCommit.getIndexCommit().getUserData().get(SequenceNumbers.LOCAL_CHECKPOINT_KEY)) + 1;
1094+
final long seqNoForRecovery = Long.parseLong(
1095+
safeCommit.getIndexCommit().getUserData().get(SequenceNumbers.LOCAL_CHECKPOINT_KEY)) + 1;
1096+
minSeqNoToRetain = Math.min(seqNoForRecovery, globalCheckpoint + 1 - retainedOps);
10951097
}
10961098
} else {
1097-
seqNoForRecovery = engine.getMinRetainedSeqNo();
1099+
minSeqNoToRetain = engine.getMinRetainedSeqNo();
10981100
}
1099-
final long minSeqNoToRetain = Math.min(seqNoForRecovery, globalCheckpoint + 1 - retainedOps);
11001101
for (Translog.Operation translogOp : translogOps) {
11011102
final Translog.Operation luceneOp = luceneOps.get(translogOp.seqNo());
11021103
if (luceneOp == null) {

0 commit comments

Comments
 (0)