diff --git a/deps/oblib/src/lib/utility/ob_tracepoint.h b/deps/oblib/src/lib/utility/ob_tracepoint.h index 32e10b7d8edbd6ed85e61a10604764d1636e20c4..70327ed2d362bce82529decaa400c9438bc8fe63 100644 --- a/deps/oblib/src/lib/utility/ob_tracepoint.h +++ b/deps/oblib/src/lib/utility/ob_tracepoint.h @@ -672,10 +672,13 @@ class EventTable EN_FETCH_TABLE_INFO_RPC = 1112, // END OF STORAGE HA - 1101 - 2000 + // Transaction // 2001 - 2100 // Transaction free route - EN_TX_FREE_ROUTE_UPDATE_STATE_ERROR = 1150, - EN_TX_FREE_ROUTE_ENCODE_STATE_ERROR = 1151, - EN_TX_FREE_ROUTE_STATE_SIZE = 1152, + EN_TX_FREE_ROUTE_UPDATE_STATE_ERROR = 2001, + EN_TX_FREE_ROUTE_ENCODE_STATE_ERROR = 2002, + EN_TX_FREE_ROUTE_STATE_SIZE = 2003, + // Transaction common + EN_TX_RESULT_INCOMPLETE = 2011, EVENT_TABLE_MAX = SIZE_OF_EVENT_TABLE }; diff --git a/src/sql/ob_sql_trans_control.cpp b/src/sql/ob_sql_trans_control.cpp index 2dd5a3c47f3aa79e0046b4c00c973e7be2fd306e..0d23c7a18bf2530956d9048e842588c298244ee5 100644 --- a/src/sql/ob_sql_trans_control.cpp +++ b/src/sql/ob_sql_trans_control.cpp @@ -864,7 +864,7 @@ int ObSqlTransControl::end_stmt(ObExecContext &exec_ctx, const bool rollback) OX (ObTransDeadlockDetectorAdapter::maintain_deadlock_info_when_end_stmt(exec_ctx, rollback)); auto &tx_result = session->get_trans_result(); if (OB_FAIL(ret)) { - } else if (tx_result.is_incomplete()) { + } else if (OB_E(EventTable::EN_TX_RESULT_INCOMPLETE, session->get_sessid()) tx_result.is_incomplete()) { if (!rollback) { LOG_ERROR("trans result incomplete, but rollback not issued"); } diff --git a/src/storage/tx/ob_trans_service_v4.cpp b/src/storage/tx/ob_trans_service_v4.cpp index 0b8fb7e6ded37caf30e06a426a74ea8b7c8bc740..d62dedb822171ddce39400be1299d9a361e4a60a 100644 --- a/src/storage/tx/ob_trans_service_v4.cpp +++ b/src/storage/tx/ob_trans_service_v4.cpp @@ -557,6 +557,10 @@ int ObTransService::abort_tx_(ObTxDesc &tx, const int cause, const bool cleanup) TRANS_LOG(WARN, "try abort tx which has decided", K(ret), K(tx), K(cause)); } else { + // TODO: refactor state switch and put this to there + if (ObTxDesc::State::IDLE == tx.state_) { + tx.state_change_flags_.STATIC_CHANGED_ = 1; + } tx.state_ = ObTxDesc::State::IN_TERMINATE; tx.abort_cause_ = cause; abort_participants_(tx);