[DeadLock.bad_case] fix remote sql retry may deadlock

This commit is contained in:
obdev
2023-02-15 14:17:33 +00:00
committed by ob-robot
parent efffd594cc
commit facae95a7d
11 changed files with 133 additions and 46 deletions

View File

@ -783,6 +783,7 @@ int ObSqlTransControl::end_stmt(ObExecContext &exec_ctx, const bool rollback)
OZ (get_tx_service(session, txs), *session);
// plain select stmt don't require txn descriptor
if (OB_SUCC(ret) && !is_plain_select) {
ObTransDeadlockDetectorAdapter::maintain_deadlock_info_when_end_stmt(exec_ctx, rollback);
CK (OB_NOT_NULL(tx_desc));
auto &tx_result = session->get_trans_result();
if (OB_FAIL(ret)) {
@ -817,10 +818,6 @@ int ObSqlTransControl::end_stmt(ObExecContext &exec_ctx, const bool rollback)
ret = COVER_SUCC(tmp_ret);
}
if (!is_plain_select) {
ObTransDeadlockDetectorAdapter::maintain_deadlock_info_when_end_stmt(exec_ctx, rollback);
}
bool print_log = false;
#ifndef NDEBUG
print_log = true;
@ -835,7 +832,8 @@ int ObSqlTransControl::end_stmt(ObExecContext &exec_ctx, const bool rollback)
"tx_desc", PC(session->get_tx_desc()),
"trans_result", session->get_trans_result(),
K(rollback),
KPC(session));
KPC(session),
K(exec_ctx.get_errcode()));
}
if (OB_NOT_NULL(session)) {
session->get_trans_result().reset();