[vector index] fix post create hung with clean on failed calling -4002/-4016 error
This commit is contained in:
parent
5b98fdc761
commit
7ecea64efe
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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_));
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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()) {
|
||||
|
@ -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_));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user