[MDS] fix thread deadlock between DAG and tablet and mds_table

This commit is contained in:
fengdeyiji
2023-08-17 09:40:35 +00:00
committed by ob-robot
parent a5ef36f579
commit 9b01ed202d
27 changed files with 269 additions and 227 deletions

View File

@ -90,8 +90,12 @@ int MdsTableBase::register_to_mds_table_mgr()
void MdsTableBase::mark_removed_from_t3m(ObTabletPointer *pointer)
{
MDS_TG(1_ms);
int ret = OB_SUCCESS;
if (ATOMIC_LOAD(&debug_info_.remove_ts_) != 0) {
MDS_LOG_RET(WARN, OB_ERR_UNEXPECTED, "this MdsTable has been marked removed", K(*this));
} else if (MDS_FAIL(unregister_from_mds_table_mgr())) {
MDS_LOG(WARN, "unregister from mds_table_mgr failed", KR(ret), K(*this));
} else {
debug_info_.do_remove_tablet_pointer_ = pointer;
debug_info_.remove_trace_id_ = *ObCurTraceId::get_trace_id();
@ -133,7 +137,20 @@ int MdsTableBase::unregister_from_mds_table_mgr()
MDS_LOG(INFO, "no need unregister from mds_table_mgr cause invalid id", KR(ret), K(*this));
} else if (MDS_FAIL(mgr_handle_.get_mds_table_mgr()->unregister_from_mds_table_mgr(this))) {
MDS_LOG(ERROR, "fail to unregister mds table", K(*this));
}
return ret;
}
int MdsTableBase::unregister_from_removed_recorder()
{
int ret = OB_SUCCESS;
MDS_TG(1_ms);
if (!mgr_handle_.is_valid()) {
MDS_LOG(INFO, "no need unregister from mds_table_mgr cause invalid mds_table_mgr", KR(ret), K(*this));
} else if (!ls_id_.is_valid() || !tablet_id_.is_valid()) {
MDS_LOG(INFO, "no need unregister from mds_table_mgr cause invalid id", KR(ret), K(*this));
} else {
mgr_handle_.get_mds_table_mgr()->unregister_from_removed_mds_table_recorder(this);
mgr_handle_.reset();
}
return ret;