Compatible with upstream components that do not support show trace

This commit is contained in:
obdev
2023-01-28 20:22:15 +08:00
committed by ob-robot
parent 869f4c0bb8
commit f8c8061bfa
7 changed files with 56 additions and 8 deletions

View File

@ -269,7 +269,13 @@ int ObVirtualShowTrace::generate_span_info_tree()
if (OB_ISNULL(show_trace_arr_.at(i))) { if (OB_ISNULL(show_trace_arr_.at(i))) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
SERVER_LOG(WARN, "record ptr is null", K(i)); SERVER_LOG(WARN, "record ptr is null", K(i));
} else if (show_trace_arr_.at(i)->data_.parent_span_id_ == "00000000-0000-0000-0000-000000000000") { } else if (session_->get_last_flt_span_id().empty() &&
show_trace_arr_.at(i)->data_.parent_span_id_ == "00000000-0000-0000-0000-000000000000") {
found_root = true;
show_trace_arr_.at(i)->formatter_.level_ = depth;
OZ(root_arr.push_back(show_trace_arr_.at(i)));
} else if (!session_->get_last_flt_span_id().empty() &&
show_trace_arr_.at(i)->data_.parent_span_id_.compare(session_->get_last_flt_span_id()) == 0) {
found_root = true; found_root = true;
show_trace_arr_.at(i)->formatter_.level_ = depth; show_trace_arr_.at(i)->formatter_.level_ = depth;
OZ(root_arr.push_back(show_trace_arr_.at(i))); OZ(root_arr.push_back(show_trace_arr_.at(i)));
@ -279,7 +285,7 @@ int ObVirtualShowTrace::generate_span_info_tree()
// do nothing // do nothing
} else if (!found_root) { } else if (!found_root) {
show_trace_arr_.reset(); show_trace_arr_.reset();
LOG_TRACE("not found root span reset show trace"); LOG_INFO("not found root span reset show trace");
} else { } else {
// recursively generate span tree // recursively generate span tree
for (int64_t i = 0; OB_SUCC(ret) && i < root_arr.count(); ++i) { for (int64_t i = 0; OB_SUCC(ret) && i < root_arr.count(); ++i) {

View File

@ -1508,7 +1508,7 @@ static struct VarsInit{
ObSysVars[111].name_ = "ob_enable_show_trace" ; ObSysVars[111].name_ = "ob_enable_show_trace" ;
ObSysVars[111].data_type_ = ObIntType ; ObSysVars[111].data_type_ = ObIntType ;
ObSysVars[111].value_ = "0" ; ObSysVars[111].value_ = "0" ;
ObSysVars[111].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; ObSysVars[111].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE ;
ObSysVars[111].id_ = SYS_VAR_OB_ENABLE_SHOW_TRACE ; ObSysVars[111].id_ = SYS_VAR_OB_ENABLE_SHOW_TRACE ;
cur_max_var_id = MAX(cur_max_var_id, static_cast<int64_t>(SYS_VAR_OB_ENABLE_SHOW_TRACE)) ; cur_max_var_id = MAX(cur_max_var_id, static_cast<int64_t>(SYS_VAR_OB_ENABLE_SHOW_TRACE)) ;
ObSysVarsIdToArrayIdx[SYS_VAR_OB_ENABLE_SHOW_TRACE] = 111 ; ObSysVarsIdToArrayIdx[SYS_VAR_OB_ENABLE_SHOW_TRACE] = 111 ;

View File

@ -1489,7 +1489,7 @@
"value": "0", "value": "0",
"data_type": "bool", "data_type": "bool",
"info": "control whether use show trace", "info": "control whether use show trace",
"flags": "Global | SESSION | NEED_SERIALIZE", "flags": "SESSION | NEED_SERIALIZE",
"publish_version": "", "publish_version": "",
"info_cn": "", "info_cn": "",
"background_cn": "", "background_cn": "",

View File

@ -54,13 +54,23 @@ namespace sql
int ObFLTUtils::record_flt_last_trace_id(sql::ObSQLSessionInfo &session) { int ObFLTUtils::record_flt_last_trace_id(sql::ObSQLSessionInfo &session) {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
trace::UUID trc_uuid = OBTRACE->get_trace_id(); trace::UUID trc_uuid = OBTRACE->get_trace_id();
trace::UUID span_id;
char last_trace_id[OB_MAX_UUID_STR_LENGTH + 1]; char last_trace_id[OB_MAX_UUID_STR_LENGTH + 1];
char last_span_id_buf[OB_MAX_UUID_STR_LENGTH + 1];
ObString last_span_id;
session.get_flt_span_id(last_span_id);
int64_t pos = 0; int64_t pos = 0;
span_id.deserialize(last_span_id.ptr(), last_span_id.length(), pos);
pos = 0;
trc_uuid.tostring(last_trace_id, OB_MAX_UUID_STR_LENGTH + 1, pos); trc_uuid.tostring(last_trace_id, OB_MAX_UUID_STR_LENGTH + 1, pos);
pos = 0;
span_id.tostring(last_span_id_buf, OB_MAX_UUID_STR_LENGTH + 1, pos);
if (last_trace_id[0] == '\0') { if (last_trace_id[0] == '\0') {
// do nothing // do nothing
} else if (OB_FAIL(session.set_last_flt_trace_id(ObString(OB_MAX_UUID_STR_LENGTH + 1, last_trace_id)))) { } else if (OB_FAIL(session.set_last_flt_trace_id(ObString(OB_MAX_UUID_STR_LENGTH + 1, last_trace_id)))) {
LOG_WARN("failed to set last flt trace id", K(ret), K(ObString(OB_MAX_UUID_STR_LENGTH + 1, last_trace_id))); LOG_WARN("failed to set last flt trace id", K(ret), K(ObString(OB_MAX_UUID_STR_LENGTH + 1, last_trace_id)));
} else if (OB_FAIL(session.set_last_flt_span_id(ObString(OB_MAX_UUID_STR_LENGTH + 1, last_span_id_buf)))) {
LOG_WARN("failed to set last flt span id", K(ret), K(ObString(OB_MAX_UUID_STR_LENGTH + 1, last_span_id_buf)));
} else { } else {
// do nothing // do nothing
} }
@ -328,6 +338,9 @@ namespace sql
LOG_WARN("failed to deserialize full link trace extra info", KP(buf), K(ret), K(pos), K(v_len)); LOG_WARN("failed to deserialize full link trace extra info", KP(buf), K(ret), K(pos), K(v_len));
} else { } else {
// add to span // add to span
ObString empty_str;
empty_str.reset();
sess.set_last_flt_span_id(empty_str);
} }
break; break;
} }

View File

@ -38,12 +38,15 @@ namespace sql
flt_trace_id_[0] = '\0'; flt_trace_id_[0] = '\0';
flt_span_id_[0] = '\0'; flt_span_id_[0] = '\0';
last_flt_trace_id_buf_[0] = '\0'; last_flt_trace_id_buf_[0] = '\0';
last_flt_span_id_buf_[0] = '\0';
} }
void reset() { void reset() {
flt_trace_id_[0] = '\0'; flt_trace_id_[0] = '\0';
flt_span_id_[0] = '\0'; flt_span_id_[0] = '\0';
last_flt_trace_id_buf_[0] = '\0'; last_flt_trace_id_buf_[0] = '\0';
last_flt_trace_id_.reset(); last_flt_trace_id_.reset();
last_flt_span_id_buf_[0] = '\0';
last_flt_span_id_.reset();
row_traceformat_ = true; row_traceformat_ = true;
trc_granuality_ = ObTraceGranularity::TRANS_LEVEL; trc_granuality_ = ObTraceGranularity::TRANS_LEVEL;
} }
@ -52,6 +55,8 @@ namespace sql
char flt_span_id_[common::OB_MAX_UUID_LENGTH + 1]; char flt_span_id_[common::OB_MAX_UUID_LENGTH + 1];
ObString last_flt_trace_id_; ObString last_flt_trace_id_;
char last_flt_trace_id_buf_[OB_MAX_UUID_STR_LENGTH + 1]; char last_flt_trace_id_buf_[OB_MAX_UUID_STR_LENGTH + 1];
ObString last_flt_span_id_;
char last_flt_span_id_buf_[OB_MAX_UUID_STR_LENGTH + 1];
bool row_traceformat_; bool row_traceformat_;
ObTraceGranularity trc_granuality_; ObTraceGranularity trc_granuality_;
}; };

View File

@ -2023,6 +2023,24 @@ void ObBasicSessionInfo::get_flt_span_id(ObString &span_id) const
} }
} }
const ObString &ObBasicSessionInfo::get_last_flt_span_id() const
{
return flt_vars_.last_flt_span_id_;
}
int ObBasicSessionInfo::set_last_flt_span_id(const common::ObString &span_id)
{
int ret = OB_SUCCESS;
if (span_id.empty()) {
flt_vars_.last_flt_span_id_.reset();
} else {
int64_t span_len = std::min(static_cast<int64_t>(span_id.length()), OB_MAX_UUID_STR_LENGTH);
MEMCPY(flt_vars_.last_flt_span_id_buf_, span_id.ptr(), span_len);
flt_vars_.last_flt_span_id_buf_[span_len] = '\0';
flt_vars_.last_flt_span_id_.assign_ptr(flt_vars_.last_flt_span_id_buf_, span_len);
}
return ret;
}
const ObString &ObBasicSessionInfo::get_last_flt_trace_id() const const ObString &ObBasicSessionInfo::get_last_flt_trace_id() const
{ {
return flt_vars_.last_flt_trace_id_; return flt_vars_.last_flt_trace_id_;
@ -4026,7 +4044,8 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo)
thread_data_.user_client_addr_, thread_data_.user_client_addr_,
process_query_time_, process_query_time_,
flt_vars_.last_flt_trace_id_, flt_vars_.last_flt_trace_id_,
flt_vars_.row_traceformat_); flt_vars_.row_traceformat_,
flt_vars_.last_flt_span_id_);
}(); }();
return ret; return ret;
} }
@ -4183,6 +4202,7 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
sys_var_in_pc_str_.reset(); //sys_var_in_pc_str_在反序列化系统变量阶段可能会被污染,需要reset掉 sys_var_in_pc_str_.reset(); //sys_var_in_pc_str_在反序列化系统变量阶段可能会被污染,需要reset掉
config_in_pc_str_.reset(); config_in_pc_str_.reset();
flt_vars_.last_flt_trace_id_.reset(); flt_vars_.last_flt_trace_id_.reset();
flt_vars_.last_flt_span_id_.reset();
const ObTZInfoMap *tz_info_map = tz_info_wrap_.get_tz_info_offset().get_tz_info_map(); const ObTZInfoMap *tz_info_map = tz_info_wrap_.get_tz_info_offset().get_tz_info_map();
LST_DO_CODE(OB_UNIS_DECODE, LST_DO_CODE(OB_UNIS_DECODE,
sys_vars_cache_.inc_data_, sys_vars_cache_.inc_data_,
@ -4218,7 +4238,8 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
thread_data_.user_client_addr_, thread_data_.user_client_addr_,
process_query_time_, process_query_time_,
flt_vars_.last_flt_trace_id_, flt_vars_.last_flt_trace_id_,
flt_vars_.row_traceformat_); flt_vars_.row_traceformat_,
flt_vars_.last_flt_span_id_);
// deep copy string. // deep copy string.
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
if (OB_FAIL(name_pool_.write_string(app_trace_id_, &app_trace_id_))) { if (OB_FAIL(name_pool_.write_string(app_trace_id_, &app_trace_id_))) {
@ -4244,7 +4265,7 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
is_deserialized_ = true; is_deserialized_ = true;
tz_info_wrap_.set_tz_info_map(tz_info_map); tz_info_wrap_.set_tz_info_map(tz_info_map);
set_last_flt_trace_id(flt_vars_.last_flt_trace_id_); set_last_flt_trace_id(flt_vars_.last_flt_trace_id_);
set_last_flt_span_id(flt_vars_.last_flt_span_id_);
//在升级过程中,由于版本差异,高版本server如果收到低版本server发来的session变量,需要兼容处理 //在升级过程中,由于版本差异,高版本server如果收到低版本server发来的session变量,需要兼容处理
//反序列化完成后, 由于后面存在再次序列化给其他server的场景, 所以需要补齐需要序列化的系统变量 //反序列化完成后, 由于后面存在再次序列化给其他server的场景, 所以需要补齐需要序列化的系统变量
//fix以下场景 A(2.1)->B(2.2)->C(2.2)-> ret = -4016 //fix以下场景 A(2.1)->B(2.2)->C(2.2)-> ret = -4016
@ -4527,7 +4548,8 @@ OB_DEF_SERIALIZE_SIZE(ObBasicSessionInfo)
thread_data_.user_client_addr_, thread_data_.user_client_addr_,
process_query_time_, process_query_time_,
flt_vars_.last_flt_trace_id_, flt_vars_.last_flt_trace_id_,
flt_vars_.row_traceformat_); flt_vars_.row_traceformat_,
flt_vars_.last_flt_span_id_);
return len; return len;
} }

View File

@ -905,6 +905,8 @@ public:
int set_flt_trace_id(ObString trace_id); int set_flt_trace_id(ObString trace_id);
const ObString &get_last_flt_trace_id() const; const ObString &get_last_flt_trace_id() const;
int set_last_flt_trace_id(const common::ObString &trace_id); int set_last_flt_trace_id(const common::ObString &trace_id);
const ObString &get_last_flt_span_id() const;
int set_last_flt_span_id(const common::ObString &span_id);
bool is_row_traceformat() const { return flt_vars_.row_traceformat_; } bool is_row_traceformat() const { return flt_vars_.row_traceformat_; }
void set_is_row_traceformat(bool v) { flt_vars_.row_traceformat_ = v; } void set_is_row_traceformat(bool v) { flt_vars_.row_traceformat_ = v; }
bool is_query_trc_granuality() const { return sys_vars_cache_.get_ob_enable_trace_log()? bool is_query_trc_granuality() const { return sys_vars_cache_.get_ob_enable_trace_log()?