From 1d14c2ce7cc893f5adc3c17a358ae6c4377ed4b5 Mon Sep 17 00:00:00 2001 From: chinaxing Date: Thu, 13 Apr 2023 07:11:42 +0000 Subject: [PATCH] [master][tx-route] when act-on-temp dump txdesc and trace --- src/sql/ob_sql_trans_control.cpp | 3 +++ src/storage/tx/ob_trans_define_v4.cpp | 13 +++++++++++++ src/storage/tx/ob_trans_define_v4.h | 1 + 3 files changed, 17 insertions(+) diff --git a/src/sql/ob_sql_trans_control.cpp b/src/sql/ob_sql_trans_control.cpp index 418d65c34d..5cabfeb6c5 100644 --- a/src/sql/ob_sql_trans_control.cpp +++ b/src/sql/ob_sql_trans_control.cpp @@ -56,6 +56,9 @@ TRANS_LOG(ERROR, "trans act on txn temporary node", KR(ret), \ K(session->get_txn_free_route_ctx()), \ K(session->get_tx_id()), KPC(session)); \ + if (session->get_tx_desc()) { \ + session->get_tx_desc()->dump_and_print_trace(); \ + } \ } namespace oceanbase diff --git a/src/storage/tx/ob_trans_define_v4.cpp b/src/storage/tx/ob_trans_define_v4.cpp index 569fe0325b..130e089673 100644 --- a/src/storage/tx/ob_trans_define_v4.cpp +++ b/src/storage/tx/ob_trans_define_v4.cpp @@ -483,6 +483,19 @@ void ObTxDesc::print_trace() } } +void ObTxDesc::dump_and_print_trace() +{ + int ret = OB_SUCCESS; + if (OB_FAIL(lock_.trylock())) { + TRANS_LOG(WARN, "acquire lock fail", K(ret), KP(this), K(tx_id_)); + } else { + share::ObTaskController::get().allow_next_syslog(); + TRANS_LOG(INFO, "[tx desc dump]", KPC(this)); + print_trace_(); + lock_.unlock(); + } +} + bool ObTxDesc::in_tx_or_has_extra_state() { ObSpinLockGuard guard(lock_); diff --git a/src/storage/tx/ob_trans_define_v4.h b/src/storage/tx/ob_trans_define_v4.h index 86c6ca76ce..f074669ece 100644 --- a/src/storage/tx/ob_trans_define_v4.h +++ b/src/storage/tx/ob_trans_define_v4.h @@ -616,6 +616,7 @@ public: bool is_in_tx() const { return state_ > State::IDLE; } bool is_tx_active() const { return state_ >= State::ACTIVE && state_ < State::IN_TERMINATE; } void print_trace(); + void dump_and_print_trace(); bool in_tx_or_has_extra_state(); bool in_tx_for_free_route(); const ObTransID &get_tx_id() const { return tx_id_; }