fix row lock rollback problem
This commit is contained in:
parent
29ac840077
commit
2a069991eb
@ -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));
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user