refactor: rename NEXT_TABLE_ROUTE_PREFIX to TABLE_ROUTE_PREFIX (#2348)

* refactor: rename NEXT_TABLE_ROUTE_PREFIX to TABLE_ROUTE_PREFIX

* chore: apply suggestions from CR
This commit is contained in:
Weny Xu
2023-09-11 16:02:22 +09:00
committed by Ruihang Xia
parent f386329e29
commit a4604afde5
13 changed files with 85 additions and 182 deletions

View File

@@ -24,6 +24,12 @@ pub enum Error {
#[snafu(display("Invalid catalog info: {}", key))]
InvalidCatalog { key: String, location: Location },
#[snafu(display("Invalid full table name: {}", table_name))]
InvalidFullTableName {
table_name: String,
location: Location,
},
#[snafu(display("Failed to deserialize catalog entry value: {}", raw))]
DeserializeCatalogEntryValue {
raw: String,
@@ -43,7 +49,8 @@ impl ErrorExt for Error {
match self {
Error::InvalidCatalog { .. }
| Error::DeserializeCatalogEntryValue { .. }
| Error::SerializeCatalogEntryValue { .. } => StatusCode::Unexpected,
| Error::SerializeCatalogEntryValue { .. }
| Error::InvalidFullTableName { .. } => StatusCode::Unexpected,
}
}

View File

@@ -13,6 +13,9 @@
// limitations under the License.
use consts::DEFAULT_CATALOG_NAME;
use snafu::ensure;
use crate::error::Result;
pub mod consts;
pub mod error;
@@ -23,6 +26,17 @@ pub fn format_full_table_name(catalog: &str, schema: &str, table: &str) -> Strin
format!("{catalog}.{schema}.{table}")
}
pub fn parse_full_table_name(table_name: &str) -> Result<(&str, &str, &str)> {
let result = table_name.split('.').collect::<Vec<_>>();
ensure!(
result.len() == 3,
error::InvalidFullTableNameSnafu { table_name }
);
Ok((result[0], result[1], result[2]))
}
/// Build db name from catalog and schema string
pub fn build_db_string(catalog: &str, schema: &str) -> String {
if catalog == DEFAULT_CATALOG_NAME {

View File

@@ -71,8 +71,6 @@ use self::catalog_name::{CatalogManager, CatalogNameValue};
use self::schema_name::{SchemaManager, SchemaNameValue};
use self::table_route::{TableRouteManager, TableRouteValue};
use crate::error::{self, Result, SerdeJsonSnafu};
#[allow(deprecated)]
pub use crate::key::table_route::{TableRouteKey, TABLE_ROUTE_PREFIX};
use crate::kv_backend::txn::Txn;
use crate::kv_backend::KvBackendRef;
use crate::rpc::router::{region_distribution, RegionRoute};
@@ -88,6 +86,7 @@ const TABLE_NAME_KEY_PREFIX: &str = "__table_name";
const TABLE_REGION_KEY_PREFIX: &str = "__table_region";
const CATALOG_NAME_KEY_PREFIX: &str = "__catalog_name";
const SCHEMA_NAME_KEY_PREFIX: &str = "__schema_name";
const TABLE_ROUTE_PREFIX: &str = "__table_route";
pub type RegionDistribution = BTreeMap<DatanodeId, Vec<RegionNumber>>;

View File

@@ -14,26 +14,20 @@
use std::fmt::Display;
use api::v1::meta::TableName;
use serde::{Deserialize, Serialize};
use table::metadata::TableId;
use crate::error::Result;
use crate::key::{to_removed_key, RegionDistribution, TableMetaKey};
use crate::key::{to_removed_key, RegionDistribution, TableMetaKey, TABLE_ROUTE_PREFIX};
use crate::kv_backend::txn::{Compare, CompareOp, Txn, TxnOp, TxnOpResponse};
use crate::kv_backend::KvBackendRef;
use crate::rpc::router::{region_distribution, RegionRoute};
pub const TABLE_ROUTE_PREFIX: &str = "__meta_table_route";
pub const NEXT_TABLE_ROUTE_PREFIX: &str = "__table_route";
// TODO(weny): Renames it to TableRouteKey.
pub struct NextTableRouteKey {
pub struct TableRouteKey {
pub table_id: TableId,
}
impl NextTableRouteKey {
impl TableRouteKey {
pub fn new(table_id: TableId) -> Self {
Self { table_id }
}
@@ -61,15 +55,15 @@ impl TableRouteValue {
}
}
impl TableMetaKey for NextTableRouteKey {
impl TableMetaKey for TableRouteKey {
fn as_raw_key(&self) -> Vec<u8> {
self.to_string().into_bytes()
}
}
impl Display for NextTableRouteKey {
impl Display for TableRouteKey {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}/{}", NEXT_TABLE_ROUTE_PREFIX, self.table_id)
write!(f, "{}/{}", TABLE_ROUTE_PREFIX, self.table_id)
}
}
@@ -89,7 +83,7 @@ impl TableRouteManager {
Txn,
impl FnOnce(&Vec<TxnOpResponse>) -> Result<Option<TableRouteValue>>,
) {
let key = NextTableRouteKey::new(table_id);
let key = TableRouteKey::new(table_id);
let raw_key = key.as_raw_key();
let txn = Txn::new().and_then(vec![TxnOp::Get(raw_key.clone())]);
@@ -105,7 +99,7 @@ impl TableRouteManager {
Txn,
impl FnOnce(&Vec<TxnOpResponse>) -> Result<Option<TableRouteValue>>,
)> {
let key = NextTableRouteKey::new(table_id);
let key = TableRouteKey::new(table_id);
let raw_key = key.as_raw_key();
let txn = Txn::new()
@@ -133,7 +127,7 @@ impl TableRouteManager {
Txn,
impl FnOnce(&Vec<TxnOpResponse>) -> Result<Option<TableRouteValue>>,
)> {
let key = NextTableRouteKey::new(table_id);
let key = TableRouteKey::new(table_id);
let raw_key = key.as_raw_key();
let raw_value = current_table_route_value.try_as_raw_value()?;
let new_raw_value: Vec<u8> = new_table_route_value.try_as_raw_value()?;
@@ -156,7 +150,7 @@ impl TableRouteManager {
table_id: TableId,
table_route_value: &TableRouteValue,
) -> Result<Txn> {
let key = NextTableRouteKey::new(table_id);
let key = TableRouteKey::new(table_id);
let raw_key = key.as_raw_key();
let raw_value = table_route_value.try_as_raw_value()?;
let removed_key = to_removed_key(&String::from_utf8_lossy(&raw_key));
@@ -190,7 +184,7 @@ impl TableRouteManager {
}
pub async fn get(&self, table_id: TableId) -> Result<Option<TableRouteValue>> {
let key = NextTableRouteKey::new(table_id);
let key = TableRouteKey::new(table_id);
self.kv_backend
.get(&key.as_raw_key())
.await?
@@ -200,7 +194,7 @@ impl TableRouteManager {
#[cfg(test)]
pub async fn get_removed(&self, table_id: TableId) -> Result<Option<TableRouteValue>> {
let key = NextTableRouteKey::new(table_id).to_string();
let key = TableRouteKey::new(table_id).to_string();
let removed_key = to_removed_key(&key).into_bytes();
self.kv_backend
.get(&removed_key)
@@ -219,86 +213,3 @@ impl TableRouteManager {
.transpose()
}
}
#[deprecated(since = "0.4.0", note = "Please use the NextTableRouteKey instead")]
#[derive(Copy, Clone)]
pub struct TableRouteKey<'a> {
pub table_id: TableId,
pub catalog_name: &'a str,
pub schema_name: &'a str,
pub table_name: &'a str,
}
impl<'a> TableRouteKey<'a> {
pub fn with_table_name(table_id: TableId, t: &'a TableName) -> Self {
Self {
table_id,
catalog_name: &t.catalog_name,
schema_name: &t.schema_name,
table_name: &t.table_name,
}
}
pub fn prefix(&self) -> String {
format!(
"{}-{}-{}-{}",
TABLE_ROUTE_PREFIX, self.catalog_name, self.schema_name, self.table_name
)
}
pub fn removed_key(&self) -> String {
to_removed_key(&self.to_string())
}
}
impl<'a> Display for TableRouteKey<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}-{}", self.prefix(), self.table_id)
}
}
#[cfg(test)]
mod tests {
use api::v1::meta::TableName as PbTableName;
use super::TableRouteKey;
#[test]
fn test_table_route_key() {
let key = TableRouteKey {
table_id: 123,
catalog_name: "greptime",
schema_name: "public",
table_name: "demo",
};
let prefix = key.prefix();
assert_eq!("__meta_table_route-greptime-public-demo", prefix);
let key_string = key.to_string();
assert_eq!("__meta_table_route-greptime-public-demo-123", key_string);
let removed = key.removed_key();
assert_eq!(
"__removed-__meta_table_route-greptime-public-demo-123",
removed
);
}
#[test]
fn test_with_table_name() {
let table_name = PbTableName {
catalog_name: "greptime".to_string(),
schema_name: "public".to_string(),
table_name: "demo".to_string(),
};
let key = TableRouteKey::with_table_name(123, &table_name);
assert_eq!(123, key.table_id);
assert_eq!("greptime", key.catalog_name);
assert_eq!("public", key.schema_name);
assert_eq!("demo", key.table_name);
}
}