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;
|
int ret = OB_SUCCESS;
|
||||||
auto &acc_ctx = ctx_guard_.get_store_ctx().mvcc_acc_ctx_;
|
auto &acc_ctx = ctx_guard_.get_store_ctx().mvcc_acc_ctx_;
|
||||||
auto &snapshot = acc_ctx.snapshot_;
|
if (acc_ctx.snapshot_.tx_id_.is_valid() && acc_ctx.mem_ctx_) {
|
||||||
if (snapshot.tx_id_.is_valid() && acc_ctx.mem_ctx_) {
|
|
||||||
if (acc_ctx.mem_ctx_->is_tx_rollbacked()) {
|
if (acc_ctx.mem_ctx_->is_tx_rollbacked()) {
|
||||||
// The txn has been killed during normal processing. So we return
|
if (acc_ctx.mem_ctx_->is_for_replay()) {
|
||||||
// OB_TRANS_KILLED to prompt this abnormal state.
|
// goes here means the txn was killed due to LS's GC etc,
|
||||||
ret = OB_TRANS_KILLED;
|
// return NOT_MASTER
|
||||||
STORAGE_LOG(WARN, "txn termianted when table scan", K(ret), K(acc_ctx));
|
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;
|
return ret;
|
||||||
|
|||||||
@ -293,13 +293,20 @@ int ObSingleRowGetter::get_next_row(ObNewRow *&row)
|
|||||||
}
|
}
|
||||||
if (OB_SUCC(ret) || OB_ITER_END == ret) {
|
if (OB_SUCC(ret) || OB_ITER_END == ret) {
|
||||||
// check txn status not aborted, which cause readout incorrect result
|
// check txn status not aborted, which cause readout incorrect result
|
||||||
if (store_ctx_->mvcc_acc_ctx_.snapshot_.tx_id_.is_valid() &&
|
auto &acc_ctx = store_ctx_->mvcc_acc_ctx_;
|
||||||
store_ctx_->mvcc_acc_ctx_.mem_ctx_ &&
|
if (acc_ctx.snapshot_.tx_id_.is_valid() &&
|
||||||
store_ctx_->mvcc_acc_ctx_.mem_ctx_->is_tx_rollbacked()) {
|
acc_ctx.mem_ctx_ &&
|
||||||
// The txn has been killed during normal processing. So we return
|
acc_ctx.mem_ctx_->is_tx_rollbacked()) {
|
||||||
// OB_TRANS_KILLED to prompt this abnormal state.
|
if (acc_ctx.mem_ctx_->is_for_replay()) {
|
||||||
ret = OB_TRANS_KILLED;
|
// goes here means the txn was killed due to LS's GC etc,
|
||||||
STORAGE_LOG(WARN, "txn has terminated", K(ret));
|
// 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;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user