fix potential endless loop in merge (#2457)

avoid single segments lists without deletes as merge candidates, as they will be moved
to a merge operation and filtered for merging in the next
consider_merge_options call. In rare cases this may end up in a endless
merge loop where only single segments where nothing is to be done are
merged.
This commit is contained in:
PSeitz
2024-07-30 17:37:20 +09:00
committed by GitHub
parent d8843c608c
commit 3f6d225086

View File

@@ -542,7 +542,13 @@ impl SegmentUpdater {
}
fn consider_merge_options(&self) {
let (committed_segments, uncommitted_segments) = self.get_mergeable_segments();
let (mut committed_segments, mut uncommitted_segments) = self.get_mergeable_segments();
if committed_segments.len() == 1 && committed_segments[0].num_deleted_docs() == 0 {
committed_segments.clear();
}
if uncommitted_segments.len() == 1 && uncommitted_segments[0].num_deleted_docs() == 0 {
uncommitted_segments.clear();
}
// Committed segments cannot be merged with uncommitted_segments.
// We therefore consider merges using these two sets of segments independently.