[CP] fix hang at dfo scheduler wait_all
This commit is contained in:
@ -161,16 +161,15 @@ int ObPxSqcAsyncProxy::wait_all() {
|
|||||||
// 1. 在有效时间内获得足够多并且正确的callback结果
|
// 1. 在有效时间内获得足够多并且正确的callback结果
|
||||||
// 2. 超时,ret = OB_TIMEOUT
|
// 2. 超时,ret = OB_TIMEOUT
|
||||||
// 3. retry一个rpc失败
|
// 3. retry一个rpc失败
|
||||||
|
oceanbase::lib::Thread::WaitGuard guard(oceanbase::lib::Thread::WAIT_FOR_PX_MSG);
|
||||||
while (return_cb_count_ < sqcs_.count() && OB_SUCC(ret)) {
|
while (return_cb_count_ < sqcs_.count() && OB_SUCC(ret)) {
|
||||||
|
|
||||||
ObThreadCondGuard guard(cond_);
|
ObThreadCondGuard guard(cond_);
|
||||||
// wait for timeout or until notified.
|
// wait for timeout or until notified.
|
||||||
cond_.wait_us(500);
|
cond_.wait_us(500);
|
||||||
|
|
||||||
if ((phy_plan_ctx_->get_timeout_timestamp() -
|
if (OB_FAIL(exec_ctx_.fast_check_status())) {
|
||||||
ObTimeUtility::current_time()) < 0) {
|
LOG_WARN("check status failed", K(ret));
|
||||||
// 超过查询计划的timeout,满足退出条件2
|
|
||||||
ret = OB_TIMEOUT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ARRAY_FOREACH_X(callbacks_, idx, count, OB_SUCC(ret)) {
|
ARRAY_FOREACH_X(callbacks_, idx, count, OB_SUCC(ret)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user