return ob_not_master if txn was killed by LS GC routine
This commit is contained in:
@ -563,13 +563,18 @@ int ObTableScanIterator::check_txn_status_if_read_uncommitted_()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
auto &acc_ctx = ctx_guard_.get_store_ctx().mvcc_acc_ctx_;
|
||||
auto &snapshot = acc_ctx.snapshot_;
|
||||
if (snapshot.tx_id_.is_valid() && acc_ctx.mem_ctx_) {
|
||||
if (acc_ctx.snapshot_.tx_id_.is_valid() && acc_ctx.mem_ctx_) {
|
||||
if (acc_ctx.mem_ctx_->is_tx_rollbacked()) {
|
||||
// The txn has been killed during normal processing. So we return
|
||||
// OB_TRANS_KILLED to prompt this abnormal state.
|
||||
ret = OB_TRANS_KILLED;
|
||||
STORAGE_LOG(WARN, "txn termianted when table scan", K(ret), K(acc_ctx));
|
||||
if (acc_ctx.mem_ctx_->is_for_replay()) {
|
||||
// goes here means the txn was killed due to LS's GC etc,
|
||||
// return NOT_MASTER
|
||||
ret = OB_NOT_MASTER;
|
||||
} else {
|
||||
// The txn has been killed during normal processing. So we return
|
||||
// OB_TRANS_KILLED to prompt this abnormal state.
|
||||
ret = OB_TRANS_KILLED;
|
||||
STORAGE_LOG(WARN, "txn has terminated", K(ret), "tx_id", acc_ctx.tx_id_);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user