diff --git a/quickwit/Cargo.lock b/quickwit/Cargo.lock index 8d32736877d..0468eae16e1 100644 --- a/quickwit/Cargo.lock +++ b/quickwit/Cargo.lock @@ -2489,6 +2489,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "funty" version = "2.0.0" @@ -7520,6 +7530,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" dependencies = [ + "fslock", "futures", "log", "once_cell", diff --git a/quickwit/quickwit-metastore/Cargo.toml b/quickwit/quickwit-metastore/Cargo.toml index 612ada72d52..68b7eb76f1a 100644 --- a/quickwit/quickwit-metastore/Cargo.toml +++ b/quickwit/quickwit-metastore/Cargo.toml @@ -52,7 +52,7 @@ futures = { workspace = true } md5 = { workspace = true } mockall = { workspace = true } rand = { workspace = true } -serial_test = "3.1.0" +serial_test = { version = "3.1.1", features = ["file_locks"] } tempfile = { workspace = true } tracing-subscriber = { workspace = true } diff --git a/quickwit/quickwit-metastore/src/tests/mod.rs b/quickwit/quickwit-metastore/src/tests/mod.rs index a9079fdc982..65502e979ff 100644 --- a/quickwit/quickwit-metastore/src/tests/mod.rs +++ b/quickwit/quickwit-metastore/src/tests/mod.rs @@ -189,42 +189,42 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_create_index_with_sources() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_create_index_with_sources::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_update_retention_policy() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_update_retention_policy::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_update_search_settings() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_update_search_settings::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_update_doc_mapping() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_update_doc_mapping::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_update_indexing_settings() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_update_indexing_settings::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_create_index_enforces_index_id_maximum_length() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_create_index_enforces_index_id_maximum_length::< @@ -234,42 +234,42 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_index_exists() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_index_exists::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_index_metadata() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_index_metadata::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_indexes_metadata() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_indexes_metadata::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_indexes() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_list_indexes::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_all_indexes() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_list_all_indexes::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_delete_index() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::index::test_metastore_delete_index::<$metastore_type>().await; @@ -284,14 +284,14 @@ macro_rules! metastore_test_suite { // - delete_splits #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_publish_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_publish_splits::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_publish_splits_concurrency() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_publish_splits_concurrency::<$metastore_type>( @@ -300,7 +300,7 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_publish_splits_empty_splits_array_is_allowed() { $crate::tests::split::test_metastore_publish_splits_empty_splits_array_is_allowed::< $metastore_type, @@ -309,14 +309,14 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_replace_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_replace_splits::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_mark_splits_for_deletion() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_mark_splits_for_deletion::<$metastore_type>() @@ -324,28 +324,28 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_delete_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_delete_splits::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_stream_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::list_splits::test_metastore_stream_splits::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_all_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::list_splits::test_metastore_list_all_splits::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::list_splits::test_metastore_list_splits::<$metastore_type>().await; @@ -353,14 +353,14 @@ macro_rules! metastore_test_suite { #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_splits_by_node() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::list_splits::test_metastore_list_splits_by_node_id::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_split_update_timestamp() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_split_update_timestamp::<$metastore_type>() @@ -368,70 +368,70 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_add_source() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::source::test_metastore_add_source::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_toggle_source() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::source::test_metastore_toggle_source::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_delete_source() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::source::test_metastore_delete_source::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_reset_checkpoint() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::source::test_metastore_reset_checkpoint::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_create_delete_task() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::delete_task::test_metastore_create_delete_task::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_last_delete_opstamp() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::delete_task::test_metastore_last_delete_opstamp::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_delete_index_with_tasks() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::delete_task::test_metastore_delete_index_with_tasks::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_delete_tasks() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::delete_task::test_metastore_list_delete_tasks::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_stale_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::list_splits::test_metastore_list_stale_splits::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_update_splits_delete_opstamp() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_update_splits_delete_opstamp::<$metastore_type>() @@ -439,7 +439,7 @@ macro_rules! metastore_test_suite { } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_stage_splits() { let _ = tracing_subscriber::fmt::try_init(); $crate::tests::split::test_metastore_stage_splits::<$metastore_type>().await; @@ -448,37 +448,37 @@ macro_rules! metastore_test_suite { /// Shard API tests #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_open_shards() { $crate::tests::shard::test_metastore_open_shards::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_acquire_shards() { $crate::tests::shard::test_metastore_acquire_shards::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_shards() { $crate::tests::shard::test_metastore_list_shards::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_delete_shards() { $crate::tests::shard::test_metastore_delete_shards::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_apply_checkpoint_delta_v2_single_shard() { $crate::tests::shard::test_metastore_apply_checkpoint_delta_v2_single_shard::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_apply_checkpoint_delta_v2_multi_shards() { $crate::tests::shard::test_metastore_apply_checkpoint_delta_v2_multi_shards::<$metastore_type>().await; } @@ -486,31 +486,31 @@ macro_rules! metastore_test_suite { /// Index Template API tests #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_create_index_template() { $crate::tests::template::test_metastore_create_index_template::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_get_index_template() { $crate::tests::template::test_metastore_get_index_template::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_find_index_template_matches() { $crate::tests::template::test_metastore_find_index_template_matches::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_list_index_templates() { $crate::tests::template::test_metastore_list_index_templates::<$metastore_type>().await; } #[tokio::test] - #[serial_test::serial] + #[serial_test::file_serial] async fn test_metastore_delete_index_templates() { $crate::tests::template::test_metastore_delete_index_templates::<$metastore_type>().await; }