[MDS] fix thread deadlock between DAG and tablet and mds_table
This commit is contained in:
		| @ -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; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 fengdeyiji
					fengdeyiji