From c08774b9404d765acf72465f685bb9bd84e99f23 Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 7 Jul 2023 08:54:10 +0000 Subject: [PATCH] [cp]fix: fix nested session restore bug --- src/sql/session/ob_basic_session_info.cpp | 32 ++++++++++++++++------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 654e3420eb..f90a39a546 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -5804,10 +5804,17 @@ int ObBasicSessionInfo::base_restore_session(BaseSavedValue &saved_value) int ObBasicSessionInfo::stmt_restore_session(StmtSavedValue &saved_value) { int ret = OB_SUCCESS; - OX (thread_data_.cur_query_start_time_ = saved_value.cur_query_start_time_); - OZ (tx_result_.merge_result(saved_value.tx_result_)); - OZ (base_restore_session(saved_value)); - OX (stmt_type_ = saved_value.stmt_type_); + int tmp_ret = OB_SUCCESS; + thread_data_.cur_query_start_time_ = saved_value.cur_query_start_time_; + if (OB_TMP_FAIL(tx_result_.merge_result(saved_value.tx_result_))) { + LOG_WARN("failed to merge trans result", K(tmp_ret)); + ret = COVER_SUCC(tmp_ret); + } + if (OB_TMP_FAIL(base_restore_session(saved_value))) { + LOG_WARN("failed to restore base session", K(tmp_ret)); + ret = COVER_SUCC(tmp_ret); + } + stmt_type_ = saved_value.stmt_type_; return ret; } @@ -5846,15 +5853,22 @@ int ObBasicSessionInfo::trans_save_session(TransSavedValue &saved_value) int ObBasicSessionInfo::trans_restore_session(TransSavedValue &saved_value) { int ret = OB_SUCCESS; + int tmp_ret = OB_SUCCESS; LockGuard lock_guard(thread_data_mutex_); - OX (nested_count_ = saved_value.nested_count_); - OX (trans_flags_ = saved_value.trans_flags_); + nested_count_ = saved_value.nested_count_; + trans_flags_ = saved_value.trans_flags_; /* * restore means switch to saved transaction context, drop current one. */ - OZ (tx_result_.assign(saved_value.tx_result_)); - OX (tx_desc_ = saved_value.tx_desc_); - OZ (base_restore_session(saved_value)); + if (OB_TMP_FAIL(tx_result_.assign(saved_value.tx_result_))) { + LOG_WARN("failed to assign trans result", K(tmp_ret)); + ret = COVER_SUCC(tmp_ret); + } + tx_desc_ = saved_value.tx_desc_; + if (OB_TMP_FAIL(base_restore_session(saved_value))) { + LOG_WARN("failed to restore base session", K(tmp_ret)); + ret = COVER_SUCC(tmp_ret); + } return ret; }