fix flt trace cannot trace at only slow query policy

This commit is contained in:
obdev
2023-08-24 07:10:35 +00:00
committed by ob-robot
parent bcab8c659b
commit a9fbca91d0
4 changed files with 23 additions and 13 deletions

View File

@ -286,6 +286,10 @@ struct ObTrace
OB_INLINE bool is_auto_flush() { return auto_flush_; } 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 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 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 check_leak_span();
void reset(); void reset();
void dump_span(); void dump_span();
@ -342,6 +346,8 @@ private:
private: private:
static thread_local ObTrace* save_buffer; static thread_local ObTrace* save_buffer;
uint64_t magic_code_; uint64_t magic_code_;
bool is_in_trans_;
bool is_query_trc_;
public: public:
int64_t buffer_size_; int64_t buffer_size_;
int64_t offset_; int64_t offset_;

View File

@ -147,8 +147,6 @@ int ObMPBase::after_process(int error_code)
// slow query will flush cache // slow query will flush cache
FLUSH_TRACE(); FLUSH_TRACE();
} }
} else if (common::OB_SUCCESS != error_code) {
FLUSH_TRACE();
} else if (can_force_print(error_code)) { } else if (can_force_print(error_code)) {
// 需要打印TRACE日志的错误码添加在这里 // 需要打印TRACE日志的错误码添加在这里
int process_ret = error_code; int process_ret = error_code;
@ -161,7 +159,12 @@ int ObMPBase::after_process(int error_code)
} else { } else {
PRINT_TRACE(THE_TRACE); PRINT_TRACE(THE_TRACE);
} }
if (common::OB_SUCCESS != error_code) {
FLUSH_TRACE();
}
} }
ObFLTUtils::clean_flt_env();
return ret; return ret;
} }
@ -420,7 +423,6 @@ int ObMPBase::record_flt_trace(sql::ObSQLSessionInfo &session) const
} }
} }
} }
ObFLTUtils::clean_flt_env(session);
return ret; return ret;
} }

View File

@ -48,11 +48,11 @@ namespace sql
return ret; return ret;
} }
void ObFLTUtils::clean_flt_env(sql::ObSQLSessionInfo &session) { void ObFLTUtils::clean_flt_env() {
if (session.is_query_trc_granuality()) { if (OBTRACE->is_query_trace()) {
FLT_END_TRACE(); FLT_END_TRACE();
} else { } else {
if (session.get_in_transaction()) { if (OBTRACE->is_in_transaction()) {
// do nothing // do nothing
} else { } else {
FLT_END_TRACE(); FLT_END_TRACE();
@ -62,7 +62,7 @@ namespace sql
int ObFLTUtils::clean_flt_show_trace_env(sql::ObSQLSessionInfo &session) { int ObFLTUtils::clean_flt_show_trace_env(sql::ObSQLSessionInfo &session) {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
if (session.is_query_trc_granuality()) { if (OBTRACE->is_query_trace()) {
// record current trace id // record current trace id
if (OB_FAIL(record_flt_last_trace_id(session))) { if (OB_FAIL(record_flt_last_trace_id(session))) {
LOG_WARN("failed to record last flt trace id", K(ret)); LOG_WARN("failed to record last flt trace id", K(ret));
@ -71,7 +71,7 @@ namespace sql
} }
// transaction level show trace // transaction level show trace
} else { } else {
if (session.get_in_transaction()) { if (OBTRACE->is_in_transaction()) {
// do nothing // do nothing
} else { } else {
// record current trace id // record current trace id
@ -346,7 +346,9 @@ namespace sql
// initialize log framework // initialize log framework
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
FLT_RESET_SPAN(); 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 // reset trace_enable and flush trace in transcation granularity
// init flush trace and trace enable // init flush trace and trace enable
if (!is_client_support_flt) { if (!is_client_support_flt) {
@ -358,7 +360,7 @@ namespace sql
//set by client //set by client
} }
} else { } else {
if (sess.is_server_status_in_transaction()) { if (OBTRACE->is_in_transaction()) {
// in the trans, do nothing // in the trans, do nothing
} else { } else {
// reset trace_enable and flush trace in transcation granularity // reset trace_enable and flush trace in transcation granularity
@ -410,11 +412,11 @@ namespace sql
// update trace_id by server self // update trace_id by server self
} else { } else {
// update trace_id in query granularity // update trace_id in query granularity
if (sess.is_query_trc_granuality()) { if (OBTRACE->is_query_trace()) {
FLT_BEGIN_TRACE(); FLT_BEGIN_TRACE();
} else { } else {
// update trace_id in transaction granularity // update trace_id in transaction granularity
if (!sess.get_in_transaction()) { if (!OBTRACE->is_in_transaction()) {
// begin new trace // begin new trace
FLT_BEGIN_TRACE(); FLT_BEGIN_TRACE();
} else { } else {

View File

@ -76,7 +76,7 @@ namespace sql
static int update_flush_policy_by_control_info(sql::ObSQLSessionInfo &sess); static int update_flush_policy_by_control_info(sql::ObSQLSessionInfo &sess);
static int record_flt_last_trace_id(sql::ObSQLSessionInfo &session); static int record_flt_last_trace_id(sql::ObSQLSessionInfo &session);
static int clean_flt_show_trace_env(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 process_flt_span_rec(const char *buf, const int64_t len);
static int resolve_flt_span_rec(ObIJsonBase *j_tree, ObArenaAllocator& alloc); static int resolve_flt_span_rec(ObIJsonBase *j_tree, ObArenaAllocator& alloc);
static int set_json_str_val(ObString key, ObIJsonBase *jobject_ptr, ObString& val); static int set_json_str_val(ObString key, ObIJsonBase *jobject_ptr, ObString& val);