refactor: make metadata region option opt-in (#6350)

* refactor: make metadata region option opt-in

Signed-off-by: Ning Sun <sunning@greptime.com>

* fix: preserve wal_options for metadata region

Signed-off-by: Ning Sun <sunning@greptime.com>

* Update src/metric-engine/src/engine/create.rs

Co-authored-by: Ruihang Xia <waynestxia@gmail.com>

---------

Signed-off-by: Ning Sun <sunning@greptime.com>
Co-authored-by: Ruihang Xia <waynestxia@gmail.com>
This commit is contained in:
Ning Sun
2025-06-20 11:31:16 +08:00
committed by GitHub
parent 89e3c8edab
commit e78c3e1eaa
3 changed files with 14 additions and 18 deletions

View File

@@ -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<RegionId> {
/// Creates the region options for metadata region in metric engine.
pub(crate) fn region_options_for_metadata_region(
mut original: HashMap<String, String>,
original: &HashMap<String, String>,
) -> HashMap<String, String> {
// 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)]

View File

@@ -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,

View File

@@ -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.