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 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_;

View File

@ -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;
}

View File

@ -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 {

View File

@ -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);