fix show trace cannot find root span while adaptting upstream

This commit is contained in:
obdev
2023-03-02 15:30:59 +00:00
committed by ob-robot
parent 292fabfee1
commit 6979025cf4
3 changed files with 30 additions and 10 deletions

View File

@ -112,7 +112,7 @@ int ObVirtualShowTrace::retrive_all_span_info()
LOG_TRACE("send inner sql to retrive records", KP(session_), K(session_->get_proxy_sessid()), LOG_TRACE("send inner sql to retrive records", KP(session_), K(session_->get_proxy_sessid()),
K(session_->get_sessid()), K(table_name), K(session_->get_sessid()), K(table_name),
K(tenant_id_), K(trace_id_), K(trace_id), K(tenant_id_), K(trace_id_), K(trace_id),
K(effective_tenant_id_)); K(effective_tenant_id_), K(ObString(sql_len, sql)));
if (sql_len >= OB_MAX_SQL_LENGTH || sql_len <= 0) { if (sql_len >= OB_MAX_SQL_LENGTH || sql_len <= 0) {
ret = OB_SIZE_OVERFLOW; ret = OB_SIZE_OVERFLOW;
SERVER_LOG(WARN, "failed to format sql. size not enough"); SERVER_LOG(WARN, "failed to format sql. size not enough");
@ -284,8 +284,9 @@ int ObVirtualShowTrace::generate_span_info_tree()
if (OB_FAIL(ret)) { if (OB_FAIL(ret)) {
// do nothing // do nothing
} else if (!found_root) { } else if (!found_root) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("not found root span reset show trace", K(session_->get_last_flt_span_id()), K(session_->get_last_flt_trace_id()));
show_trace_arr_.reset(); show_trace_arr_.reset();
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

@ -133,7 +133,6 @@ namespace sql
session.set_auto_flush_trace(false); session.set_auto_flush_trace(false);
session.set_trace_enable(false); session.set_trace_enable(false);
} }
OZ(ObFLTUtils::init_flt_show_trace_env(session));
return ret; return ret;
} }
@ -412,7 +411,13 @@ namespace sql
sid.deserialize(span_id.ptr(), span_id.length(), pos); sid.deserialize(span_id.ptr(), span_id.length(), pos);
OBTRACE->init(tid, sid); OBTRACE->init(tid, sid);
FLT_SET_TRACE_LEVEL(sess.get_control_info().level_); FLT_SET_TRACE_LEVEL(sess.get_control_info().level_);
if (sess.is_use_trace_log()) {
sess.set_auto_flush_trace(true);
}
FLT_SET_AUTO_FLUSH(sess.is_auto_flush_trace()); FLT_SET_AUTO_FLUSH(sess.is_auto_flush_trace());
char last_trace_id[OB_MAX_UUID_STR_LENGTH + 1];
pos = 0;
sid.tostring(last_trace_id, OB_MAX_UUID_STR_LENGTH + 1, pos);
} }
// update trace_id by server self // update trace_id by server self
} else { } else {
@ -429,6 +434,9 @@ namespace sql
} }
} }
FLT_SET_TRACE_LEVEL(sess.get_control_info().level_); FLT_SET_TRACE_LEVEL(sess.get_control_info().level_);
if (sess.is_use_trace_log()) {
sess.set_auto_flush_trace(true);
}
FLT_SET_AUTO_FLUSH(sess.is_auto_flush_trace()); FLT_SET_AUTO_FLUSH(sess.is_auto_flush_trace());
} }
@ -567,7 +575,9 @@ namespace sql
// record span // record span
if (OB_FAIL(ret)) { if (OB_FAIL(ret)) {
// do nothing // do nothing
} else if (OB_FAIL(flt_span_manager->record_span(data))) { } else {
while (true) {
if (OB_FAIL(flt_span_manager->record_span(data))) {
if (OB_SIZE_OVERFLOW == ret || OB_ALLOCATE_MEMORY_FAILED == ret) { if (OB_SIZE_OVERFLOW == ret || OB_ALLOCATE_MEMORY_FAILED == ret) {
LOG_TRACE("cannot allocate mem for record", K(ret)); LOG_TRACE("cannot allocate mem for record", K(ret));
ret = OB_SUCCESS; ret = OB_SUCCESS;
@ -577,6 +587,12 @@ namespace sql
} }
} }
} }
// If the slot is full, a certain amount of
// internal space will be released,
// and it needs to be added again
if (ret != OB_ENTRY_NOT_EXIST) break;
}
}
} }
return ret; return ret;
} }

View File

@ -709,6 +709,9 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
if (OB_UNLIKELY(parse_tree.num_child_ != 2 || NULL == parse_tree.children_)) { if (OB_UNLIKELY(parse_tree.num_child_ != 2 || NULL == parse_tree.children_)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("parse tree is wrong", K(ret), K(parse_tree.num_child_), K(parse_tree.children_)); LOG_WARN("parse tree is wrong", K(ret), K(parse_tree.num_child_), K(parse_tree.children_));
} else if (!session_info_->get_control_info().is_valid()) {
ret = OB_NOT_SUPPORTED;
LOG_USER_ERROR(OB_NOT_SUPPORTED, "If full link tracing is not enabled, show trace is");
} else { } else {
show_resv_ctx.condition_node_ = parse_tree.children_[0]; show_resv_ctx.condition_node_ = parse_tree.children_[0];
show_resv_ctx.stmt_type_ = stmt::T_SHOW_TRACE; show_resv_ctx.stmt_type_ = stmt::T_SHOW_TRACE;