From e17bb817f568be1625690eb5994a46ef995d073f Mon Sep 17 00:00:00 2001 From: felix-w15 <806547150@qq.com> Date: Mon, 11 Mar 2024 04:15:16 +0000 Subject: [PATCH] reset lock_wait_mgr's node's need_wait_ when doing local_retry --- deps/oblib/src/rpc/ob_lock_wait_node.cpp | 1 + src/observer/mysql/ob_query_retry_ctrl.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/deps/oblib/src/rpc/ob_lock_wait_node.cpp b/deps/oblib/src/rpc/ob_lock_wait_node.cpp index 50098784b..56deabf88 100644 --- a/deps/oblib/src/rpc/ob_lock_wait_node.cpp +++ b/deps/oblib/src/rpc/ob_lock_wait_node.cpp @@ -45,6 +45,7 @@ void ObLockWaitNode::set(void* addr, total_update_cnt_ = total_trans_node_cnt; run_ts_ = 0; snprintf(key_, sizeof(key_), "%s", key); + reset_need_wait(); } void ObLockWaitNode::change_hash(const int64_t hash, const int64_t lock_seq) diff --git a/src/observer/mysql/ob_query_retry_ctrl.cpp b/src/observer/mysql/ob_query_retry_ctrl.cpp index 874299b03..1b8982fb0 100644 --- a/src/observer/mysql/ob_query_retry_ctrl.cpp +++ b/src/observer/mysql/ob_query_retry_ctrl.cpp @@ -17,6 +17,7 @@ #include "sql/resolver/ob_stmt.h" #include "pl/ob_pl.h" #include "storage/tx/ob_trans_define.h" +#include "storage/memtable/ob_lock_wait_mgr.h" #include "observer/mysql/ob_mysql_result_set.h" #include "observer/ob_server_struct.h" #include "observer/mysql/obmp_query.h" @@ -988,6 +989,13 @@ void ObQueryRetryCtrl::after_func(ObRetryParam &v) if (OB_UNLIKELY(OB_SUCCESS == v.client_ret_)) { LOG_ERROR_RET(OB_ERR_UNEXPECTED, "no matter need retry or not, v.client_ret_ should not be OB_SUCCESS", K(v)); } + // bug fix: + if (RETRY_TYPE_LOCAL == v.retry_type_) { + rpc::ObLockWaitNode* node = MTL(memtable::ObLockWaitMgr*)->get_thread_node(); + if (NULL != node) { + node->reset_need_wait(); + } + } } int ObQueryRetryCtrl::init()