From 5d4aacc220790e15b9af345e540724c099d49334 Mon Sep 17 00:00:00 2001 From: "zhenhan.gong@gmail.com" Date: Wed, 24 Apr 2024 13:25:02 +0000 Subject: [PATCH] add online ddl test case && minor fix --- src/rootserver/ob_ddl_operator.cpp | 74 ++++++++++++++++++++++++++++ src/rootserver/ob_ddl_operator.h | 11 +++++ src/sql/das/ob_text_retrieval_op.cpp | 2 + 3 files changed, 87 insertions(+) diff --git a/src/rootserver/ob_ddl_operator.cpp b/src/rootserver/ob_ddl_operator.cpp index fd31c502e..c46dc8e13 100644 --- a/src/rootserver/ob_ddl_operator.cpp +++ b/src/rootserver/ob_ddl_operator.cpp @@ -21,6 +21,7 @@ #include "share/ob_version.h" #include "share/ob_autoincrement_service.h" #include "share/ob_cluster_version.h" +#include "share/ob_fts_index_builder_util.h" #include "share/resource_manager/ob_resource_manager_proxy.h" #include "share/schema/ob_schema_service.h" #include "share/schema/ob_schema_getter_guard.h" @@ -3559,12 +3560,85 @@ int ObDDLOperator::alter_table_rename_index( new_index_status, trans, new_index_table_schema))) { LOG_WARN("fail to alter table rename index", K(ret), K(tenant_id), KPC(index_table_schema), K(new_index_table_name)); + } else if (is_fts_index_aux(index_table_schema->get_index_type())) { + if (OB_FAIL(alter_table_rename_built_in_fts_index_(tenant_id, + data_table_id, + database_id, + index_name, + new_index_name, + new_index_status, + schema_guard, + trans, + allocator))) { + LOG_WARN("failed to rename built in fts index", K(ret), K(tenant_id), + K(data_table_id), K(database_id), K(index_name), K(new_index_name)); + } } } } return ret; } +int ObDDLOperator::alter_table_rename_built_in_fts_index_( + const uint64_t tenant_id, + const uint64_t data_table_id, + const uint64_t database_id, + const ObString &index_name, + const ObString &new_index_name, + const ObIndexStatus *new_index_status, + share::schema::ObSchemaGetterGuard &schema_guard, + common::ObMySQLTransaction &trans, + ObArenaAllocator &allocator) +{ + int ret = OB_SUCCESS; + SMART_VARS_3((ObTableSchema, new_fts_doc_word_schema), + (obrpc::ObCreateIndexArg, origin_index_arg), + (obrpc::ObCreateIndexArg, new_index_arg)) { + const ObTableSchema *origin_fts_doc_word_schema = NULL; + origin_index_arg.index_name_ = index_name; + origin_index_arg.index_type_ = INDEX_TYPE_FTS_DOC_WORD_LOCAL; + new_index_arg.index_name_ = new_index_name; + new_index_arg.index_type_ = INDEX_TYPE_FTS_DOC_WORD_LOCAL; + ObString origin_fts_doc_word_index_table_name; + ObString new_fts_doc_word_index_table_name; + if (OB_FAIL(ObFtsIndexBuilderUtil::generate_fts_aux_index_name(origin_index_arg, &allocator))) { + LOG_WARN("failed to generate origin fts doc word name", K(ret)); + } else if (OB_FAIL(ObFtsIndexBuilderUtil::generate_fts_aux_index_name(new_index_arg, &allocator))) { + LOG_WARN("failed to generate new fts doc word name", K(ret)); + } else if (OB_FAIL(ObTableSchema::build_index_table_name(allocator, + data_table_id, + origin_index_arg.index_name_, + origin_fts_doc_word_index_table_name))) { + LOG_WARN("failed to build origin fts doc word table name", K(ret), + K(data_table_id), K(origin_index_arg.index_name_)); + } else if (OB_FAIL(ObTableSchema::build_index_table_name(allocator, + data_table_id, + new_index_arg.index_name_, + new_fts_doc_word_index_table_name))) { + LOG_WARN("failed to build new fts doc word table name", K(ret), + K(data_table_id), K(new_index_arg.index_name_)); + } else if (OB_FAIL(schema_guard.get_table_schema(tenant_id, + database_id, + origin_fts_doc_word_index_table_name, + true/*is_index*/, + origin_fts_doc_word_schema, + false/*is_hidden*/, + true/*is_built_in_index*/))) { + LOG_WARN("failed to get origin fts_doc_word schema", K(ret)); + } else if (OB_FAIL(inner_alter_table_rename_index_(tenant_id, + origin_fts_doc_word_schema, + new_fts_doc_word_index_table_name, + new_index_status, + trans, + new_fts_doc_word_schema))) { + LOG_WARN("fail to alter table rename fts doc word index", + K(ret), K(tenant_id), KPC(origin_fts_doc_word_schema), + K(new_fts_doc_word_schema)); + } + } + return ret; +} + int ObDDLOperator::alter_table_rename_index_with_origin_index_name( const uint64_t tenant_id, const uint64_t index_table_id, diff --git a/src/rootserver/ob_ddl_operator.h b/src/rootserver/ob_ddl_operator.h index 2a6c381e8..4c9197f24 100644 --- a/src/rootserver/ob_ddl_operator.h +++ b/src/rootserver/ob_ddl_operator.h @@ -1153,6 +1153,17 @@ private: int64_t routine_id); private: + int alter_table_rename_built_in_fts_index_( + const uint64_t tenant_id, + const uint64_t data_table_id, + const uint64_t database_id, + const ObString &index_name, + const ObString &new_index_name, + const ObIndexStatus *new_index_status, + share::schema::ObSchemaGetterGuard &schema_guard, + common::ObMySQLTransaction &trans, + ObArenaAllocator &allocator); + int inner_alter_table_rename_index_( const uint64_t tenant_id, const share::schema::ObTableSchema *index_table_schema, diff --git a/src/sql/das/ob_text_retrieval_op.cpp b/src/sql/das/ob_text_retrieval_op.cpp index e2cff3832..5e88b01dc 100644 --- a/src/sql/das/ob_text_retrieval_op.cpp +++ b/src/sql/das/ob_text_retrieval_op.cpp @@ -390,6 +390,8 @@ int ObTextRetrievalMerge::init_iters( } else if (FALSE_IT(next_batch_iter_idxes_.set_allocator(allocator_))) { } else if (OB_FAIL(next_batch_iter_idxes_.init(query_tokens_.count()))) { LOG_WARN("failed to init next batch iter idxes array", K(ret)); + } else if (OB_FAIL(next_batch_iter_idxes_.prepare_allocate(query_tokens_.count()))) { + LOG_WARN("failed to prepare allocate next batch iter idxes array", K(ret)); } else { next_batch_cnt_ = query_tokens.count(); }