From c01bae9728712c824e0ce257963d9b31ddbb2575 Mon Sep 17 00:00:00 2001 From: chinaxing Date: Wed, 17 Apr 2024 10:56:49 +0000 Subject: [PATCH] [CP] [42x] fix tx on scheduler aborted but actually committed --- src/storage/tx/ob_tx_2pc_ctx_impl.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/storage/tx/ob_tx_2pc_ctx_impl.cpp b/src/storage/tx/ob_tx_2pc_ctx_impl.cpp index 1d23eb257..4ec9317b2 100644 --- a/src/storage/tx/ob_tx_2pc_ctx_impl.cpp +++ b/src/storage/tx/ob_tx_2pc_ctx_impl.cpp @@ -88,7 +88,9 @@ int ObPartTransCtx::do_prepare(bool &no_need_submit_log) if (OB_SUCC(ret)) { if (sub_state_.is_force_abort()) { - if (OB_FAIL(compensate_abort_log_())) { + if (OB_FAIL(prepare_mul_data_source_tx_end_(false))) { + TRANS_LOG(WARN, "notify mds tx end fail", K(ret), K(trans_id_), K(ls_id_)); + } else if (OB_FAIL(compensate_abort_log_())) { TRANS_LOG(WARN, "compensate abort log failed", K(ret), K(ls_id_), K(trans_id_), K(get_downstream_state()), K(get_upstream_state()), K(sub_state_)); } else { @@ -109,8 +111,6 @@ int ObPartTransCtx::do_prepare(bool &no_need_submit_log) if (OB_FAIL(dup_table_tx_redo_sync_())) { TRANS_LOG(WARN, "dup table tx redo sync failed", K(ret)); } - } else if (OB_FAIL(generate_prepare_version_())) { - TRANS_LOG(WARN, "generate prepare version failed", K(ret), K(*this)); } } @@ -119,11 +119,14 @@ int ObPartTransCtx::do_prepare(bool &no_need_submit_log) K(is_dup_table_redo_sync_completed_()), KPC(this)); } - if (OB_SUCC(ret)) { - if (OB_FAIL(prepare_mul_data_source_tx_end_(true))) { - TRANS_LOG(WARN, "trans commit need retry", K(ret), K(trans_id_), K(ls_id_)); - } + if (OB_SUCC(ret) && OB_FAIL(prepare_mul_data_source_tx_end_(true))) { + TRANS_LOG(WARN, "notify mds tx_end fail", K(ret), K(trans_id_), K(ls_id_)); } + + if (OB_SUCC(ret) && OB_FAIL(generate_prepare_version_())) { + TRANS_LOG(WARN, "generate prepare version failed", K(ret), K(*this)); + } + if (OB_SUCC(ret) && OB_FAIL(restart_2pc_trans_timer_())) { TRANS_LOG(WARN, "restart_2pc_trans_timer_ error", KR(ret), KPC(this)); }