BUGFIX: break deadlock at ls map

This commit is contained in:
obdev
2023-08-02 02:12:24 +00:00
committed by ob-robot
parent d8b5835427
commit 5967f08b54
2 changed files with 9 additions and 9 deletions

View File

@ -275,8 +275,8 @@ int ObLSMap::del_ls(const share::ObLSID &ls_id)
} }
ls->next_ = NULL; ls->next_ = NULL;
} }
del_ls_impl(ls);
} }
del_ls_impl(ls);
} }
return ret; return ret;

View File

@ -430,9 +430,6 @@ int ObLSService::create_ls(const obrpc::ObCreateLSArg &arg)
if (IS_NOT_INIT) { if (IS_NOT_INIT) {
ret = OB_NOT_INIT; ret = OB_NOT_INIT;
LOG_WARN("the ls service has not been inited", K(ret)); LOG_WARN("the ls service has not been inited", K(ret));
} else if (OB_UNLIKELY(!is_running_)) {
ret = OB_NOT_RUNNING;
LOG_WARN("ls service is not running.", K(ret));
} else if (OB_UNLIKELY(!ObServerCheckpointSlogHandler::get_instance().is_started())) { } else if (OB_UNLIKELY(!ObServerCheckpointSlogHandler::get_instance().is_started())) {
ret = OB_NOT_RUNNING; ret = OB_NOT_RUNNING;
LOG_WARN("ls service does not service before slog replay finished", K(ret)); LOG_WARN("ls service does not service before slog replay finished", K(ret));
@ -444,7 +441,10 @@ int ObLSService::create_ls(const obrpc::ObCreateLSArg &arg)
LOG_WARN("get timeout ts failed", KR(ret)); LOG_WARN("get timeout ts failed", KR(ret));
} else { } else {
ObMutexGuardWithTimeout change_guard(change_lock_, abs_timeout_ts); ObMutexGuardWithTimeout change_guard(change_lock_, abs_timeout_ts);
if (OB_FAIL(change_guard.get_ret())) { if (OB_UNLIKELY(!is_running_)) {
ret = OB_NOT_RUNNING;
LOG_WARN("ls service is not running.", K(ret));
} else if (OB_FAIL(change_guard.get_ret())) {
LOG_WARN("lock failed, try again later", K(ret)); LOG_WARN("lock failed, try again later", K(ret));
ret = OB_EAGAIN; ret = OB_EAGAIN;
} else if (OB_FAIL(check_ls_exist(arg.get_ls_id(), ls_exist))) { } else if (OB_FAIL(check_ls_exist(arg.get_ls_id(), ls_exist))) {
@ -1038,9 +1038,6 @@ int ObLSService::create_ls_for_ha(
if (IS_NOT_INIT) { if (IS_NOT_INIT) {
ret = OB_NOT_INIT; ret = OB_NOT_INIT;
LOG_WARN("the ls service has not been inited", K(ret)); LOG_WARN("the ls service has not been inited", K(ret));
} else if (OB_UNLIKELY(!is_running_)) {
ret = OB_NOT_RUNNING;
LOG_WARN("ls service is not running.", K(ret));
} else if (OB_UNLIKELY(!ObServerCheckpointSlogHandler::get_instance().is_started())) { } else if (OB_UNLIKELY(!ObServerCheckpointSlogHandler::get_instance().is_started())) {
ret = OB_NOT_RUNNING; ret = OB_NOT_RUNNING;
LOG_WARN("ls service does not service before slog replay finished", K(ret)); LOG_WARN("ls service does not service before slog replay finished", K(ret));
@ -1055,7 +1052,10 @@ int ObLSService::create_ls_for_ha(
LOG_WARN("get timeout ts failed", KR(ret)); LOG_WARN("get timeout ts failed", KR(ret));
} else { } else {
ObMutexGuardWithTimeout change_guard(change_lock_, abs_timeout_ts); ObMutexGuardWithTimeout change_guard(change_lock_, abs_timeout_ts);
if (OB_FAIL(change_guard.get_ret())) { if (OB_UNLIKELY(!is_running_)) {
ret = OB_NOT_RUNNING;
LOG_WARN("ls service is not running.", K(ret));
} else if (OB_FAIL(change_guard.get_ret())) {
LOG_WARN("lock failed, try again later", K(ret)); LOG_WARN("lock failed, try again later", K(ret));
ret = OB_EAGAIN; ret = OB_EAGAIN;
} else if (OB_FAIL(check_ls_exist(arg.ls_id_, ls_exist))) { } else if (OB_FAIL(check_ls_exist(arg.ls_id_, ls_exist))) {