[CP] [to #55446815] fix: last_trace_id() in PL/SQL
This commit is contained in:
@ -1628,8 +1628,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ObPLSPITraceIdGuard {
|
struct ObPLSPITraceIdGuard {
|
||||||
ObPLSPITraceIdGuard(const ObString &sql, const ObString &ps_sql, ObCurTraceId::TraceId *reused_trace_id = nullptr)
|
ObPLSPITraceIdGuard(const ObString &sql,
|
||||||
: sql_(sql), ps_sql_(ps_sql) {
|
const ObString &ps_sql,
|
||||||
|
ObSQLSessionInfo &session,
|
||||||
|
ObCurTraceId::TraceId *reused_trace_id = nullptr)
|
||||||
|
: sql_(sql), ps_sql_(ps_sql), session_(session) {
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
if (OB_NOT_NULL(ObCurTraceId::get_trace_id())) {
|
if (OB_NOT_NULL(ObCurTraceId::get_trace_id())) {
|
||||||
origin_trace_id_.set(*ObCurTraceId::get_trace_id());
|
origin_trace_id_.set(*ObCurTraceId::get_trace_id());
|
||||||
@ -1657,6 +1660,7 @@ struct ObPLSPITraceIdGuard {
|
|||||||
ObCurTraceId::TraceId curr_trace_id;
|
ObCurTraceId::TraceId curr_trace_id;
|
||||||
if (OB_NOT_NULL(ObCurTraceId::get_trace_id())) {
|
if (OB_NOT_NULL(ObCurTraceId::get_trace_id())) {
|
||||||
curr_trace_id.set(*ObCurTraceId::get_trace_id());
|
curr_trace_id.set(*ObCurTraceId::get_trace_id());
|
||||||
|
session_.set_last_trace_id(ObCurTraceId::get_trace_id());
|
||||||
ObCurTraceId::get_trace_id()->set(origin_trace_id_);
|
ObCurTraceId::get_trace_id()->set(origin_trace_id_);
|
||||||
|
|
||||||
LOG_TRACE("sql execution finished, trace id restored",
|
LOG_TRACE("sql execution finished, trace id restored",
|
||||||
@ -1668,6 +1672,7 @@ struct ObPLSPITraceIdGuard {
|
|||||||
ObCurTraceId::TraceId origin_trace_id_;
|
ObCurTraceId::TraceId origin_trace_id_;
|
||||||
const ObString sql_;
|
const ObString sql_;
|
||||||
const ObString ps_sql_;
|
const ObString ps_sql_;
|
||||||
|
ObSQLSessionInfo& session_;
|
||||||
};
|
};
|
||||||
|
|
||||||
//todo:@hr351303 确认sql 和 ps sql是否可以合一
|
//todo:@hr351303 确认sql 和 ps sql是否可以合一
|
||||||
@ -1692,7 +1697,6 @@ int ObSPIService::spi_inner_execute(ObPLExecCtx *ctx,
|
|||||||
ObWarningBuffer* wb = NULL;
|
ObWarningBuffer* wb = NULL;
|
||||||
FLTSpanGuard(pl_spi_query);
|
FLTSpanGuard(pl_spi_query);
|
||||||
CK (OB_NOT_NULL(ctx));
|
CK (OB_NOT_NULL(ctx));
|
||||||
ObPLSPITraceIdGuard trace_id_guard(sql, ps_sql);
|
|
||||||
CK (OB_NOT_NULL(ctx->allocator_));
|
CK (OB_NOT_NULL(ctx->allocator_));
|
||||||
CK (OB_NOT_NULL(ctx->exec_ctx_));
|
CK (OB_NOT_NULL(ctx->exec_ctx_));
|
||||||
CK (OB_NOT_NULL(ctx->exec_ctx_->get_my_session()));
|
CK (OB_NOT_NULL(ctx->exec_ctx_->get_my_session()));
|
||||||
@ -1706,6 +1710,7 @@ int ObSPIService::spi_inner_execute(ObPLExecCtx *ctx,
|
|||||||
exec_timestamp.exec_type_ = sql::PLSql;
|
exec_timestamp.exec_type_ = sql::PLSql;
|
||||||
|
|
||||||
ObSQLSessionInfo *session = ctx->exec_ctx_->get_my_session();
|
ObSQLSessionInfo *session = ctx->exec_ctx_->get_my_session();
|
||||||
|
ObPLSPITraceIdGuard trace_id_guard(sql, ps_sql, *session);
|
||||||
ObPLSubPLSqlTimeGuard guard(ctx);
|
ObPLSubPLSqlTimeGuard guard(ctx);
|
||||||
if (OB_SUCC(ret) && is_forall && !session->is_enable_batched_multi_statement()) {
|
if (OB_SUCC(ret) && is_forall && !session->is_enable_batched_multi_statement()) {
|
||||||
/* forall need rollback to for loop */
|
/* forall need rollback to for loop */
|
||||||
@ -3003,7 +3008,7 @@ int ObSPIService::spi_execute_immediate(ObPLExecCtx *ctx,
|
|||||||
OZ (spi_result.start_nested_stmt_if_need(ctx, sql_str.string(), stmt_type, for_update));
|
OZ (spi_result.start_nested_stmt_if_need(ctx, sql_str.string(), stmt_type, for_update));
|
||||||
|
|
||||||
// Step2: execute dynamic SQL now!
|
// Step2: execute dynamic SQL now!
|
||||||
ObPLSPITraceIdGuard trace_id_guard(sql_str.string(), ps_sql);
|
ObPLSPITraceIdGuard trace_id_guard(sql_str.string(), ps_sql, *session);
|
||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
} else if (need_execute_sql) {
|
} else if (need_execute_sql) {
|
||||||
ObExecRecord exec_record;
|
ObExecRecord exec_record;
|
||||||
@ -3955,7 +3960,7 @@ int ObSPIService::spi_cursor_open(ObPLExecCtx *ctx,
|
|||||||
}
|
}
|
||||||
cursor->set_last_execute_time(ObTimeUtility::current_time());
|
cursor->set_last_execute_time(ObTimeUtility::current_time());
|
||||||
} else { //MySQL Cursor/Updated Cursor/Server Cursor(REF_CURSOR, PACKAGE CURSOR)
|
} else { //MySQL Cursor/Updated Cursor/Server Cursor(REF_CURSOR, PACKAGE CURSOR)
|
||||||
ObPLSPITraceIdGuard trace_id_guard(sql, ps_sql);
|
ObPLSPITraceIdGuard trace_id_guard(sql, ps_sql, *session_info);
|
||||||
HEAP_VAR(ObSPIResultSet, spi_result) {
|
HEAP_VAR(ObSPIResultSet, spi_result) {
|
||||||
ObString sqlstr(sql);
|
ObString sqlstr(sql);
|
||||||
OZ (spi_result.init(*session_info));
|
OZ (spi_result.init(*session_info));
|
||||||
@ -4318,7 +4323,7 @@ int ObSPIService::dbms_cursor_open(ObPLExecCtx *ctx,
|
|||||||
int64_t tenant_version = 0;
|
int64_t tenant_version = 0;
|
||||||
int64_t sys_version = 0;
|
int64_t sys_version = 0;
|
||||||
int64_t retry_cnt = 0;
|
int64_t retry_cnt = 0;
|
||||||
ObPLSPITraceIdGuard trace_id_guard(sql_stmt,ps_sql);
|
ObPLSPITraceIdGuard trace_id_guard(sql_stmt, ps_sql, *session);
|
||||||
int64_t old_query_start_time = session->get_query_start_time();
|
int64_t old_query_start_time = session->get_query_start_time();
|
||||||
int64_t new_query_start_time = ObTimeUtility::current_time();
|
int64_t new_query_start_time = ObTimeUtility::current_time();
|
||||||
if (!cursor.is_ps_cursor()) {
|
if (!cursor.is_ps_cursor()) {
|
||||||
@ -4576,8 +4581,8 @@ int ObSPIService::do_cursor_fetch(ObPLExecCtx *ctx,
|
|||||||
} else if (!cursor->is_streaming()) { \
|
} else if (!cursor->is_streaming()) { \
|
||||||
bool can_retry = true; \
|
bool can_retry = true; \
|
||||||
ret = get_result(ctx, \
|
ret = get_result(ctx, \
|
||||||
static_cast<void*>((cursor)->get_spi_cursor()), \
|
static_cast<void*>((cursor)->get_spi_cursor()), \
|
||||||
false, \
|
false, \
|
||||||
into_exprs, \
|
into_exprs, \
|
||||||
into_count, \
|
into_count, \
|
||||||
column_types, \
|
column_types, \
|
||||||
@ -4595,8 +4600,8 @@ int ObSPIService::do_cursor_fetch(ObPLExecCtx *ctx,
|
|||||||
false, \
|
false, \
|
||||||
limit, \
|
limit, \
|
||||||
return_types, \
|
return_types, \
|
||||||
return_type_count, \
|
return_type_count, \
|
||||||
is_type_record); \
|
is_type_record); \
|
||||||
} else { \
|
} else { \
|
||||||
ObString sql; \
|
ObString sql; \
|
||||||
ObString ps_sql; \
|
ObString ps_sql; \
|
||||||
@ -4605,14 +4610,15 @@ int ObSPIService::do_cursor_fetch(ObPLExecCtx *ctx,
|
|||||||
} else { \
|
} else { \
|
||||||
sql = spi_result->get_sql_ctx().cur_sql_; \
|
sql = spi_result->get_sql_ctx().cur_sql_; \
|
||||||
} \
|
} \
|
||||||
ObPLSPITraceIdGuard trace_id_guard(sql, ps_sql, cursor->get_sql_trace_id()); \
|
ObPLSPITraceIdGuard trace_id_guard( \
|
||||||
|
sql, ps_sql, *session, cursor->get_sql_trace_id()); \
|
||||||
if (cursor->get_sql_trace_id()->is_invalid() \
|
if (cursor->get_sql_trace_id()->is_invalid() \
|
||||||
&& OB_NOT_NULL(ObCurTraceId::get_trace_id())) { \
|
&& OB_NOT_NULL(ObCurTraceId::get_trace_id())) { \
|
||||||
cursor->get_sql_trace_id()->set(*ObCurTraceId::get_trace_id()); \
|
cursor->get_sql_trace_id()->set(*ObCurTraceId::get_trace_id()); \
|
||||||
} \
|
} \
|
||||||
pl_trace_id = trace_id_guard.origin_trace_id_; \
|
pl_trace_id = trace_id_guard.origin_trace_id_; \
|
||||||
ret = inner_fetch_with_retry(ctx, \
|
ret = inner_fetch_with_retry(ctx, \
|
||||||
*cursor->get_cursor_handler(), \
|
*cursor->get_cursor_handler(), \
|
||||||
into_exprs, \
|
into_exprs, \
|
||||||
into_count, \
|
into_count, \
|
||||||
column_types, \
|
column_types, \
|
||||||
@ -4627,8 +4633,8 @@ int ObSPIService::do_cursor_fetch(ObPLExecCtx *ctx,
|
|||||||
limit, \
|
limit, \
|
||||||
cursor->get_last_execute_time(), \
|
cursor->get_last_execute_time(), \
|
||||||
return_types, \
|
return_types, \
|
||||||
return_type_count, \
|
return_type_count, \
|
||||||
is_type_record); \
|
is_type_record); \
|
||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
@ -4645,7 +4651,7 @@ int ObSPIService::do_cursor_fetch(ObPLExecCtx *ctx,
|
|||||||
#undef GET_RESULT
|
#undef GET_RESULT
|
||||||
|
|
||||||
if (cursor->is_streaming()) {
|
if (cursor->is_streaming()) {
|
||||||
ObPLSPITraceIdGuard trace_id_guard(nullptr, nullptr, cursor->get_sql_trace_id());
|
ObPLSPITraceIdGuard trace_id_guard(nullptr, nullptr, *session, cursor->get_sql_trace_id());
|
||||||
if (OB_ISNULL(spi_result)) {
|
if (OB_ISNULL(spi_result)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("spi result must be not null in oracle mode", K(ret), K(spi_result));
|
LOG_WARN("spi result must be not null in oracle mode", K(ret), K(spi_result));
|
||||||
|
|||||||
Reference in New Issue
Block a user