From a9fbca91d0e5ebc81fda7f40eaf8432cdbcc895c Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 24 Aug 2023 07:10:35 +0000 Subject: [PATCH] fix flt trace cannot trace at only slow query policy --- deps/oblib/src/lib/trace/ob_trace.h | 6 ++++++ src/observer/mysql/obmp_base.cpp | 8 +++++--- src/sql/monitor/flt/ob_flt_utils.cpp | 20 +++++++++++--------- src/sql/monitor/flt/ob_flt_utils.h | 2 +- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/deps/oblib/src/lib/trace/ob_trace.h b/deps/oblib/src/lib/trace/ob_trace.h index 807a982a2d..64280fb20f 100644 --- a/deps/oblib/src/lib/trace/ob_trace.h +++ b/deps/oblib/src/lib/trace/ob_trace.h @@ -286,6 +286,10 @@ struct ObTrace OB_INLINE bool is_auto_flush() { return auto_flush_; } OB_INLINE void set_enable_show_trace(bool enable_show_trace) { enable_show_trace_ = enable_show_trace; } OB_INLINE bool is_enable_show_trace() { return enable_show_trace_; } + OB_INLINE void set_in_transaction(bool is_in_trans) { is_in_trans_ = is_in_trans; } + OB_INLINE bool is_in_transaction() { return is_in_trans_; } + OB_INLINE void set_is_query_trace(bool is_query_trc) { is_query_trc_ = is_query_trc; } + OB_INLINE bool is_query_trace() { return is_query_trc_; } void check_leak_span(); void reset(); void dump_span(); @@ -342,6 +346,8 @@ private: private: static thread_local ObTrace* save_buffer; uint64_t magic_code_; + bool is_in_trans_; + bool is_query_trc_; public: int64_t buffer_size_; int64_t offset_; diff --git a/src/observer/mysql/obmp_base.cpp b/src/observer/mysql/obmp_base.cpp index cafc0d4f90..5bb2a529e6 100644 --- a/src/observer/mysql/obmp_base.cpp +++ b/src/observer/mysql/obmp_base.cpp @@ -147,8 +147,6 @@ int ObMPBase::after_process(int error_code) // slow query will flush cache FLUSH_TRACE(); } - } else if (common::OB_SUCCESS != error_code) { - FLUSH_TRACE(); } else if (can_force_print(error_code)) { // 需要打印TRACE日志的错误码添加在这里 int process_ret = error_code; @@ -161,7 +159,12 @@ int ObMPBase::after_process(int error_code) } else { PRINT_TRACE(THE_TRACE); } + + if (common::OB_SUCCESS != error_code) { + FLUSH_TRACE(); + } } + ObFLTUtils::clean_flt_env(); return ret; } @@ -420,7 +423,6 @@ int ObMPBase::record_flt_trace(sql::ObSQLSessionInfo &session) const } } } - ObFLTUtils::clean_flt_env(session); return ret; } diff --git a/src/sql/monitor/flt/ob_flt_utils.cpp b/src/sql/monitor/flt/ob_flt_utils.cpp index 430af52f9a..8ba8b2a5fe 100644 --- a/src/sql/monitor/flt/ob_flt_utils.cpp +++ b/src/sql/monitor/flt/ob_flt_utils.cpp @@ -48,11 +48,11 @@ namespace sql return ret; } - void ObFLTUtils::clean_flt_env(sql::ObSQLSessionInfo &session) { - if (session.is_query_trc_granuality()) { + void ObFLTUtils::clean_flt_env() { + if (OBTRACE->is_query_trace()) { FLT_END_TRACE(); } else { - if (session.get_in_transaction()) { + if (OBTRACE->is_in_transaction()) { // do nothing } else { FLT_END_TRACE(); @@ -62,7 +62,7 @@ namespace sql int ObFLTUtils::clean_flt_show_trace_env(sql::ObSQLSessionInfo &session) { int ret = OB_SUCCESS; - if (session.is_query_trc_granuality()) { + if (OBTRACE->is_query_trace()) { // record current trace id if (OB_FAIL(record_flt_last_trace_id(session))) { LOG_WARN("failed to record last flt trace id", K(ret)); @@ -71,7 +71,7 @@ namespace sql } // transaction level show trace } else { - if (session.get_in_transaction()) { + if (OBTRACE->is_in_transaction()) { // do nothing } else { // record current trace id @@ -346,7 +346,9 @@ namespace sql // initialize log framework int ret = OB_SUCCESS; FLT_RESET_SPAN(); - if (sess.is_query_trc_granuality()) { + OBTRACE->set_in_transaction(sess.is_server_status_in_transaction()); + OBTRACE->set_is_query_trace(sess.is_query_trc_granuality()); + if (OBTRACE->is_query_trace()) { // reset trace_enable and flush trace in transcation granularity // init flush trace and trace enable if (!is_client_support_flt) { @@ -358,7 +360,7 @@ namespace sql //set by client } } else { - if (sess.is_server_status_in_transaction()) { + if (OBTRACE->is_in_transaction()) { // in the trans, do nothing } else { // reset trace_enable and flush trace in transcation granularity @@ -410,11 +412,11 @@ namespace sql // update trace_id by server self } else { // update trace_id in query granularity - if (sess.is_query_trc_granuality()) { + if (OBTRACE->is_query_trace()) { FLT_BEGIN_TRACE(); } else { // update trace_id in transaction granularity - if (!sess.get_in_transaction()) { + if (!OBTRACE->is_in_transaction()) { // begin new trace FLT_BEGIN_TRACE(); } else { diff --git a/src/sql/monitor/flt/ob_flt_utils.h b/src/sql/monitor/flt/ob_flt_utils.h index 2fae812dc5..3639323cc8 100644 --- a/src/sql/monitor/flt/ob_flt_utils.h +++ b/src/sql/monitor/flt/ob_flt_utils.h @@ -76,7 +76,7 @@ namespace sql static int update_flush_policy_by_control_info(sql::ObSQLSessionInfo &sess); static int record_flt_last_trace_id(sql::ObSQLSessionInfo &session); static int clean_flt_show_trace_env(sql::ObSQLSessionInfo &session); - static void clean_flt_env(sql::ObSQLSessionInfo &session); + static void clean_flt_env(); static int process_flt_span_rec(const char *buf, const int64_t len); static int resolve_flt_span_rec(ObIJsonBase *j_tree, ObArenaAllocator& alloc); static int set_json_str_val(ObString key, ObIJsonBase *jobject_ptr, ObString& val);