From c9501053e5f8cca915405cdaee6583808ca700f7 Mon Sep 17 00:00:00 2001 From: Weny Xu Date: Tue, 15 Jul 2025 14:06:27 +0800 Subject: [PATCH] fix: fix state transition in create table procedure (#6523) Signed-off-by: WenyXu --- src/common/meta/src/ddl/alter_table.rs | 3 +-- src/common/meta/src/ddl/create_table.rs | 17 ++++++++++------- src/common/meta/src/ddl/utils.rs | 1 + 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/common/meta/src/ddl/alter_table.rs b/src/common/meta/src/ddl/alter_table.rs index 1775bd2882..ac882cf9a9 100644 --- a/src/common/meta/src/ddl/alter_table.rs +++ b/src/common/meta/src/ddl/alter_table.rs @@ -227,7 +227,6 @@ impl AlterTableProcedure { } fn handle_alter_region_response(&mut self, mut results: Vec) -> Result<()> { - self.data.state = AlterTableState::UpdateMetadata; if let Some(column_metadatas) = extract_column_metadatas(&mut results, TABLE_COLUMN_METADATA_EXTENSION_KEY)? { @@ -235,7 +234,7 @@ impl AlterTableProcedure { } else { warn!("altering table result doesn't contains extension key `{TABLE_COLUMN_METADATA_EXTENSION_KEY}`,leaving the table's column metadata unchanged"); } - + self.data.state = AlterTableState::UpdateMetadata; Ok(()) } diff --git a/src/common/meta/src/ddl/create_table.rs b/src/common/meta/src/ddl/create_table.rs index e1e2649de5..45b7336229 100644 --- a/src/common/meta/src/ddl/create_table.rs +++ b/src/common/meta/src/ddl/create_table.rs @@ -21,7 +21,7 @@ use common_error::ext::BoxedError; use common_procedure::error::{ ExternalSnafu, FromJsonSnafu, Result as ProcedureResult, ToJsonSnafu, }; -use common_procedure::{Context as ProcedureContext, LockKey, Procedure, Status}; +use common_procedure::{Context as ProcedureContext, LockKey, Procedure, ProcedureId, Status}; use common_telemetry::tracing_context::TracingContext; use common_telemetry::{info, warn}; use futures::future::join_all; @@ -246,8 +246,6 @@ impl CreateTableProcedure { } } - self.creator.data.state = CreateTableState::CreateMetadata; - let mut results = join_all(create_region_tasks) .await .into_iter() @@ -261,6 +259,7 @@ impl CreateTableProcedure { warn!("creating table result doesn't contains extension key `{TABLE_COLUMN_METADATA_EXTENSION_KEY}`,leaving the table's column metadata unchanged"); } + self.creator.data.state = CreateTableState::CreateMetadata; Ok(Status::executing(true)) } @@ -268,8 +267,9 @@ impl CreateTableProcedure { /// /// Abort(not-retry): /// - Failed to create table metadata. - async fn on_create_metadata(&mut self) -> Result { + async fn on_create_metadata(&mut self, pid: ProcedureId) -> Result { let table_id = self.table_id(); + let table_ref = self.creator.data.table_ref(); let manager = &self.context.table_metadata_manager; let mut raw_table_info = self.table_info().clone(); @@ -289,7 +289,10 @@ impl CreateTableProcedure { self.context .register_failure_detectors(detecting_regions) .await; - info!("Created table metadata for table {table_id}"); + info!( + "Successfully created table: {}, table_id: {}, procedure_id: {}", + table_ref, table_id, pid + ); self.creator.opening_regions.clear(); Ok(Status::done_with_output(table_id)) @@ -317,7 +320,7 @@ impl Procedure for CreateTableProcedure { Ok(()) } - async fn execute(&mut self, _ctx: &ProcedureContext) -> ProcedureResult { + async fn execute(&mut self, ctx: &ProcedureContext) -> ProcedureResult { let state = &self.creator.data.state; let _timer = metrics::METRIC_META_PROCEDURE_CREATE_TABLE @@ -327,7 +330,7 @@ impl Procedure for CreateTableProcedure { match state { CreateTableState::Prepare => self.on_prepare().await, CreateTableState::DatanodeCreateRegions => self.on_datanode_create_regions().await, - CreateTableState::CreateMetadata => self.on_create_metadata().await, + CreateTableState::CreateMetadata => self.on_create_metadata(ctx.procedure_id).await, } .map_err(map_to_procedure_error) } diff --git a/src/common/meta/src/ddl/utils.rs b/src/common/meta/src/ddl/utils.rs index c0e8bd96e0..a5cbfd9b77 100644 --- a/src/common/meta/src/ddl/utils.rs +++ b/src/common/meta/src/ddl/utils.rs @@ -446,6 +446,7 @@ pub fn extract_column_metadatas( .collect::>(); if schemas.is_empty() { + warn!("extract_column_metadatas: no extension key `{key}` found in results"); return Ok(None); }