From b02c25615755d940b588242db6b7e287030bd009 Mon Sep 17 00:00:00 2001 From: Ruihang Xia Date: Fri, 31 May 2024 18:16:08 +0800 Subject: [PATCH] perf: use memory state to check if a logical region exists Signed-off-by: Ruihang Xia --- src/metric-engine/src/engine/create.rs | 7 ++++--- src/metric-engine/src/engine/put.rs | 2 +- src/metric-engine/src/engine/state.rs | 2 +- src/metric-engine/src/metadata_region.rs | 15 --------------- 4 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/metric-engine/src/engine/create.rs b/src/metric-engine/src/engine/create.rs index c71375299c..0be3275a59 100644 --- a/src/metric-engine/src/engine/create.rs +++ b/src/metric-engine/src/engine/create.rs @@ -171,9 +171,10 @@ impl MetricEngineInner { // check if the logical region already exist if self - .metadata_region - .is_logical_region_exists(metadata_region_id, logical_region_id) - .await? + .state + .read() + .unwrap() + .is_logical_region_exists(logical_region_id) { info!("Create a existing logical region {logical_region_id}. Skipped"); return Ok(data_region_id); diff --git a/src/metric-engine/src/engine/put.rs b/src/metric-engine/src/engine/put.rs index 72c2aeb180..ba652d872f 100644 --- a/src/metric-engine/src/engine/put.rs +++ b/src/metric-engine/src/engine/put.rs @@ -104,7 +104,7 @@ impl MetricEngineInner { // check if the region exists let data_region_id = to_data_region_id(physical_region_id); let state = self.state.read().unwrap(); - if !state.is_logical_region_exist(logical_region_id) { + if !state.is_logical_region_exists(logical_region_id) { error!("Trying to write to an nonexistent region {logical_region_id}"); return LogicalRegionNotFoundSnafu { region_id: logical_region_id, diff --git a/src/metric-engine/src/engine/state.rs b/src/metric-engine/src/engine/state.rs index cc36fe27df..07d1962ad5 100644 --- a/src/metric-engine/src/engine/state.rs +++ b/src/metric-engine/src/engine/state.rs @@ -149,7 +149,7 @@ impl MetricEngineState { Ok(exist) } - pub fn is_logical_region_exist(&self, logical_region_id: RegionId) -> bool { + pub fn is_logical_region_exists(&self, logical_region_id: RegionId) -> bool { self.logical_regions().contains_key(&logical_region_id) } } diff --git a/src/metric-engine/src/metadata_region.rs b/src/metric-engine/src/metadata_region.rs index a246977649..735610424f 100644 --- a/src/metric-engine/src/metadata_region.rs +++ b/src/metric-engine/src/metadata_region.rs @@ -139,17 +139,6 @@ impl MetadataRegion { Ok(()) } - /// Check if the given logical region exists. - pub async fn is_logical_region_exists( - &self, - physical_region_id: RegionId, - logical_region_id: RegionId, - ) -> Result { - let region_id = utils::to_metadata_region_id(physical_region_id); - let region_key = Self::concat_region_key(logical_region_id); - self.exists(region_id, ®ion_key).await - } - /// Check if the given column exists. Return the semantic type if exists. pub async fn column_semantic_type( &self, @@ -669,10 +658,6 @@ mod test { .add_logical_region(physical_region_id, logical_region_id) .await .unwrap(); - assert!(metadata_region - .is_logical_region_exists(physical_region_id, logical_region_id) - .await - .unwrap()); // add it again assert!(metadata_region