influxdb/tests/end_to_end_cases/freeze.rs

61 lines
2.1 KiB
Rust

use itertools::Itertools;
use data_types::chunk_metadata::ChunkStorage;
use crate::{common::server_fixture::ServerFixture, end_to_end_cases::scenario::list_chunks};
use super::scenario::{rand_name, DatabaseBuilder};
#[tokio::test]
async fn test_mub_freeze() {
let fixture = ServerFixture::create_shared().await;
let mut write_client = fixture.write_client();
let db_name = rand_name();
DatabaseBuilder::new(db_name.clone())
// Disable background worker to prevent compaction and ensure
// freeze is called by the write path
.worker_backoff_millis(100_000)
.mub_row_threshold(20)
.build(fixture.grpc_channel())
.await;
let lp_lines: Vec<_> = (0..20)
.map(|i| format!("data,tag1=val{} x={} {}", i, i * 10, i))
.collect();
let num_lines_written = write_client
.write(&db_name, lp_lines.iter().join("\n"))
.await
.expect("successful write");
assert_eq!(num_lines_written, 20);
let chunks = list_chunks(&fixture, &db_name).await;
assert_eq!(chunks.len(), 1);
assert_eq!(chunks[0].storage, ChunkStorage::ClosedMutableBuffer);
let num_lines_written = write_client
.write(&db_name, lp_lines.iter().take(10).join("\n"))
.await
.expect("successful write");
assert_eq!(num_lines_written, 10);
// Not exceeded row threshold - shouldn't freeze
let chunks = list_chunks(&fixture, &db_name).await;
assert_eq!(chunks.len(), 2);
assert_eq!(chunks[0].storage, ChunkStorage::ClosedMutableBuffer);
assert_eq!(chunks[1].storage, ChunkStorage::OpenMutableBuffer);
let num_lines_written = write_client
.write(&db_name, lp_lines.iter().take(10).join("\n"))
.await
.expect("successful write");
assert_eq!(num_lines_written, 10);
// Exceeded row threshold - should freeze
let chunks = list_chunks(&fixture, &db_name).await;
assert_eq!(chunks.len(), 2);
assert_eq!(chunks[0].storage, ChunkStorage::ClosedMutableBuffer);
assert_eq!(chunks[1].storage, ChunkStorage::ClosedMutableBuffer);
}