diff --git a/src/observer/mysql/ob_query_retry_ctrl.cpp b/src/observer/mysql/ob_query_retry_ctrl.cpp index 2726c088cb2509b8588fbd3672352e475801fcb2..4ebe77fa19ca8455dc12136f5b3d41839e9c1d0f 100644 --- a/src/observer/mysql/ob_query_retry_ctrl.cpp +++ b/src/observer/mysql/ob_query_retry_ctrl.cpp @@ -77,7 +77,8 @@ void ObQueryRetryCtrl::test_and_save_retry_state(const ObGlobalContext& gctx, co } else { client_ret = OB_TIMEOUT; } - if (is_try_lock_row_err(session->get_retry_info().get_last_query_retry_err())) { + if (result.get_exec_context().need_change_timeout_ret() && + is_try_lock_row_err(session->get_retry_info().get_last_query_retry_err())) { client_ret = OB_ERR_EXCLUSIVE_LOCK_CONFLICT; } retry_type_ = RETRY_TYPE_NONE; @@ -410,10 +411,6 @@ void ObQueryRetryCtrl::test_and_save_retry_state(const ObGlobalContext& gctx, co } else if (OB_AUTOINC_SERVICE_BUSY == err) { force_local_retry ? (void)(retry_type_ = RETRY_TYPE_LOCAL) : try_packet_retry(multi_stmt_item); if (RETRY_TYPE_LOCAL == retry_type_) { - // 对于 OB_AUTOINC_SERVICE_BUSY 错误,理想情况是将 query 放回队列。 - // 不过即使由于各种原因无法放回队列,也值得做重试。因为让整个 query - // 从阻塞中退出,还是可以释放不少属于这个 query 的 dist execution rpc 线程 - // 尽可能避免 rpc 死锁。 sleep_before_local_retry(ObQueryRetryCtrl::RETRY_SLEEP_TYPE_LINEAR, WAIT_RETRY_WRITE_DML_US, retry_times_,