From fcb30bad2e02870ac4dcf28ab904756f0b4b2f28 Mon Sep 17 00:00:00 2001 From: haohao022 Date: Fri, 26 Apr 2024 14:16:31 +0000 Subject: [PATCH] [to #56420037] fix: reset `ret` explicitly before local retry in ps and ps-exec protocol --- src/observer/mysql/obmp_stmt_prepare.cpp | 5 ++++- src/observer/mysql/obmp_stmt_prexecute.cpp | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/observer/mysql/obmp_stmt_prepare.cpp b/src/observer/mysql/obmp_stmt_prepare.cpp index 0c2354b5a..9cd22c021 100644 --- a/src/observer/mysql/obmp_stmt_prepare.cpp +++ b/src/observer/mysql/obmp_stmt_prepare.cpp @@ -310,9 +310,12 @@ int ObMPStmtPrepare::process_prepare_stmt(const ObMultiStmtItem &multi_stmt_item ctx_.is_prepare_stage_ = true; need_response_error = false; do { + // reset `ret` explicitly before local retry + ret = OB_SUCCESS; share::schema::ObSchemaGetterGuard schema_guard; retry_ctrl_.clear_state_before_each_retry(session.get_retry_info_for_update()); - if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard( + if (OB_FAIL(ret)) { + } else if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard( session.get_effective_tenant_id(), schema_guard))) { LOG_WARN("get schema guard failed", K(ret)); } else if (OB_FAIL(schema_guard.get_schema_version( diff --git a/src/observer/mysql/obmp_stmt_prexecute.cpp b/src/observer/mysql/obmp_stmt_prexecute.cpp index ee53128a4..062e36fe5 100644 --- a/src/observer/mysql/obmp_stmt_prexecute.cpp +++ b/src/observer/mysql/obmp_stmt_prexecute.cpp @@ -199,13 +199,16 @@ int ObMPStmtPrexecute::before_process() } else { oceanbase::lib::Thread::WaitGuard guard(oceanbase::lib::Thread::WAIT_FOR_LOCAL_RETRY); do { + // reset `ret` explicitly before local retry + ret = OB_SUCCESS; SMART_VAR(ObMySQLResultSet, result, *session, THIS_WORKER.get_allocator()) { result.set_has_more_result(false); share::schema::ObSchemaGetterGuard schema_guard; const uint64_t tenant_id = session->get_effective_tenant_id(); ObVirtualTableIteratorFactory vt_iter_factory(*gctx_.vt_iter_creator_); retry_ctrl_.clear_state_before_each_retry(session->get_retry_info_for_update()); - if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard(tenant_id, schema_guard))) { + if (OB_FAIL(ret)) { + } else if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard(tenant_id, schema_guard))) { LOG_WARN("get schema guard failed", K(ret)); } else if (OB_FAIL(schema_guard.get_schema_version( session->get_effective_tenant_id(), tenant_version))) {