mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-06 21:32:58 +00:00
fix: table options can't be found in distributed mode (#2209)
* fix: table options can't be found in distributed mode * refactor: use iterator for regions_numbers * chore: remove TODO
This commit is contained in:
@@ -215,9 +215,14 @@ impl TableMetadataManager {
|
|||||||
/// The caller MUST ensure it has the exclusive access to `TableNameKey`.
|
/// The caller MUST ensure it has the exclusive access to `TableNameKey`.
|
||||||
pub async fn create_table_metadata(
|
pub async fn create_table_metadata(
|
||||||
&self,
|
&self,
|
||||||
table_info: RawTableInfo,
|
mut table_info: RawTableInfo,
|
||||||
region_routes: Vec<RegionRoute>,
|
region_routes: Vec<RegionRoute>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
let region_numbers = region_routes
|
||||||
|
.iter()
|
||||||
|
.map(|region| region.region.id.region_number())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
table_info.meta.region_numbers = region_numbers;
|
||||||
let table_id = table_info.ident.table_id;
|
let table_id = table_info.ident.table_id;
|
||||||
|
|
||||||
// Creates table name.
|
// Creates table name.
|
||||||
@@ -524,7 +529,7 @@ mod tests {
|
|||||||
assert_eq!(removed, to_removed_key(key));
|
assert_eq!(removed, to_removed_key(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_test_table_info() -> TableInfo {
|
fn new_test_table_info(region_numbers: impl Iterator<Item = u32>) -> TableInfo {
|
||||||
let column_schemas = vec![
|
let column_schemas = vec![
|
||||||
ColumnSchema::new("col1", ConcreteDataType::int32_datatype(), true),
|
ColumnSchema::new("col1", ConcreteDataType::int32_datatype(), true),
|
||||||
ColumnSchema::new(
|
ColumnSchema::new(
|
||||||
@@ -546,6 +551,7 @@ mod tests {
|
|||||||
.primary_key_indices(vec![0])
|
.primary_key_indices(vec![0])
|
||||||
.engine("engine")
|
.engine("engine")
|
||||||
.next_column_id(3)
|
.next_column_id(3)
|
||||||
|
.region_numbers(region_numbers.collect::<Vec<_>>())
|
||||||
.build()
|
.build()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
TableInfoBuilder::default()
|
TableInfoBuilder::default()
|
||||||
@@ -578,9 +584,10 @@ mod tests {
|
|||||||
async fn test_create_table_metadata() {
|
async fn test_create_table_metadata() {
|
||||||
let mem_kv = Arc::new(MemoryKvBackend::default());
|
let mem_kv = Arc::new(MemoryKvBackend::default());
|
||||||
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
||||||
let table_info: RawTableInfo = new_test_table_info().into();
|
|
||||||
let region_route = new_test_region_route();
|
let region_route = new_test_region_route();
|
||||||
let region_routes = vec![region_route.clone()];
|
let region_routes = vec![region_route.clone()];
|
||||||
|
let table_info: RawTableInfo =
|
||||||
|
new_test_table_info(region_routes.iter().map(|r| r.region.id.region_number())).into();
|
||||||
// creates metadata.
|
// creates metadata.
|
||||||
table_metadata_manager
|
table_metadata_manager
|
||||||
.create_table_metadata(table_info.clone(), region_routes.clone())
|
.create_table_metadata(table_info.clone(), region_routes.clone())
|
||||||
@@ -612,11 +619,12 @@ mod tests {
|
|||||||
async fn test_delete_table_metadata() {
|
async fn test_delete_table_metadata() {
|
||||||
let mem_kv = Arc::new(MemoryKvBackend::default());
|
let mem_kv = Arc::new(MemoryKvBackend::default());
|
||||||
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
||||||
let table_info: RawTableInfo = new_test_table_info().into();
|
|
||||||
let table_id = table_info.ident.table_id;
|
|
||||||
let region_route = new_test_region_route();
|
let region_route = new_test_region_route();
|
||||||
let datanode_id = 2;
|
|
||||||
let region_routes = vec![region_route.clone()];
|
let region_routes = vec![region_route.clone()];
|
||||||
|
let table_info: RawTableInfo =
|
||||||
|
new_test_table_info(region_routes.iter().map(|r| r.region.id.region_number())).into();
|
||||||
|
let table_id = table_info.ident.table_id;
|
||||||
|
let datanode_id = 2;
|
||||||
let table_route_value = TableRouteValue::new(region_routes.clone());
|
let table_route_value = TableRouteValue::new(region_routes.clone());
|
||||||
|
|
||||||
// creates metadata.
|
// creates metadata.
|
||||||
@@ -682,10 +690,11 @@ mod tests {
|
|||||||
async fn test_rename_table() {
|
async fn test_rename_table() {
|
||||||
let mem_kv = Arc::new(MemoryKvBackend::default());
|
let mem_kv = Arc::new(MemoryKvBackend::default());
|
||||||
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
||||||
let table_info: RawTableInfo = new_test_table_info().into();
|
|
||||||
let table_id = table_info.ident.table_id;
|
|
||||||
let region_route = new_test_region_route();
|
let region_route = new_test_region_route();
|
||||||
let region_routes = vec![region_route.clone()];
|
let region_routes = vec![region_route.clone()];
|
||||||
|
let table_info: RawTableInfo =
|
||||||
|
new_test_table_info(region_routes.iter().map(|r| r.region.id.region_number())).into();
|
||||||
|
let table_id = table_info.ident.table_id;
|
||||||
// creates metadata.
|
// creates metadata.
|
||||||
table_metadata_manager
|
table_metadata_manager
|
||||||
.create_table_metadata(table_info.clone(), region_routes.clone())
|
.create_table_metadata(table_info.clone(), region_routes.clone())
|
||||||
@@ -746,10 +755,11 @@ mod tests {
|
|||||||
async fn test_update_table_info() {
|
async fn test_update_table_info() {
|
||||||
let mem_kv = Arc::new(MemoryKvBackend::default());
|
let mem_kv = Arc::new(MemoryKvBackend::default());
|
||||||
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
||||||
let table_info: RawTableInfo = new_test_table_info().into();
|
|
||||||
let table_id = table_info.ident.table_id;
|
|
||||||
let region_route = new_test_region_route();
|
let region_route = new_test_region_route();
|
||||||
let region_routes = vec![region_route.clone()];
|
let region_routes = vec![region_route.clone()];
|
||||||
|
let table_info: RawTableInfo =
|
||||||
|
new_test_table_info(region_routes.iter().map(|r| r.region.id.region_number())).into();
|
||||||
|
let table_id = table_info.ident.table_id;
|
||||||
// creates metadata.
|
// creates metadata.
|
||||||
table_metadata_manager
|
table_metadata_manager
|
||||||
.create_table_metadata(table_info.clone(), region_routes.clone())
|
.create_table_metadata(table_info.clone(), region_routes.clone())
|
||||||
@@ -811,9 +821,10 @@ mod tests {
|
|||||||
async fn test_update_table_route() {
|
async fn test_update_table_route() {
|
||||||
let mem_kv = Arc::new(MemoryKvBackend::default());
|
let mem_kv = Arc::new(MemoryKvBackend::default());
|
||||||
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
let table_metadata_manager = TableMetadataManager::new(mem_kv);
|
||||||
let table_info: RawTableInfo = new_test_table_info().into();
|
|
||||||
let region_route = new_test_region_route();
|
let region_route = new_test_region_route();
|
||||||
let region_routes = vec![region_route.clone()];
|
let region_routes = vec![region_route.clone()];
|
||||||
|
let table_info: RawTableInfo =
|
||||||
|
new_test_table_info(region_routes.iter().map(|r| r.region.id.region_number())).into();
|
||||||
let table_id = table_info.ident.table_id;
|
let table_id = table_info.ident.table_id;
|
||||||
let current_table_route_value = TableRouteValue::new(region_routes.clone());
|
let current_table_route_value = TableRouteValue::new(region_routes.clone());
|
||||||
// creates metadata.
|
// creates metadata.
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ impl DistInstance {
|
|||||||
info!("Successfully created distributed table '{table_name}' with table id {table_id}");
|
info!("Successfully created distributed table '{table_name}' with table id {table_id}");
|
||||||
|
|
||||||
table_info.ident.table_id = table_id;
|
table_info.ident.table_id = table_id;
|
||||||
|
|
||||||
let table_info = Arc::new(table_info.try_into().context(error::CreateTableInfoSnafu)?);
|
let table_info = Arc::new(table_info.try_into().context(error::CreateTableInfoSnafu)?);
|
||||||
|
|
||||||
create_table.table_id = Some(api::v1::TableId { id: table_id });
|
create_table.table_id = Some(api::v1::TableId { id: table_id });
|
||||||
|
|||||||
@@ -110,12 +110,10 @@ impl CreateTableProcedure {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let table_id = self.table_info().ident.table_id as TableId;
|
let table_id = self.table_info().ident.table_id as TableId;
|
||||||
|
|
||||||
let manager = &self.context.table_metadata_manager;
|
let manager = &self.context.table_metadata_manager;
|
||||||
|
|
||||||
let raw_table_info = self.table_info().clone();
|
let raw_table_info = self.table_info().clone();
|
||||||
let region_routes = self.region_routes().clone();
|
let region_routes = self.region_routes().clone();
|
||||||
|
|
||||||
manager
|
manager
|
||||||
.create_table_metadata(raw_table_info, region_routes)
|
.create_table_metadata(raw_table_info, region_routes)
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -80,38 +80,57 @@ async fn test_create_database_and_insert_query(instance: Arc<dyn MockInstance>)
|
|||||||
#[apply(both_instances_cases)]
|
#[apply(both_instances_cases)]
|
||||||
async fn test_show_create_table(instance: Arc<dyn MockInstance>) {
|
async fn test_show_create_table(instance: Arc<dyn MockInstance>) {
|
||||||
let frontend = instance.frontend();
|
let frontend = instance.frontend();
|
||||||
|
let sql = if instance.is_distributed_mode() {
|
||||||
let output = execute_sql(
|
|
||||||
&frontend,
|
|
||||||
r#"create table demo(
|
r#"create table demo(
|
||||||
host STRING,
|
host STRING,
|
||||||
cpu DOUBLE,
|
cpu DOUBLE,
|
||||||
memory DOUBLE,
|
memory DOUBLE,
|
||||||
ts bigint,
|
ts bigint,
|
||||||
TIME INDEX(ts)
|
TIME INDEX(ts)
|
||||||
)"#,
|
)
|
||||||
)
|
PARTITION BY RANGE COLUMNS (ts) (
|
||||||
.await;
|
PARTITION r0 VALUES LESS THAN (1),
|
||||||
|
PARTITION r1 VALUES LESS THAN (10),
|
||||||
|
PARTITION r2 VALUES LESS THAN (100),
|
||||||
|
PARTITION r3 VALUES LESS THAN (MAXVALUE),
|
||||||
|
)"#
|
||||||
|
} else {
|
||||||
|
r#"create table demo(
|
||||||
|
host STRING,
|
||||||
|
cpu DOUBLE,
|
||||||
|
memory DOUBLE,
|
||||||
|
ts bigint,
|
||||||
|
TIME INDEX(ts)
|
||||||
|
)"#
|
||||||
|
};
|
||||||
|
let output = execute_sql(&frontend, sql).await;
|
||||||
assert!(matches!(output, Output::AffectedRows(0)));
|
assert!(matches!(output, Output::AffectedRows(0)));
|
||||||
|
|
||||||
let output = execute_sql(&frontend, "show create table demo").await;
|
let output = execute_sql(&frontend, "show create table demo").await;
|
||||||
|
|
||||||
let expected = if instance.is_distributed_mode() {
|
let expected = if instance.is_distributed_mode() {
|
||||||
"\
|
"\
|
||||||
+-------+-----------------------------------+
|
+-------+----------------------------------------------------------+
|
||||||
| Table | Create Table |
|
| Table | Create Table |
|
||||||
+-------+-----------------------------------+
|
+-------+----------------------------------------------------------+
|
||||||
| demo | CREATE TABLE IF NOT EXISTS demo ( |
|
| demo | CREATE TABLE IF NOT EXISTS demo ( |
|
||||||
| | host STRING NULL, |
|
| | host STRING NULL, |
|
||||||
| | cpu DOUBLE NULL, |
|
| | cpu DOUBLE NULL, |
|
||||||
| | memory DOUBLE NULL, |
|
| | memory DOUBLE NULL, |
|
||||||
| | ts BIGINT NOT NULL, |
|
| | ts BIGINT NOT NULL, |
|
||||||
| | TIME INDEX (ts) |
|
| | TIME INDEX (ts) |
|
||||||
| | ) |
|
| | ) |
|
||||||
| | |
|
| | PARTITION BY RANGE COLUMNS (ts) ( |
|
||||||
| | ENGINE=mito |
|
| | PARTITION r0 VALUES LESS THAN (1), |
|
||||||
| | |
|
| | PARTITION r1 VALUES LESS THAN (10), |
|
||||||
+-------+-----------------------------------+"
|
| | PARTITION r2 VALUES LESS THAN (100), |
|
||||||
|
| | PARTITION r3 VALUES LESS THAN (MAXVALUE) |
|
||||||
|
| | ) |
|
||||||
|
| | ENGINE=mito |
|
||||||
|
| | WITH( |
|
||||||
|
| | regions = 4 |
|
||||||
|
| | ) |
|
||||||
|
+-------+----------------------------------------------------------+"
|
||||||
} else {
|
} else {
|
||||||
"\
|
"\
|
||||||
+-------+-----------------------------------+
|
+-------+-----------------------------------+
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ SHOW CREATE TABLE system_metrics;
|
|||||||
| | PARTITION r2 VALUES LESS THAN (MAXVALUE) |
|
| | PARTITION r2 VALUES LESS THAN (MAXVALUE) |
|
||||||
| | ) |
|
| | ) |
|
||||||
| | ENGINE=mito |
|
| | ENGINE=mito |
|
||||||
| | |
|
| | WITH( |
|
||||||
|
| | regions = 3 |
|
||||||
|
| | ) |
|
||||||
+----------------+----------------------------------------------------------+
|
+----------------+----------------------------------------------------------+
|
||||||
|
|
||||||
DROP TABLE system_metrics;
|
DROP TABLE system_metrics;
|
||||||
@@ -62,7 +64,9 @@ show create table table_without_partition;
|
|||||||
| | ) |
|
| | ) |
|
||||||
| | |
|
| | |
|
||||||
| | ENGINE=mito |
|
| | ENGINE=mito |
|
||||||
| | |
|
| | WITH( |
|
||||||
|
| | regions = 1 |
|
||||||
|
| | ) |
|
||||||
+-------------------------+---------------------------------------------------------+
|
+-------------------------+---------------------------------------------------------+
|
||||||
|
|
||||||
drop table table_without_partition;
|
drop table table_without_partition;
|
||||||
|
|||||||
Reference in New Issue
Block a user