[BUG.FIX] fix no ddl stmt str while drop fts index.

This commit is contained in:
Tyshawn 2024-09-18 06:28:10 +00:00 committed by ob-robot
parent 45006578eb
commit b23f28968a
5 changed files with 33 additions and 6 deletions

View File

@ -1069,6 +1069,7 @@ int ObDDLScheduler::create_ddl_task(const ObCreateDDLTaskParam &param,
break;
case DDL_DROP_FTS_INDEX:
case DDL_DROP_MULVALUE_INDEX:
drop_index_arg = static_cast<const obrpc::ObDropIndexArg *>(param.ddl_arg_);
if (OB_FAIL(create_drop_fts_index_task(proxy,
param.src_table_schema_,
param.schema_version_,
@ -1076,6 +1077,7 @@ int ObDDLScheduler::create_ddl_task(const ObCreateDDLTaskParam &param,
param.aux_rowkey_doc_schema_,
param.aux_doc_rowkey_schema_,
param.aux_doc_word_schema_,
drop_index_arg,
*param.allocator_,
task_record))) {
LOG_WARN("fail to create drop fts index task", K(ret));
@ -1796,6 +1798,7 @@ int ObDDLScheduler::create_drop_fts_index_task(
const share::schema::ObTableSchema *rowkey_doc_schema,
const share::schema::ObTableSchema *doc_rowkey_schema,
const share::schema::ObTableSchema *doc_word_schema,
const obrpc::ObDropIndexArg *drop_index_arg,
ObIAllocator &allocator,
ObDDLTaskRecord &task_record)
{
@ -1811,9 +1814,9 @@ int ObDDLScheduler::create_drop_fts_index_task(
if (OB_UNLIKELY(!is_inited_)) {
ret = OB_NOT_INIT;
LOG_WARN("not init", K(ret));
} else if (OB_ISNULL(index_schema)) {
} else if (OB_ISNULL(index_schema) || OB_ISNULL(drop_index_arg)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), KP(index_schema));
LOG_WARN("invalid argument", K(ret), KP(index_schema), KP(drop_index_arg));
} else if (FALSE_IT(is_fts_index = index_schema->is_fts_index_aux())) {
} else if (OB_UNLIKELY(schema_version <= 0)) {
ret = OB_INVALID_ARGUMENT;
@ -1860,6 +1863,7 @@ int ObDDLScheduler::create_drop_fts_index_task(
doc_rowkey,
domain_index,
fts_doc_word,
drop_index_arg->ddl_stmt_str_,
schema_version,
consumer_group_id))) {
LOG_WARN("init drop index task failed", K(ret), K(data_table_id), K(domain_index));

View File

@ -497,6 +497,7 @@ private:
const share::schema::ObTableSchema *rowkey_doc_schema,
const share::schema::ObTableSchema *doc_rowkey_schema,
const share::schema::ObTableSchema *doc_word_schema,
const obrpc::ObDropIndexArg *drop_index_arg,
ObIAllocator &allocator,
ObDDLTaskRecord &task_record);

View File

@ -48,6 +48,7 @@ int ObDropFTSIndexTask::init(
const ObFTSDDLChildTaskInfo &doc_rowkey,
const ObFTSDDLChildTaskInfo &domain_index,
const ObFTSDDLChildTaskInfo &fts_doc_word,
const ObString &ddl_stmt_str,
const int64_t schema_version,
const int64_t consumer_group_id)
{
@ -73,6 +74,8 @@ int ObDropFTSIndexTask::init(
LOG_WARN("fail to deep copy from other", K(ret), K(domain_index));
} else if (is_fts_task && OB_FAIL(fts_doc_word_.deep_copy_from_other(fts_doc_word, allocator_))) {
LOG_WARN("fail to deep copy from other", K(ret), K(fts_doc_word));
} else if (OB_FAIL(set_ddl_stmt_str(ddl_stmt_str))) {
LOG_WARN("fail to deep copy drop index arg", K(ret));
} else {
task_type_ = ddl_type;
set_gmt_create(ObTimeUtility::current_time());
@ -188,6 +191,8 @@ int ObDropFTSIndexTask::serialize_params_to_message(char *buf, const int64_t buf
LOG_WARN("fail to serialize aux fts index table info", K(ret), K(domain_index_));
} else if (OB_FAIL(fts_doc_word_.serialize(buf, buf_size, pos))) {
LOG_WARN("fail to serialize aux doc word aux table info", K(ret), K(fts_doc_word_));
} else if (OB_FAIL(ddl_stmt_str_.serialize(buf, buf_size, pos))) {
LOG_WARN("fail to serialize ddl stmt string", K(ret));
}
return ret;
}
@ -199,8 +204,8 @@ int ObDropFTSIndexTask::deserialize_params_from_message(
int64_t &pos)
{
int ret = OB_SUCCESS;
obrpc::ObDropIndexArg tmp_drop_index_arg;
ObFTSDDLChildTaskInfo tmp_info;
ObString tmp_ddl_stmt_str;
if (OB_UNLIKELY(!is_valid_tenant_id(tenant_id) || nullptr == buf || buf_size <= 0)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arguments", K(ret), K(tenant_id), KP(buf), K(buf_size));
@ -222,6 +227,13 @@ int ObDropFTSIndexTask::deserialize_params_from_message(
LOG_WARN("fail to deserialize aux doc word table info", K(ret));
} else if (OB_FAIL(fts_doc_word_.deep_copy_from_other(tmp_info, allocator_))) {
LOG_WARN("fail to deep copy from tmp info", K(ret), K(tmp_info));
} else if (OB_UNLIKELY(pos >= buf_size)) {
// The end of the message has been reached. It is an old version message without drop index arg.
// just skip.
} else if (OB_FAIL(tmp_ddl_stmt_str.deserialize(buf, buf_size, pos))) {
LOG_WARN("fail to deserialize drop index arg", K(ret));
} else if (OB_FAIL(ob_write_string(allocator_, tmp_ddl_stmt_str, ddl_stmt_str_))) {
LOG_WARN("fail to copy ddl stmt string", K(ret), K(tmp_ddl_stmt_str));
}
return ret;
}
@ -232,7 +244,8 @@ int64_t ObDropFTSIndexTask::get_serialize_param_size() const
+ rowkey_doc_.get_serialize_size()
+ doc_rowkey_.get_serialize_size()
+ domain_index_.get_serialize_size()
+ fts_doc_word_.get_serialize_size();
+ fts_doc_word_.get_serialize_size()
+ ddl_stmt_str_.get_serialize_size();
}
int ObDropFTSIndexTask::check_switch_succ()
@ -417,6 +430,7 @@ int ObDropFTSIndexTask::create_drop_index_task(
const ObTableSchema *index_schema = nullptr;
const ObDatabaseSchema *database_schema = nullptr;
const ObTableSchema *data_table_schema = nullptr;
ObSqlString drop_index_sql;
bool is_index_exist = false;
if (OB_ISNULL(root_service_)) {
ret = OB_ERR_UNEXPECTED;
@ -444,6 +458,8 @@ int ObDropFTSIndexTask::create_drop_index_task(
} else if (OB_UNLIKELY(nullptr == database_schema || nullptr == data_table_schema)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected error, schema is nullptr", K(ret), KP(database_schema), KP(data_table_schema));
} else if (index_schema->is_fts_index_aux() && OB_FAIL(drop_index_sql.assign(ddl_stmt_str_))) {
LOG_WARN("fail to assign drop index sql", K(ret));
} else {
int64_t ddl_rpc_timeout_us = 0;
obrpc::ObDropIndexArg arg;
@ -460,6 +476,9 @@ int ObDropFTSIndexTask::create_drop_index_task(
arg.ddl_stmt_str_ = nullptr;
arg.is_add_to_scheduler_ = true;
arg.task_id_ = task_id_;
if (index_schema->is_fts_index_aux()) {
arg.ddl_stmt_str_ = drop_index_sql.string();
}
if (OB_FAIL(ObDDLUtil::get_ddl_rpc_timeout(
index_schema->get_all_part_num() + data_table_schema->get_all_part_num(), ddl_rpc_timeout_us))) {
LOG_WARN("fail to get ddl rpc timeout", K(ret));
@ -470,7 +489,8 @@ int ObDropFTSIndexTask::create_drop_index_task(
}
LOG_INFO("drop index", K(ret), K(index_tid), K(index_name), K(task_id),
"data table name", data_table_schema->get_table_name_str(),
"database name", database_schema->get_database_name_str());
"database name", database_schema->get_database_name_str(),
K(drop_index_sql.ptr()));
}
return ret;
}

View File

@ -48,6 +48,7 @@ public:
const ObFTSDDLChildTaskInfo &doc_rowkey,
const ObFTSDDLChildTaskInfo &domain_index,
const ObFTSDDLChildTaskInfo &fts_doc_word,
const ObString &ddl_stmt_str,
const int64_t schema_version,
const int64_t consumer_group_id);
int init(const ObDDLTaskRecord &task_record);

View File

@ -774,7 +774,8 @@ int ObIndexBuilder::submit_drop_index_task(ObMySQLTransaction &trans,
index_schema.get_schema_version(),
0/*parallelism*/,
arg.consumer_group_id_,
&allocator);
&allocator,
&arg);
param.aux_rowkey_doc_schema_ = &(index_schemas.at(aux_rowkey_doc_ith));
param.aux_doc_rowkey_schema_ = &(index_schemas.at(aux_doc_rowkey_ith));