[CP] fast abort need check tx id not changed

This commit is contained in:
chinaxing 2023-10-20 12:09:58 +00:00 committed by ob-robot
parent 3bb03130b1
commit 415cbc0dee
3 changed files with 5 additions and 5 deletions

View File

@ -1573,10 +1573,10 @@ ObTxSEQ ObTxDesc::inc_and_get_tx_seq(int16_t branch) const
int64_t seq = ObSequence::inc_and_get_max_seq_no();
return ObTxSEQ::mk_v0(seq);
}
void ObTxDesc::mark_part_abort(const int abort_cause)
void ObTxDesc::mark_part_abort(const ObTransID tx_id, const int abort_cause)
{
ObSpinLockGuard guard(lock_);
if (state_ < State::IN_TERMINATE && !flags_.PART_ABORTED_) {
if (tx_id == tx_id_ && state_ < State::IN_TERMINATE && !flags_.PART_ABORTED_) {
flags_.PART_ABORTED_ = true;
abort_cause_ = abort_cause;
}

View File

@ -713,7 +713,7 @@ LST_DO(DEF_FREE_ROUTE_DECODE, (;), static, dynamic, parts, extra);
bool is_extra_changed() { return state_change_flags_.EXTRA_CHANGED_; };
void set_explicit() { flags_.EXPLICIT_ = true; }
void clear_interrupt() { flags_.INTERRUPTED_ = false; }
void mark_part_abort(const int abort_cause);
void mark_part_abort(const ObTransID tx_id, const int abort_cause);
ObTxSEQ get_and_inc_tx_seq(int16_t branch, int N) const;
ObTxSEQ inc_and_get_tx_seq(int16_t branch) const;
ObTxSEQ get_tx_seq(int64_t seq_abs = 0) const;

View File

@ -898,11 +898,11 @@ int ObTransService::handle_trans_keepalive(const ObTxKeepaliveMsg &msg, ObTransR
TRANS_LOG(WARN, "tx participant in failed status", K(msg));
if (OB_TRANS_KILLED == msg.status_) {
TRANS_LOG(INFO, "participant was killed, mark tx should abort", K(tx_id), K(msg.sender_));
tx->mark_part_abort(OB_TRANS_KILLED);
tx->mark_part_abort(tx_id, OB_TRANS_KILLED);
ret_status = OB_TRANS_NEED_ROLLBACK;
} else if (msg.status_ > 0) {
TRANS_LOG(INFO, "participant failed, mark tx should abort", K(tx_id), K(msg.status_), K(msg.sender_));
tx->mark_part_abort(msg.status_);
tx->mark_part_abort(tx_id, msg.status_);
ret_status = OB_TRANS_NEED_ROLLBACK;
}
}