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))) {
ret = OB_ERR_UNEXPECTED;
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;
show_trace_arr_.at(i)->formatter_.level_ = depth;
OZ(root_arr.push_back(show_trace_arr_.at(i)));
@ -279,7 +285,7 @@ int ObVirtualShowTrace::generate_span_info_tree()
// do nothing
} else if (!found_root) {
show_trace_arr_.reset();
LOG_TRACE("not found root span reset show trace");
LOG_INFO("not found root span reset show trace");
} else {
// recursively generate span tree
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].data_type_ = ObIntType ;
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 ;
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 ;

View File

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

View File

@ -54,13 +54,23 @@ namespace sql
int ObFLTUtils::record_flt_last_trace_id(sql::ObSQLSessionInfo &session) {
int ret = OB_SUCCESS;
trace::UUID trc_uuid = OBTRACE->get_trace_id();
trace::UUID span_id;
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;
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);
pos = 0;
span_id.tostring(last_span_id_buf, OB_MAX_UUID_STR_LENGTH + 1, pos);
if (last_trace_id[0] == '\0') {
// do nothing
} 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)));
} 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 {
// 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));
} else {
// add to span
ObString empty_str;
empty_str.reset();
sess.set_last_flt_span_id(empty_str);
}
break;
}

View File

@ -38,12 +38,15 @@ namespace sql
flt_trace_id_[0] = '\0';
flt_span_id_[0] = '\0';
last_flt_trace_id_buf_[0] = '\0';
last_flt_span_id_buf_[0] = '\0';
}
void reset() {
flt_trace_id_[0] = '\0';
flt_span_id_[0] = '\0';
last_flt_trace_id_buf_[0] = '\0';
last_flt_trace_id_.reset();
last_flt_span_id_buf_[0] = '\0';
last_flt_span_id_.reset();
row_traceformat_ = true;
trc_granuality_ = ObTraceGranularity::TRANS_LEVEL;
}
@ -52,6 +55,8 @@ namespace sql
char flt_span_id_[common::OB_MAX_UUID_LENGTH + 1];
ObString last_flt_trace_id_;
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_;
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
{
return flt_vars_.last_flt_trace_id_;
@ -4026,7 +4044,8 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo)
thread_data_.user_client_addr_,
process_query_time_,
flt_vars_.last_flt_trace_id_,
flt_vars_.row_traceformat_);
flt_vars_.row_traceformat_,
flt_vars_.last_flt_span_id_);
}();
return ret;
}
@ -4183,6 +4202,7 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
sys_var_in_pc_str_.reset(); //sys_var_in_pc_str_在反序列化系统变量阶段可能会被污染,需要reset掉
config_in_pc_str_.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();
LST_DO_CODE(OB_UNIS_DECODE,
sys_vars_cache_.inc_data_,
@ -4218,7 +4238,8 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
thread_data_.user_client_addr_,
process_query_time_,
flt_vars_.last_flt_trace_id_,
flt_vars_.row_traceformat_);
flt_vars_.row_traceformat_,
flt_vars_.last_flt_span_id_);
// deep copy string.
if (OB_SUCC(ret)) {
if (OB_FAIL(name_pool_.write_string(app_trace_id_, &app_trace_id_))) {
@ -4244,7 +4265,7 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo)
is_deserialized_ = true;
tz_info_wrap_.set_tz_info_map(tz_info_map);
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的场景, 所以需要补齐需要序列化的系统变量
//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_,
process_query_time_,
flt_vars_.last_flt_trace_id_,
flt_vars_.row_traceformat_);
flt_vars_.row_traceformat_,
flt_vars_.last_flt_span_id_);
return len;
}

View File

@ -905,6 +905,8 @@ public:
int set_flt_trace_id(ObString trace_id);
const ObString &get_last_flt_trace_id() const;
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_; }
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()?