Compatible with upstream components that do not support show trace
This commit is contained in:
@ -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) {
|
||||||
|
|||||||
@ -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 ;
|
||||||
|
|||||||
@ -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": "",
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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_;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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()?
|
||||||
|
|||||||
Reference in New Issue
Block a user