From 3e48d2aafba5ad26a5fd4adc6af825f29ac707c5 Mon Sep 17 00:00:00 2001 From: DarvenDuan Date: Wed, 11 Sep 2024 17:35:44 +0800 Subject: [PATCH] support schema change thread fast fail --- be/src/olap/schema_change.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index 1d7f18bee8b87d5..a59f06c8b6b580c 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -508,7 +508,14 @@ Status VSchemaChangeDirectly::_inner_process(RowsetReaderSharedPtr rowset_reader TabletSchemaSPtr base_tablet_schema, TabletSchemaSPtr new_tablet_schema) { bool eof = false; + int64_t tablet_id = new_tablet->tablet_id(); do { + // tablet may be dropped due to user cancel, schema change thread should fast fail + // and release tablet lock. + if (StorageEngine::instance()->tablet_manager()->get_tablet(tablet_id) == nullptr) { + return Status::Error("fail to find tablet. tablet_id={}", + tablet_id); + } auto new_block = vectorized::Block::create_unique(new_tablet_schema->create_block()); auto ref_block = vectorized::Block::create_unique(base_tablet_schema->create_block()); @@ -578,7 +585,14 @@ Status VBaseSchemaChangeWithSorting::_inner_process(RowsetReaderSharedPtr rowset auto new_block = vectorized::Block::create_unique(new_tablet_schema->create_block()); bool eof = false; + int64_t tablet_id = new_tablet->tablet_id(); do { + // tablet may be dropped due to user cancel, schema change thread should fast fail + // and release tablet lock. + if (StorageEngine::instance()->tablet_manager()->get_tablet(tablet_id) == nullptr) { + return Status::Error("fail to find tablet. tablet_id={}", + tablet_id); + } auto ref_block = vectorized::Block::create_unique(base_tablet_schema->create_block()); auto st = rowset_reader->next_block(ref_block.get()); if (!st) {