in below/store/src/lib.rs [1262:1309]
fn _put_read_corrupt_data(compression_mode: CompressionMode, format: Format) {
let dir = TempDir::new("below_store_test").expect("tempdir failed");
let ts = SystemTime::now();
let ts_next = ts + Duration::from_secs(1);
{
let mut writer = StoreWriter::new(get_logger(), &dir, compression_mode, format)
.expect("Failed to create store");
let mut frame = DataFrame::default();
frame.sample.cgroup.memory_current = Some(333);
writer.put(ts, &frame).expect("Failed to store data");
// Inject an extra byte to corrupt data file
for entry in fs::read_dir(&dir).expect("Failed to read dir") {
let entry = entry.expect("Failed to list entry");
if let Some(name) = entry.path().file_name() {
if name.to_string_lossy().starts_with("data_") {
OpenOptions::new()
.append(true)
.open(entry.path())
.expect("Failed to open data file")
.write_all(&[0])
.expect("Failed to write to data file");
}
}
}
frame.sample.cgroup.memory_current = Some(222);
// Write a second sample after the faulty byte
writer.put(ts_next, &frame).expect("Failed to store data");
}
let mut store_cursor = StoreCursor::new(get_logger(), dir.path().to_path_buf());
let frame = store_cursor
.get_next(&get_unix_timestamp(ts), Direction::Forward)
.expect("Failed to read sample")
.expect("Did not find stored sample");
assert_ts!(frame.0, ts);
assert_eq!(frame.1.sample.cgroup.memory_current, Some(333));
let frame = store_cursor
.get_next(&get_unix_timestamp(ts_next), Direction::Forward)
.expect("Failed to read sample")
.expect("Did not find stored sample");
assert_ts!(frame.0, ts_next);
assert_eq!(frame.1.sample.cgroup.memory_current, Some(222));
}