Skip to content

Commit e62d447

Browse files
authored
Always capture segments flusher first for consistency (#7882)
1 parent 5a2ceb2 commit e62d447

2 files changed

Lines changed: 9 additions & 7 deletions

File tree

lib/segment/src/segment/entry.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ impl SegmentEntry for Segment {
637637
(_, _) => {}
638638
}
639639

640+
// Capture all flushers first to improve data consistency
640641
let vector_storage_flushers: Vec<_> = self
641642
.vector_data
642643
.values()

lib/shard/src/segment_holder/flush.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,17 @@ impl SegmentHolder {
7474
// as it is exclusive
7575
let mut background_flush_lock = self.lock_flushing()?;
7676

77+
// Capture all flushers first to improve data consistency
78+
let flushers: Vec<_> = segment_reads
79+
.iter()
80+
.filter_map(|read_segment| read_segment.flusher(force))
81+
.collect();
82+
7783
if sync {
78-
for read_segment in segment_reads.iter() {
79-
read_segment.flush(force)?;
84+
for flusher in flushers {
85+
flusher()?;
8086
}
8187
} else {
82-
let flushers: Vec<_> = segment_reads
83-
.iter()
84-
.filter_map(|read_segment| read_segment.flusher(force))
85-
.collect();
86-
8788
*background_flush_lock = Some(
8889
std::thread::Builder::new()
8990
.name("background_flush".to_string())

0 commit comments

Comments
 (0)