in src/storage/seg/src/segments/segments.rs [658:691]
fn merge_compact_chain_len(&mut self, start: NonZeroU32) -> usize {
let mut len = 0;
let mut id = start;
let max = self.evict.max_merge();
let mut occupied = 0;
let seg_size = self.segment_size();
while len < max {
if let Ok(seg) = self.get_mut(id) {
if seg.can_evict() {
occupied += seg.live_bytes();
if occupied > seg_size {
break;
}
len += 1;
match seg.next_seg() {
Some(i) => {
id = i;
}
None => {
break;
}
}
} else {
break;
}
} else {
warn!("invalid segment id: {}", id);
break;
}
}
len
}