BUGFIX: break deadlock at ls map
This commit is contained in:
@ -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;
|
||||||
|
@ -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))) {
|
||||||
|
Reference in New Issue
Block a user