Skip to content

Commit 77c0217

Browse files
committed
Add debug assert, any open segment cannot have same/newer ID than unused
1 parent 0b64cde commit 77c0217

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/segment_creator.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ impl SegmentCreatorV2 {
8080
.or(open_segment)
8181
.map_or(1, |s| s.id + 1);
8282

83+
// Any open segment must have lower ID than all unused segments
84+
debug_assert!(
85+
unused_segments
86+
.iter()
87+
.all(|s| open_segment.as_ref().is_none_or(|o| s.id > o.id)),
88+
"open_segment must have lower ID than all unused_segments",
89+
);
90+
8391
let mut result = Self {
8492
dir,
8593
pending_segments: unused_segments,
@@ -245,4 +253,24 @@ mod tests {
245253

246254
assert_eq!(entries.len(), 10 - 3 + 1); // open-3 existed, open-4 to open-9 created + open-10 created ahead
247255
}
256+
257+
#[test]
258+
#[should_panic(expected = "open_segment must have lower ID than all unused_segments")]
259+
fn test_segment_creator_v2_invalid_open() {
260+
init_logger();
261+
let dir = Builder::new().prefix("segment").tempdir().unwrap();
262+
263+
let segment = Some(OpenSegment {
264+
id: 4,
265+
segment: Segment::create(dir.path().join("open-3"), 1024).unwrap(),
266+
});
267+
268+
let unused_segments = vec![OpenSegment {
269+
id: 4,
270+
segment: Segment::create(dir.path().join("open-4"), 1024).unwrap(),
271+
}];
272+
273+
// Expected to panic, open segment cannot have same or higher ID than unused segments
274+
SegmentCreatorV2::new(dir.path(), segment.as_ref(), unused_segments, 1024, 1);
275+
}
248276
}

0 commit comments

Comments
 (0)