Move longops registry before push ddl task

This commit is contained in:
obdev
2023-03-14 09:41:09 +00:00
committed by ob-robot
parent bc8e51c3e8
commit f4ed181811
2 changed files with 37 additions and 11 deletions

View File

@ -1932,6 +1932,21 @@ int ObDDLScheduler::add_task_to_longops_mgr(ObDDLTask *ddl_task)
return ret;
}
int ObDDLScheduler::remove_task_from_longops_mgr(ObDDLTask *ddl_task)
{
int ret = OB_SUCCESS;
ObLongopsMgr &longops_mgr = ObLongopsMgr::get_instance();
if (OB_ISNULL(ddl_task)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arguments", K(ret), KP(ddl_task));
} else if (ddl_task->support_longops_monitoring()) {
if (OB_FAIL(longops_mgr.unregister_longops(ddl_task->get_longops_stat()))) {
LOG_WARN("failed to unregister longops", K(ret));
}
}
return ret;
}
int ObDDLScheduler::remove_ddl_task(ObDDLTask *ddl_task)
{
int ret = OB_SUCCESS;
@ -1942,9 +1957,8 @@ int ObDDLScheduler::remove_ddl_task(ObDDLTask *ddl_task)
} else if (OB_FAIL(task_queue_.remove_task(ddl_task))) {
LOG_WARN("fail to remove task, which should not happen", K(ret), KPC(ddl_task));
} else {
int tmp_ret = OB_SUCCESS;
if (ddl_task->support_longops_monitoring() && OB_TMP_FAIL(longops_mgr.unregister_longops(ddl_task->get_longops_stat()))) {
LOG_WARN("failed to unregister longops", K(tmp_ret));
if (OB_FAIL(remove_task_from_longops_mgr(ddl_task))) {
LOG_WARN("failed to unregister longops", K(ret));
}
remove_sys_task(ddl_task);
free_ddl_task(ddl_task);
@ -1958,19 +1972,30 @@ int ObDDLScheduler::inner_schedule_ddl_task(ObDDLTask *ddl_task)
if (OB_ISNULL(ddl_task)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), KP(ddl_task));
} else if (OB_FAIL(task_queue_.push_task(ddl_task))) {
} else {
int tmp_ret = OB_SUCCESS;
bool longops_added = true;
if (OB_TMP_FAIL(add_task_to_longops_mgr(ddl_task))) {
longops_added = false;
LOG_WARN("add task to longops mgr failed", K(tmp_ret));
}
if (OB_FAIL(task_queue_.push_task(ddl_task))) {
if (OB_ENTRY_EXIST != ret) {
LOG_WARN("push back task to task queue failed", K(ret));
}
if (longops_added) {
LOG_WARN("try to unregister longop because push ddl task failed", K(ret));
if (OB_FAIL(remove_task_from_longops_mgr(ddl_task))) {
LOG_WARN("failed to unregister longops", K(tmp_ret));
}
}
} else {
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(add_sys_task(ddl_task))) {
LOG_WARN("add sys task failed", K(tmp_ret));
} else if (OB_TMP_FAIL(add_task_to_longops_mgr(ddl_task))) {
LOG_WARN("add task to longops mgr failed", K(tmp_ret));
}
idler_.wakeup();
}
}
return ret;
}

View File

@ -351,6 +351,7 @@ private:
int add_sys_task(ObDDLTask *task);
int remove_sys_task(ObDDLTask *task);
int add_task_to_longops_mgr(ObDDLTask *ddl_task);
int remove_task_from_longops_mgr(ObDDLTask *ddl_task);
int remove_ddl_task(ObDDLTask *ddl_task);
private: