MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / automatic_segment_rollover

Function automatic_segment_rollover

nodedb-wal/src/segmented.rs:390–430  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

388
389 #[test]
390 fn automatic_segment_rollover() {
391 let dir = tempfile::tempdir().unwrap();
392 let wal_dir = dir.path().join("wal");
393
394 // Use a tiny segment target to force rollover.
395 let config = SegmentedWalConfig {
396 wal_dir: wal_dir.clone(),
397 segment_target_size: 100, // 100 bytes — will roll after ~2 records.
398 writer_config: WalWriterConfig {
399 use_direct_io: false,
400 ..Default::default()
401 },
402 };
403
404 let mut wal = SegmentedWal::open(config).unwrap();
405
406 // Write enough records to trigger multiple rollovers.
407 for i in 0..20u32 {
408 let payload = format!("record-{i:04}");
409 wal.append(RecordType::Put as u32, 1, 0, 0, payload.as_bytes())
410 .unwrap();
411 wal.sync().unwrap();
412 }
413
414 // Should have created multiple segments.
415 let segments = wal.list_segments().unwrap();
416 assert!(
417 segments.len() > 1,
418 "expected multiple segments, got {}",
419 segments.len()
420 );
421
422 // Replay should return all 20 records in order.
423 let records = wal.replay().unwrap();
424 assert_eq!(records.len(), 20);
425 for (i, record) in records.iter().enumerate() {
426 assert_eq!(record.header.lsn, (i + 1) as u64);
427 let expected = format!("record-{i:04}");
428 assert_eq!(record.payload, expected.as_bytes());
429 }
430 }
431
432 #[test]
433 fn truncation_removes_old_segments() {

Callers

nothing calls this directly

Calls 10

joinMethod · 0.80
openFunction · 0.50
pathMethod · 0.45
cloneMethod · 0.45
appendMethod · 0.45
as_bytesMethod · 0.45
syncMethod · 0.45
list_segmentsMethod · 0.45
replayMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected