From dbb5c1fc2a9a6533c0331ebd3f9c0ed797bcf106 Mon Sep 17 00:00:00 2001 From: chinaxing Date: Wed, 7 Feb 2024 18:10:25 +0000 Subject: [PATCH] [CP] [txn-route] fix mark participants set as changed after savepoint rollback --- src/storage/tx/ob_trans_define_v4.cpp | 8 ++++++++ src/storage/tx/ob_trans_define_v4.h | 1 + src/storage/tx/ob_tx_api.cpp | 4 +--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/storage/tx/ob_trans_define_v4.cpp b/src/storage/tx/ob_trans_define_v4.cpp index 34b7b4c8c..5f9dc1b70 100644 --- a/src/storage/tx/ob_trans_define_v4.cpp +++ b/src/storage/tx/ob_trans_define_v4.cpp @@ -692,6 +692,14 @@ int ObTxDesc::update_part_(ObTxPart &a, const bool append) return ret; } +void ObTxDesc::post_rb_savepoint_(ObTxPartRefList &parts, const ObTxSEQ &savepoint) +{ + ARRAY_FOREACH_NORET(parts, i) { + parts[i].last_scn_ = savepoint; + } + state_change_flags_.PARTS_CHANGED_ = true; +} + int ObTxDesc::update_clean_part(const share::ObLSID &id, const int64_t epoch, const ObAddr &addr) diff --git a/src/storage/tx/ob_trans_define_v4.h b/src/storage/tx/ob_trans_define_v4.h index 3c18e6071..68f7eadfc 100644 --- a/src/storage/tx/ob_trans_define_v4.h +++ b/src/storage/tx/ob_trans_define_v4.h @@ -601,6 +601,7 @@ private: int add_conflict_tx_(const ObTransIDAndAddr &conflict_tx); int merge_conflict_txs_(const ObIArray &conflict_ids); int update_parts_(const ObTxPartList &list); + void post_rb_savepoint_(ObTxPartRefList &parts, const ObTxSEQ &savepoint); void implicit_start_tx_(); bool acq_commit_cb_lock_if_need_(); bool has_extra_state_() const; diff --git a/src/storage/tx/ob_tx_api.cpp b/src/storage/tx/ob_tx_api.cpp index cff7bfbe2..43bdba545 100644 --- a/src/storage/tx/ob_tx_api.cpp +++ b/src/storage/tx/ob_tx_api.cpp @@ -1499,9 +1499,7 @@ int ObTransService::rollback_savepoint_(ObTxDesc &tx, ret = OB_TRANS_TIMEOUT; } if (OB_SUCC(ret)) { - ARRAY_FOREACH(parts, i) { - parts[i].last_scn_ = savepoint; - } + tx.post_rb_savepoint_(parts, savepoint); } return ret; }