in below/store/src/lib.rs [922:981]
fn writing_to_already_written_index_with_different_compression_format_works() {
use itertools::Itertools;
let dir = TempDir::new("below_store_test").expect("tempdir failed");
let ts = std::time::UNIX_EPOCH + Duration::from_secs(SHARD_TIME);
// States, (compression_mode, format), that we transition between when
// writing
let states = vec![
(CompressionMode::None, Format::Cbor),
(CompressionMode::Zstd, Format::Cbor),
(
CompressionMode::ZstdDictionary(ChunkSizePo2(0)),
Format::Cbor,
),
(
CompressionMode::ZstdDictionary(ChunkSizePo2(1)),
Format::Cbor,
),
(
CompressionMode::ZstdDictionary(ChunkSizePo2(2)),
Format::Cbor,
),
(
CompressionMode::ZstdDictionary(ChunkSizePo2(3)),
Format::Cbor,
),
];
// State sequence that contains all possible transitions
let state_sequence = states
.iter()
.cartesian_product(states.iter())
.flat_map(|(a, b)| vec![a, b])
.collect::<Vec<_>>();
for (i, (compression_mode, format)) in state_sequence.iter().enumerate() {
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(i as i64);
writer
.put(ts + Duration::from_secs(i as u64), &frame)
.expect("Failed to store data");
}
// Test reading all the samples
let mut store_cursor = StoreCursor::new(get_logger(), dir.path().to_path_buf());
for (i, (_compress, _format)) in state_sequence.iter().enumerate() {
let frame = store_cursor
.get_next(
&get_unix_timestamp(ts + Duration::from_secs(i as u64)),
Direction::Forward,
)
.expect("Failed to read sample")
.expect("Did not find stored sample");
assert_ts!(frame.0, ts + Duration::from_secs(i as u64));
assert_eq!(frame.1.sample.cgroup.memory_current, Some(i as i64));
}
}