[DeadLock.bad_case] fix remote sql retry may deadlock
This commit is contained in:
@ -126,6 +126,8 @@ public:
|
||||
template<typename T>
|
||||
int replace_block_list(const T &src_key,
|
||||
const common::ObIArray<ObDependencyResource> &new_list);
|
||||
template<typename T>
|
||||
int get_block_list(const T &src_key, common::ObIArray<ObDependencyResource> &cur_list);
|
||||
// remove directed dependency relationship between two detector
|
||||
template<typename T1, typename T2>
|
||||
int activate(const T1 &src_key, const T2 &dest_key);
|
||||
@ -450,6 +452,30 @@ int ObDeadLockDetectorMgr::replace_block_list(const T &src_key,
|
||||
return ret;
|
||||
#undef PRINT_WRAPPER
|
||||
}
|
||||
template<typename T>
|
||||
int ObDeadLockDetectorMgr::get_block_list(const T &src_key,
|
||||
common::ObIArray<ObDependencyResource> &cur_list)
|
||||
{
|
||||
CHECK_INIT();
|
||||
CHECK_ENABLED();
|
||||
#define PRINT_WRAPPER KR(ret), K(src_key), K(cur_list)
|
||||
int ret = common::OB_SUCCESS;
|
||||
DetectorRefGuard ref_guard;
|
||||
UserBinaryKey src_user_key;
|
||||
|
||||
if (OB_FAIL(src_user_key.set_user_key(src_key))) {
|
||||
DETECT_LOG(WARN, "src_key serialzation failed", PRINT_WRAPPER);
|
||||
} else if (OB_FAIL(get_detector_(src_user_key, ref_guard))) {
|
||||
DETECT_LOG(WARN, "get_detector failed", PRINT_WRAPPER);
|
||||
} else if (OB_FAIL(ref_guard.get_detector()->get_block_list(cur_list))) {
|
||||
DETECT_LOG(WARN, "get block list failed", PRINT_WRAPPER);
|
||||
} else {
|
||||
// DETECT_LOG(INFO, "replace block list success", PRINT_WRAPPER);
|
||||
}
|
||||
|
||||
return ret;
|
||||
#undef PRINT_WRAPPER
|
||||
}
|
||||
// call for removing directed dependency relationship between two detector(both in local)
|
||||
// thread-safe guaranteed
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user