diff --git a/src/rootserver/ddl_task/ob_ddl_task.cpp b/src/rootserver/ddl_task/ob_ddl_task.cpp index da551cb7e..c650feed7 100644 --- a/src/rootserver/ddl_task/ob_ddl_task.cpp +++ b/src/rootserver/ddl_task/ob_ddl_task.cpp @@ -2993,16 +2993,17 @@ int ObDDLTaskRecordOperator::update_parent_task_message( const int64_t tenant_id, const int64_t parent_task_id, const ObTableSchema &index_schema, - const uint64_t target_id, + const uint64_t target_table_id, + const uint64_t target_task_id, // task id maybe is OB_INVALID_ID ObDDLUpateParentTaskIDType update_type, ObIAllocator &allocator, common::ObISQLClient &proxy) { int ret = OB_SUCCESS; ObDDLTaskRecord task_record; - if (OB_INVALID_ID == tenant_id || OB_INVALID_ID == parent_task_id || OB_INVALID_ID == target_id) { + if (OB_INVALID_ID == tenant_id || OB_INVALID_ID == parent_task_id || OB_INVALID_ID == target_table_id) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid argument", K(ret), K(tenant_id), K(parent_task_id), K(target_id)); + LOG_WARN("invalid argument", K(ret), K(tenant_id), K(parent_task_id), K(target_table_id)); } else if (OB_FAIL(get_ddl_task_record(tenant_id, parent_task_id, GCTX.root_service_->get_sql_proxy(), allocator, task_record))) { LOG_WARN("fail to get ddl task record", K(ret), K(parent_task_id)); } else { @@ -3012,23 +3013,28 @@ int ObDDLTaskRecordOperator::update_parent_task_message( LOG_WARN("fail to init ObVecIndexBuildTask", K(ret), K(task_record)); } else if (UPDATE_CREATE_INDEX_ID == update_type) { if (index_schema.is_vec_rowkey_vid_type()) { - task.set_rowkey_vid_aux_table_id(target_id); + task.set_rowkey_vid_aux_table_id(target_table_id); + task.set_rowkey_vid_task_id(target_task_id); task.set_rowkey_vid_task_submitted(true); } else if (index_schema.is_vec_vid_rowkey_type()) { - task.set_vid_rowkey_aux_table_id(target_id); + task.set_vid_rowkey_aux_table_id(target_table_id); + task.set_vid_rowkey_task_id(target_task_id); task.set_vid_rowkey_task_submitted(true); } else if (index_schema.is_vec_delta_buffer_type()) { - task.set_delta_buffer_table_id(target_id); + task.set_delta_buffer_table_id(target_table_id); + task.set_delta_buffer_task_id(target_task_id); task.set_delta_buffer_task_submitted(true); } else if (index_schema.is_vec_index_id_type()) { - task.set_index_id_table_id(target_id); + task.set_index_id_table_id(target_table_id); + task.set_index_id_task_id(target_task_id); task.set_index_id_task_submitted(true); } else if (index_schema.is_vec_index_snapshot_data_type()) { - task.set_index_snapshot_data_table_id(target_id); + task.set_index_snapshot_data_table_id(target_table_id); + task.set_index_snapshot_task_id(target_task_id); task.set_index_snapshot_data_task_submitted(true); } } else if (UPDATE_DROP_INDEX_TASK_ID == update_type) { - task.set_drop_index_task_id(target_id); + task.set_drop_index_task_id(target_task_id); task.set_drop_index_task_submitted(true); } } diff --git a/src/rootserver/ddl_task/ob_ddl_task.h b/src/rootserver/ddl_task/ob_ddl_task.h index 1f8057caa..7f142702b 100755 --- a/src/rootserver/ddl_task/ob_ddl_task.h +++ b/src/rootserver/ddl_task/ob_ddl_task.h @@ -325,7 +325,8 @@ public: const int64_t tenant_id, const int64_t parent_task_id, const ObTableSchema &index_schema, - const uint64_t target_id, + const uint64_t target_table_id, + const uint64_t target_task_id, ObDDLUpateParentTaskIDType update_type, ObIAllocator &allocator, common::ObISQLClient &proxy); diff --git a/src/rootserver/ddl_task/ob_vec_index_build_task.cpp b/src/rootserver/ddl_task/ob_vec_index_build_task.cpp index 930e70397..b40f2bd4f 100644 --- a/src/rootserver/ddl_task/ob_vec_index_build_task.cpp +++ b/src/rootserver/ddl_task/ob_vec_index_build_task.cpp @@ -1786,25 +1786,23 @@ int ObVecIndexBuildTask::submit_drop_vec_index_task() LOG_WARN("fail to push back index_snapshot_data_table_id_", K(ret)); } else if (drop_index_arg.index_ids_.count() <= 0) { LOG_INFO("no table need to be drop, skip", K(ret)); // no table exist, skip drop - } else if (schema_guard.get_table_schema(tenant_id_, drop_index_arg.index_ids_.at(0), index_table_schema)) { - LOG_WARN("fail to get table schema", K(ret), K(drop_index_arg.index_ids_.at(0))); - } else if (OB_ISNULL(index_table_schema)) { + } else if (schema_guard.get_table_schema(tenant_id_, object_id_, data_table_schema)) { + LOG_WARN("fail to get table schema", K(ret), K(object_id_)); + } else if (OB_ISNULL(data_table_schema)) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("index schema is null", K(ret), KP(index_table_schema)); - } else if (OB_FAIL(schema_guard.get_database_schema(tenant_id_, index_table_schema->get_database_id(), database_schema))) { - LOG_WARN("get database schema failed", KR(ret), K(index_table_schema->get_database_id())); - } else if (OB_FAIL(schema_guard.get_table_schema(tenant_id_, index_table_schema->get_data_table_id(), data_table_schema))) { - LOG_WARN("get data table schema failed", KR(ret), K(index_table_schema->get_data_table_id())); - } else if (OB_UNLIKELY(nullptr == database_schema || nullptr == data_table_schema)) { + LOG_WARN("data_table_schema is null", K(ret), KP(data_table_schema)); + } else if (OB_FAIL(schema_guard.get_database_schema(tenant_id_, data_table_schema->get_database_id(), database_schema))) { + LOG_WARN("get database schema failed", KR(ret), K(data_table_schema->get_database_id())); + } else if (OB_ISNULL(database_schema)) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("get null schema", KR(ret), KP(database_schema), KP(data_table_schema)); + LOG_WARN("database_schema is null", KR(ret), KP(database_schema)); } else { int64_t ddl_rpc_timeout = 0; drop_index_arg.is_inner_ = true; drop_index_arg.tenant_id_ = tenant_id_; drop_index_arg.exec_tenant_id_ = tenant_id_; drop_index_arg.index_table_id_ = index_table_id; - drop_index_arg.index_name_ = index_table_schema->get_table_name(); // not in used + drop_index_arg.index_name_ = data_table_schema->get_table_name(); // not in used drop_index_arg.index_action_type_ = obrpc::ObIndexArg::DROP_INDEX; drop_index_arg.is_add_to_scheduler_ = true; drop_index_arg.task_id_ = task_id_; // parent task @@ -1812,7 +1810,7 @@ int ObVecIndexBuildTask::submit_drop_vec_index_task() drop_index_arg.table_name_ = data_table_schema->get_table_name(); drop_index_arg.database_name_ = database_schema->get_database_name_str(); drop_index_arg.is_vec_inner_drop_ = true; // if want to drop only one index, is_vec_inner_drop_ should be false, else should be true. - if (OB_FAIL(ObDDLUtil::get_ddl_rpc_timeout(index_table_schema->get_all_part_num() + data_table_schema->get_all_part_num(), ddl_rpc_timeout))) { + if (OB_FAIL(ObDDLUtil::get_ddl_rpc_timeout(data_table_schema->get_all_part_num() + data_table_schema->get_all_part_num(), ddl_rpc_timeout))) { LOG_WARN("failed to get ddl rpc timeout", KR(ret)); } else if (OB_FAIL(DDL_SIM(tenant_id_, task_id_, DROP_INDEX_RPC_FAILED))) { LOG_WARN("ddl sim failure", KR(ret), K(tenant_id_), K(task_id_)); diff --git a/src/rootserver/ddl_task/ob_vec_index_build_task.h b/src/rootserver/ddl_task/ob_vec_index_build_task.h index c120c39c5..49acecfd4 100644 --- a/src/rootserver/ddl_task/ob_vec_index_build_task.h +++ b/src/rootserver/ddl_task/ob_vec_index_build_task.h @@ -82,6 +82,11 @@ public: void set_index_id_task_submitted(const bool status) { index_id_task_submitted_ = status; } void set_index_snapshot_data_task_submitted(const bool status) { index_snapshot_data_task_submitted_ = status; } void set_drop_index_task_submitted(const bool status) { drop_index_task_submitted_ = status; } + void set_rowkey_vid_task_id(const uint64_t id) { rowkey_vid_task_id_ = id; } + void set_vid_rowkey_task_id(const uint64_t id) { vid_rowkey_task_id_ = id; } + void set_delta_buffer_task_id(const uint64_t id) { delta_buffer_task_id_ = id; } + void set_index_id_task_id(const uint64_t id) { index_id_task_id_ = id; } + void set_index_snapshot_task_id(const uint64_t id) { index_snapshot_task_id_ = id; } int update_task_message(common::ObISQLClient &proxy); diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index fe53d61e3..f34a175d4 100755 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -6581,7 +6581,7 @@ int ObDDLService::create_aux_index( } if (OB_FAIL(ret)) { } else if (OB_FAIL(ObDDLTaskRecordOperator::update_parent_task_message(tenant_id, - arg.task_id_, *idx_schema, result.aux_table_id_, ObDDLUpateParentTaskIDType::UPDATE_CREATE_INDEX_ID, allocator, trans))) { + arg.task_id_, *idx_schema, result.aux_table_id_, result.ddl_task_id_, ObDDLUpateParentTaskIDType::UPDATE_CREATE_INDEX_ID, allocator, trans))) { LOG_WARN("fail to update parent task message", K(ret), K(arg.task_id_), K(idx_schema)); } } else { // 3. index scheme not exist, generate schema && create ddl task @@ -6598,9 +6598,6 @@ int ObDDLService::create_aux_index( LOG_WARN("failed to generate aux index schema", K(ret), K(create_index_arg)); } else if (FALSE_IT(result.schema_generated_ = true)) { } else if (FALSE_IT(result.aux_table_id_ = index_schema.get_table_id())) { - } else if (OB_FAIL(ObDDLTaskRecordOperator::update_parent_task_message(tenant_id, - arg.task_id_, index_schema, result.aux_table_id_, ObDDLUpateParentTaskIDType::UPDATE_CREATE_INDEX_ID, allocator, trans))) { - LOG_WARN("fail to update parent task message", K(ret), K(arg.task_id_), K(index_schema)); } else if (OB_FAIL(create_aux_index_task_(data_schema, &index_schema, create_index_arg, @@ -6611,6 +6608,9 @@ int ObDDLService::create_aux_index( task_record))) { LOG_WARN("failed to create aux index ddl task", K(ret), K(create_index_arg)); } else if (FALSE_IT(result.ddl_task_id_ = task_record.task_id_)) { + } else if (OB_FAIL(ObDDLTaskRecordOperator::update_parent_task_message(tenant_id, + arg.task_id_, index_schema, result.aux_table_id_, result.ddl_task_id_, ObDDLUpateParentTaskIDType::UPDATE_CREATE_INDEX_ID, allocator, trans))) { + LOG_WARN("fail to update parent task message", K(ret), K(arg.task_id_), K(index_schema)); } } if (trans.is_started()) { diff --git a/src/rootserver/ob_index_builder.cpp b/src/rootserver/ob_index_builder.cpp index b417f0b9c..2dcc0d6f7 100644 --- a/src/rootserver/ob_index_builder.cpp +++ b/src/rootserver/ob_index_builder.cpp @@ -197,7 +197,7 @@ int ObIndexBuilder::drop_index_on_failed(const ObDropIndexArg &arg, obrpc::ObDro } if (OB_FAIL(ret)) { } else if (OB_FAIL(ObDDLTaskRecordOperator::update_parent_task_message(tenant_id, - arg.task_id_, new_index_schemas.at(0), res.task_id_, + arg.task_id_, new_index_schemas.at(0), res.task_id_, res.task_id_, ObDDLUpateParentTaskIDType::UPDATE_DROP_INDEX_TASK_ID, allocator, trans))) { LOG_WARN("fail to update parent task message", K(ret), K(arg.task_id_), K(res.task_id_)); }