Move longops registry before push ddl task
This commit is contained in:
@ -1932,6 +1932,21 @@ int ObDDLScheduler::add_task_to_longops_mgr(ObDDLTask *ddl_task)
|
|||||||
return ret;
|
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 ObDDLScheduler::remove_ddl_task(ObDDLTask *ddl_task)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
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))) {
|
} 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));
|
LOG_WARN("fail to remove task, which should not happen", K(ret), KPC(ddl_task));
|
||||||
} else {
|
} else {
|
||||||
int tmp_ret = OB_SUCCESS;
|
if (OB_FAIL(remove_task_from_longops_mgr(ddl_task))) {
|
||||||
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(ret));
|
||||||
LOG_WARN("failed to unregister longops", K(tmp_ret));
|
|
||||||
}
|
}
|
||||||
remove_sys_task(ddl_task);
|
remove_sys_task(ddl_task);
|
||||||
free_ddl_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)) {
|
if (OB_ISNULL(ddl_task)) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", K(ret), KP(ddl_task));
|
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) {
|
if (OB_ENTRY_EXIST != ret) {
|
||||||
LOG_WARN("push back task to task queue failed", K(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 {
|
} else {
|
||||||
int tmp_ret = OB_SUCCESS;
|
|
||||||
if (OB_TMP_FAIL(add_sys_task(ddl_task))) {
|
if (OB_TMP_FAIL(add_sys_task(ddl_task))) {
|
||||||
LOG_WARN("add sys task failed", K(tmp_ret));
|
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();
|
idler_.wakeup();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,6 +351,7 @@ private:
|
|||||||
int add_sys_task(ObDDLTask *task);
|
int add_sys_task(ObDDLTask *task);
|
||||||
int remove_sys_task(ObDDLTask *task);
|
int remove_sys_task(ObDDLTask *task);
|
||||||
int add_task_to_longops_mgr(ObDDLTask *ddl_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);
|
int remove_ddl_task(ObDDLTask *ddl_task);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user