From 343525dab8a978a7bfc7df567e8ef6b30f2ee563 Mon Sep 17 00:00:00 2001 From: Weny Xu Date: Mon, 18 Mar 2024 19:07:30 +0800 Subject: [PATCH] refactor: remove removed-prefixed keys (#3535) --- src/common/meta/src/key.rs | 43 +++++++------------------- src/common/meta/src/key/table_info.rs | 29 ++--------------- src/common/meta/src/key/table_name.rs | 17 ++-------- src/common/meta/src/key/table_route.rs | 29 ++--------------- 4 files changed, 21 insertions(+), 97 deletions(-) diff --git a/src/common/meta/src/key.rs b/src/common/meta/src/key.rs index bef951ded6..acc5e38c1a 100644 --- a/src/common/meta/src/key.rs +++ b/src/common/meta/src/key.rs @@ -140,10 +140,6 @@ lazy_static! { .unwrap(); } -pub fn to_removed_key(key: &str) -> String { - format!("{REMOVED_PREFIX}-{key}") -} - pub trait TableMetaKey { fn as_raw_key(&self) -> Vec; } @@ -565,14 +561,10 @@ impl TableMetadataManager { &table_info.name, ); - let delete_table_name_txn = self - .table_name_manager() - .build_delete_txn(&table_name, table_id)?; + let delete_table_name_txn = self.table_name_manager().build_delete_txn(&table_name)?; // Deletes table info. - let delete_table_info_txn = self - .table_info_manager() - .build_delete_txn(table_id, table_info_value)?; + let delete_table_info_txn = self.table_info_manager().build_delete_txn(table_id)?; // Deletes datanode table key value pairs. let distribution = region_distribution(table_route_value.region_routes()?); @@ -584,7 +576,7 @@ impl TableMetadataManager { let delete_table_route_txn = self .table_route_manager() .table_route_storage() - .build_delete_txn(table_id, table_route_value)?; + .build_delete_txn(table_id)?; let txn = Txn::merge_all(vec![ delete_table_name_txn, @@ -871,7 +863,7 @@ mod tests { use crate::key::table_info::TableInfoValue; use crate::key::table_name::TableNameKey; use crate::key::table_route::TableRouteValue; - use crate::key::{to_removed_key, DeserializedValueWithBytes, TableMetadataManager}; + use crate::key::{DeserializedValueWithBytes, TableMetadataManager}; use crate::kv_backend::memory::MemoryKvBackend; use crate::peer::Peer; use crate::rpc::router::{region_distribution, Region, RegionRoute, RegionStatus}; @@ -904,13 +896,6 @@ mod tests { assert_eq!(decoded.bytes, expected); } - #[test] - fn test_to_removed_key() { - let key = "test_key"; - let removed = "__removed-test_key"; - assert_eq!(removed, to_removed_key(key)); - } - fn new_test_region_route() -> RegionRoute { new_region_route(1, 2) } @@ -1148,24 +1133,20 @@ mod tests { .unwrap() .is_empty()); // Checks removed values - let removed_table_info = table_metadata_manager + let table_info = table_metadata_manager .table_info_manager() - .get_removed(table_id) + .get(table_id) .await - .unwrap() - .unwrap() - .into_inner(); - assert_eq!(removed_table_info.table_info, table_info); + .unwrap(); + assert!(table_info.is_none()); - let removed_table_route = table_metadata_manager + let table_route = table_metadata_manager .table_route_manager() .table_route_storage() - .get_raw_removed(table_id) + .get(table_id) .await - .unwrap() - .unwrap() - .into_inner(); - assert_eq!(removed_table_route.region_routes().unwrap(), region_routes); + .unwrap(); + assert!(table_route.is_none()); } #[tokio::test] diff --git a/src/common/meta/src/key/table_info.rs b/src/common/meta/src/key/table_info.rs index b766a54b30..495653dd67 100644 --- a/src/common/meta/src/key/table_info.rs +++ b/src/common/meta/src/key/table_info.rs @@ -20,7 +20,7 @@ use table::table_reference::TableReference; use super::{txn_helper, DeserializedValueWithBytes, TableMetaValue, TABLE_INFO_KEY_PREFIX}; use crate::error::Result; -use crate::key::{to_removed_key, TableMetaKey}; +use crate::key::TableMetaKey; use crate::kv_backend::txn::{Txn, TxnOp, TxnOpResponse}; use crate::kv_backend::KvBackendRef; use crate::rpc::store::BatchGetRequest; @@ -157,38 +157,15 @@ impl TableInfoManager { } /// Builds a delete table info transaction. - pub(crate) fn build_delete_txn( - &self, - table_id: TableId, - table_info_value: &DeserializedValueWithBytes, - ) -> Result { + pub(crate) fn build_delete_txn(&self, table_id: TableId) -> Result { let key = TableInfoKey::new(table_id); let raw_key = key.as_raw_key(); - let raw_value = table_info_value.get_raw_bytes(); - let removed_key = to_removed_key(&String::from_utf8_lossy(&raw_key)); - let txn = Txn::new().and_then(vec![ - TxnOp::Delete(raw_key), - TxnOp::Put(removed_key.into_bytes(), raw_value), - ]); + let txn = Txn::new().and_then(vec![TxnOp::Delete(raw_key)]); Ok(txn) } - #[cfg(test)] - pub async fn get_removed( - &self, - table_id: TableId, - ) -> Result>> { - let key = TableInfoKey::new(table_id).to_string(); - let removed_key = to_removed_key(&key).into_bytes(); - self.kv_backend - .get(&removed_key) - .await? - .map(|x| DeserializedValueWithBytes::from_inner_slice(&x.value)) - .transpose() - } - pub async fn get( &self, table_id: TableId, diff --git a/src/common/meta/src/key/table_name.rs b/src/common/meta/src/key/table_name.rs index 35bf0a5a3b..971856f2b6 100644 --- a/src/common/meta/src/key/table_name.rs +++ b/src/common/meta/src/key/table_name.rs @@ -22,7 +22,7 @@ use table::metadata::TableId; use super::{TableMetaValue, TABLE_NAME_KEY_PATTERN, TABLE_NAME_KEY_PREFIX}; use crate::error::{Error, InvalidTableMetadataSnafu, Result}; -use crate::key::{to_removed_key, TableMetaKey}; +use crate::key::TableMetaKey; use crate::kv_backend::memory::MemoryKvBackend; use crate::kv_backend::txn::{Txn, TxnOp}; use crate::kv_backend::KvBackendRef; @@ -195,20 +195,9 @@ impl TableNameManager { } /// Builds a delete table name transaction. It only executes while the primary keys comparing successes. - pub(crate) fn build_delete_txn( - &self, - key: &TableNameKey<'_>, - table_id: TableId, - ) -> Result { + pub(crate) fn build_delete_txn(&self, key: &TableNameKey<'_>) -> Result { let raw_key = key.as_raw_key(); - let value = TableNameValue::new(table_id); - let raw_value = value.try_as_raw_value()?; - let removed_key = to_removed_key(&String::from_utf8_lossy(&raw_key)); - - let txn = Txn::new().and_then(vec![ - TxnOp::Delete(raw_key), - TxnOp::Put(removed_key.into_bytes(), raw_value), - ]); + let txn = Txn::new().and_then(vec![TxnOp::Delete(raw_key)]); Ok(txn) } diff --git a/src/common/meta/src/key/table_route.rs b/src/common/meta/src/key/table_route.rs index 4cdf81140d..3b2e643176 100644 --- a/src/common/meta/src/key/table_route.rs +++ b/src/common/meta/src/key/table_route.rs @@ -25,7 +25,7 @@ use crate::error::{ self, MetadataCorruptionSnafu, Result, SerdeJsonSnafu, TableRouteNotFoundSnafu, UnexpectedLogicalRouteTableSnafu, }; -use crate::key::{to_removed_key, RegionDistribution, TableMetaKey, TABLE_ROUTE_PREFIX}; +use crate::key::{RegionDistribution, TableMetaKey, TABLE_ROUTE_PREFIX}; use crate::kv_backend::txn::{Txn, TxnOp, TxnOpResponse}; use crate::kv_backend::KvBackendRef; use crate::rpc::router::{region_distribution, RegionRoute}; @@ -485,38 +485,15 @@ impl TableRouteStorage { /// Builds a delete table route transaction, /// it expected the remote value equals the `table_route_value`. - pub(crate) fn build_delete_txn( - &self, - table_id: TableId, - table_route_value: &DeserializedValueWithBytes, - ) -> Result { + pub(crate) fn build_delete_txn(&self, table_id: TableId) -> Result { let key = TableRouteKey::new(table_id); let raw_key = key.as_raw_key(); - let raw_value = table_route_value.get_raw_bytes(); - let removed_key = to_removed_key(&String::from_utf8_lossy(&raw_key)); - let txn = Txn::new().and_then(vec![ - TxnOp::Delete(raw_key), - TxnOp::Put(removed_key.into_bytes(), raw_value), - ]); + let txn = Txn::new().and_then(vec![TxnOp::Delete(raw_key)]); Ok(txn) } - #[cfg(test)] - pub async fn get_raw_removed( - &self, - table_id: TableId, - ) -> Result>> { - let key = TableRouteKey::new(table_id).to_string(); - let removed_key = to_removed_key(&key).into_bytes(); - self.kv_backend - .get(&removed_key) - .await? - .map(|x| DeserializedValueWithBytes::from_inner_slice(&x.value)) - .transpose() - } - /// Returns the [`TableRouteValue`]. pub async fn get(&self, table_id: TableId) -> Result> { let key = TableRouteKey::new(table_id);