fix show trace cannot find root span while adaptting upstream
This commit is contained in:
		@ -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) {
 | 
				
			||||||
 | 
				
			|||||||
@ -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;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -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;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user