fix abort_redef_table() scheduler ddl task again ret_code error bug

This commit is contained in:
obdev
2023-05-05 03:38:46 +00:00
committed by ob-robot
parent 2fd0498ce3
commit 28ba10dbee
2 changed files with 31 additions and 18 deletions

View File

@ -955,6 +955,24 @@ int ObDDLScheduler::update_task_info(const ObDDLTaskID &task_id,
return ret;
}
int ObDDLScheduler::reschedule_ddl_task(const ObDDLTaskID &task_id, ObDDLTaskRecord &task_record)
{
int ret = OB_SUCCESS;
common::ObArenaAllocator allocator(lib::ObLabel("reschedule"));
if (OB_UNLIKELY(!task_id.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arg", K(ret), K(task_id));
} else if (OB_FAIL(ObDDLTaskRecordOperator::get_ddl_task_record(task_id.task_id_,
root_service_->get_sql_proxy(),
allocator,
task_record))) {
LOG_WARN("get single ddl task failed", K(ret), K(task_id.task_id_));
} else if (OB_FAIL(schedule_ddl_task(task_record))) {
LOG_WARN("failed to schedule ddl task", K(ret), K(task_record));
}
return ret;
}
int ObDDLScheduler::abort_redef_table(const ObDDLTaskID &task_id)
{
int ret = OB_SUCCESS;
@ -993,13 +1011,11 @@ int ObDDLScheduler::abort_redef_table(const ObDDLTaskID &task_id)
LOG_WARN("failed to modify task", K(ret));
if (OB_ENTRY_NOT_EXIST == ret) {
int tmp_ret = OB_SUCCESS;
ObSqlString sql_string;
if (OB_TMP_FAIL(ObDDLTaskRecordOperator::get_ddl_task_record(task_id.task_id_, root_service_->get_sql_proxy(), allocator, task_record))) {
LOG_WARN("get single ddl task failed", K(tmp_ret), K(task_id.task_id_));
} else if (OB_TMP_FAIL(schedule_ddl_task(task_record))) {
LOG_WARN("failed to schedule ddl task", K(tmp_ret), K(task_record));
if (OB_TMP_FAIL(reschedule_ddl_task(task_id, task_record))) {
LOG_WARN("reschedule ddl task failed", K(tmp_ret), K(task_id));
} else {
ret = OB_SUCCESS;
ret = OB_EAGAIN;
LOG_INFO("schedule ddl task again success, please abort again", K(ret));
}
}
} else {
@ -1065,12 +1081,11 @@ int ObDDLScheduler::copy_table_dependents(const ObDDLTaskID &task_id,
LOG_WARN("failed to modify task", K(ret));
if (OB_ENTRY_NOT_EXIST == ret) {
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(ObDDLTaskRecordOperator::get_ddl_task_record(task_id.task_id_, root_service_->get_sql_proxy(), allocator, task_record))) {
LOG_WARN("get single ddl task failed", K(tmp_ret), K(task_id.task_id_));
} else if (OB_TMP_FAIL(schedule_ddl_task(task_record))) {
LOG_WARN("failed to schedule ddl task", K(tmp_ret), K(task_record));
if (OB_TMP_FAIL(reschedule_ddl_task(task_id, task_record))) {
LOG_WARN("reschedule ddl task failed", K(tmp_ret), K(task_id));
} else {
ret = OB_SUCCESS;
ret = OB_EAGAIN;
LOG_INFO("schedule ddl task again success, please copy table deps again", K(ret));
}
}
} else {
@ -1137,13 +1152,11 @@ int ObDDLScheduler::finish_redef_table(const ObDDLTaskID &task_id)
LOG_WARN("failed to modify task", K(ret));
if (OB_ENTRY_NOT_EXIST == ret) {
int tmp_ret = OB_SUCCESS;
ObSqlString sql_string;
if (OB_TMP_FAIL(ObDDLTaskRecordOperator::get_ddl_task_record(task_id.task_id_, root_service_->get_sql_proxy(), allocator, task_record))) {
LOG_WARN("get single ddl task failed", K(tmp_ret), K(task_id.task_id_));
} else if (OB_TMP_FAIL(schedule_ddl_task(task_record))) {
LOG_WARN("failed to schedule ddl task", K(tmp_ret), K(task_record));
if (OB_TMP_FAIL(reschedule_ddl_task(task_id, task_record))) {
LOG_WARN("reschedule ddl task failed", K(tmp_ret), K(task_id));
} else {
ret = OB_SUCCESS;
ret = OB_EAGAIN;
LOG_INFO("schedule ddl task again success, please finish redef table again", K(ret));
}
}
} else {

View File

@ -225,7 +225,7 @@ public:
int finish_redef_table(const ObDDLTaskID &task_id);
int start_redef_table(const obrpc::ObStartRedefTableArg &arg, obrpc::ObStartRedefTableRes &res);
int update_ddl_task_active_time(const ObDDLTaskID &task_id);
int reschedule_ddl_task(const ObDDLTaskID &task_id, ObDDLTaskRecord &task_record);
int prepare_alter_table_arg(const ObPrepareAlterTableArgParam &param,
const ObTableSchema *target_table_schema,
obrpc::ObAlterTableArg &alter_table_arg);