fix row lock rollback problem

This commit is contained in:
yy0 2022-02-22 16:04:02 +08:00 committed by LINxiansheng
parent 29ac840077
commit 2a069991eb
3 changed files with 7 additions and 11 deletions

View File

@ -725,7 +725,8 @@ int ObMemtable::check_row_locked_by_myself(const ObStoreCtx& ctx, const uint64_t
} else if (lock_state.is_locked_ && lock_state.lock_trans_id_ == ctx.trans_id_) {
is_locked = true;
}
TRANS_LOG(DEBUG, "check_row_locked meet sstable", K(ret), K(rowkey), K(*sstable), K(is_locked));
TRANS_LOG(DEBUG, "check_row_locked meet sstable",
K(ret), K(rowkey), K(*sstable), K(is_locked), K(lock_state));
} else {
ret = OB_ERR_UNEXPECTED;
TRANS_LOG(ERROR, "unknown store type", K(ret));

View File

@ -11201,7 +11201,7 @@ int ObPartTransCtx::check_sql_sequence_can_read(const int64_t sql_sequence, bool
return ret;
}
int ObPartTransCtx::check_row_locked_(const ObTransStatusInfo& trans_info, const ObTransID& read_trans_id,
int ObPartTransCtx::check_row_locked_(const ObTransStatusInfo& trans_info,
const ObTransID& data_trans_id, const int64_t sql_sequence, ObStoreRowLockState& lock_state)
{
int ret = OB_SUCCESS;
@ -11213,13 +11213,8 @@ int ObPartTransCtx::check_row_locked_(const ObTransStatusInfo& trans_info, const
break;
}
case ObTransTableStatusType::RUNNING: {
if (read_trans_id == data_trans_id) {
lock_state.is_locked_ = true;
lock_state.trans_version_ = 0;
} else {
lock_state.is_locked_ = !trans_info.undo_status_.is_contain(sql_sequence);
lock_state.trans_version_ = 0;
}
lock_state.is_locked_ = !trans_info.undo_status_.is_contain(sql_sequence);
lock_state.trans_version_ = 0;
break;
}
case ObTransTableStatusType::ABORT: {
@ -11251,7 +11246,7 @@ int ObPartTransCtx::check_row_locked(const ObStoreRowkey& key, ObIMvccCtx& ctx,
if (OB_FAIL(get_trans_state_and_version_without_lock(trans_info))) {
TRANS_LOG(WARN, "failed to get trans table status", K(ret));
} else if (OB_FAIL(check_row_locked_(trans_info, read_trans_id, data_trans_id, sql_sequence, lock_state))) {
} else if (OB_FAIL(check_row_locked_(trans_info, data_trans_id, sql_sequence, lock_state))) {
TRANS_LOG(WARN, "failed to check transaction status", K(ret));
// locked by other
} else if (lock_state.is_locked_ && lock_state.lock_trans_id_ != read_trans_id) {

View File

@ -598,7 +598,7 @@ private:
int try_respond_coordinator_(const ObTransMsgType msg_type, const ListenerAction action);
int get_prepare_ack_arg_(int& status, int64_t& state, int64_t& prepare_version, uint64_t& prepare_log_id,
int64_t& prepare_log_ts, int64_t& request_id, int64_t& remain_wait_interval_us, bool& is_xa_prepare);
int check_row_locked_(const ObTransStatusInfo& trans_info, const ObTransID& read_trans_id,
int check_row_locked_(const ObTransStatusInfo& trans_info,
const ObTransID& data_trans_id, const int64_t sql_sequence, storage::ObStoreRowLockState& lock_state);
int lock_for_read_(const ObTransStatusInfo& trans_info, const ObLockForReadArg& lock_for_read_arg, bool& can_read,
int64_t& trans_version, bool& is_determined_state);