From e78c3e1eaa15fdfad270da48e28a1329846d4a11 Mon Sep 17 00:00:00 2001 From: Ning Sun Date: Fri, 20 Jun 2025 11:31:16 +0800 Subject: [PATCH] refactor: make metadata region option opt-in (#6350) * refactor: make metadata region option opt-in Signed-off-by: Ning Sun * fix: preserve wal_options for metadata region Signed-off-by: Ning Sun * Update src/metric-engine/src/engine/create.rs Co-authored-by: Ruihang Xia --------- Signed-off-by: Ning Sun Co-authored-by: Ruihang Xia --- src/metric-engine/src/engine/create.rs | 26 ++++++++++-------------- src/metric-engine/src/engine/open.rs | 2 +- src/store-api/src/mito_engine_options.rs | 4 ++-- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/metric-engine/src/engine/create.rs b/src/metric-engine/src/engine/create.rs index 3b38b155cc..1b85527785 100644 --- a/src/metric-engine/src/engine/create.rs +++ b/src/metric-engine/src/engine/create.rs @@ -33,10 +33,7 @@ use store_api::metric_engine_consts::{ METADATA_SCHEMA_TIMESTAMP_COLUMN_INDEX, METADATA_SCHEMA_TIMESTAMP_COLUMN_NAME, METADATA_SCHEMA_VALUE_COLUMN_INDEX, METADATA_SCHEMA_VALUE_COLUMN_NAME, }; -use store_api::mito_engine_options::{ - APPEND_MODE_KEY, MEMTABLE_PARTITION_TREE_PRIMARY_KEY_ENCODING, MEMTABLE_TYPE, SKIP_WAL_KEY, - TTL_KEY, -}; +use store_api::mito_engine_options::{TTL_KEY, WAL_OPTIONS_KEY}; use store_api::region_engine::RegionEngine; use store_api::region_request::{AffectedRows, RegionCreateRequest, RegionRequest}; use store_api::storage::consts::ReservedColumnId; @@ -476,7 +473,7 @@ impl MetricEngineInner { // concat region dir let metadata_region_dir = join_dir(&request.region_dir, METADATA_REGION_SUBDIR); - let options = region_options_for_metadata_region(request.options.clone()); + let options = region_options_for_metadata_region(&request.options); RegionCreateRequest { engine: MITO_ENGINE_NAME.to_string(), column_metadatas: vec![ @@ -600,17 +597,16 @@ fn parse_physical_region_id(request: &RegionCreateRequest) -> Result { /// Creates the region options for metadata region in metric engine. pub(crate) fn region_options_for_metadata_region( - mut original: HashMap, + original: &HashMap, ) -> HashMap { - // TODO(ruihang, weny): add whitelist for metric engine options. - original.remove(APPEND_MODE_KEY); - // Don't allow to set primary key encoding for metadata region. - original.remove(MEMTABLE_PARTITION_TREE_PRIMARY_KEY_ENCODING); - // Don't allow to set memtable type for metadata region. - original.remove(MEMTABLE_TYPE); - original.insert(TTL_KEY.to_string(), FOREVER.to_string()); - original.remove(SKIP_WAL_KEY); - original + let mut metadata_region_options = HashMap::new(); + metadata_region_options.insert(TTL_KEY.to_string(), FOREVER.to_string()); + + if let Some(wal_options) = original.get(WAL_OPTIONS_KEY) { + metadata_region_options.insert(WAL_OPTIONS_KEY.to_string(), wal_options.to_string()); + } + + metadata_region_options } #[cfg(test)] diff --git a/src/metric-engine/src/engine/open.rs b/src/metric-engine/src/engine/open.rs index a1aeb4def5..4f13cb33b1 100644 --- a/src/metric-engine/src/engine/open.rs +++ b/src/metric-engine/src/engine/open.rs @@ -167,7 +167,7 @@ impl MetricEngineInner { let metadata_region_dir = join_dir(&request.region_dir, METADATA_REGION_SUBDIR); let data_region_dir = join_dir(&request.region_dir, DATA_REGION_SUBDIR); - let metadata_region_options = region_options_for_metadata_region(request.options.clone()); + let metadata_region_options = region_options_for_metadata_region(&request.options); let open_metadata_region_request = RegionOpenRequest { region_dir: metadata_region_dir, options: metadata_region_options, diff --git a/src/store-api/src/mito_engine_options.rs b/src/store-api/src/mito_engine_options.rs index e7bf832cf6..3c096b27cc 100644 --- a/src/store-api/src/mito_engine_options.rs +++ b/src/store-api/src/mito_engine_options.rs @@ -15,8 +15,8 @@ //! Option keys for the mito engine. //! We define them in this mod so the create parser can use it to validate table options. -use common_wal::options::WAL_OPTIONS_KEY; - +/// Option key for all WAL options. +pub use common_wal::options::WAL_OPTIONS_KEY; /// Option key for append mode. pub const APPEND_MODE_KEY: &str = "append_mode"; /// Option key for merge mode.