Skip to content

Commit 58102d5

Browse files
obdevob-robot
authored andcommitted
Call PL also waits for sys package ready
1 parent 04ec2bd commit 58102d5

4 files changed

Lines changed: 42 additions & 26 deletions

File tree

src/observer/embed/python/ob_embed_impl.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,9 @@ std::shared_ptr<ObLiteEmbedConn> ObLiteEmbed::connect(const char* db_name, const
341341
OX (session->set_priv_user_id(user_info->get_user_id()));
342342
OX (session->set_user_priv_set(user_info->get_priv_set()));
343343
OX (session->init_use_rich_format());
344+
ObObj param_val;
345+
param_val.set_int(60 * 1000 * 1000);
346+
OZ(session->update_sys_variable(SYS_VAR_OB_QUERY_TIMEOUT, param_val));
344347
if (OB_NOT_NULL(db_name) && STRLEN(db_name) > 0) {
345348
OZ (schema_guard.get_db_priv_set(OB_SYS_TENANT_ID, user_info->get_user_id(), db_name, db_priv_set));
346349
OX (session->set_db_priv_set(db_priv_set));

src/sql/resolver/cmd/ob_call_procedure_resolver.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,8 @@ int ObCallProcedureResolver::resolve(const ParseNode &parse_tree)
358358
session_info_->get_effective_tenant_id()));
359359
OX (call_proc_info = static_cast<ObCallProcedureInfo*>(stmt->get_cacheobj_guard().get_cache_obj()));
360360
CK (OB_NOT_NULL(call_proc_info));
361+
// Wait for sys package to be loaded if not ready yet
362+
OZ (ObResolverUtils::wait_for_sys_package_ready(*session_info_));
361363
// Parsing process name
362364
if (OB_SUCC(ret)) {
363365
if (T_SP_ACCESS_NAME != name_node->type_) {

src/sql/resolver/ob_resolver_utils.cpp

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6799,6 +6799,37 @@ int ObResolverUtils::set_parallel_info(sql::ObSQLSessionInfo &session_info,
67996799
return ret;
68006800
}
68016801

6802+
int ObResolverUtils::wait_for_sys_package_ready(ObSQLSessionInfo &session_info)
6803+
{
6804+
int ret = OB_SUCCESS;
6805+
if (GCONF._enable_async_load_sys_package && !GCTX.sys_package_ready_ && session_info.is_user_session()) {
6806+
const int64_t retry_interval_us = 100L * 1000L; // 100ms
6807+
bool waited = false;
6808+
while (!GCTX.sys_package_ready_ && OB_SUCC(ret)) {
6809+
if (NULL != session_info.get_cur_exec_ctx() && OB_FAIL(session_info.get_cur_exec_ctx()->check_status())) {
6810+
LOG_WARN("check status failed", K(ret));
6811+
} else {
6812+
if (!waited) {
6813+
LOG_INFO("sys package not ready yet, waiting for loading completion");
6814+
waited = true;
6815+
}
6816+
ob_usleep(retry_interval_us);
6817+
}
6818+
}
6819+
if (OB_FAIL(ret)) {
6820+
LOG_WARN("sys package waiting interrupted", K(ret));
6821+
} else if (!GCTX.sys_package_ready_) {
6822+
LOG_WARN("sys package not ready after waiting");
6823+
} else {
6824+
if (waited) {
6825+
LOG_INFO("sys package ready after waiting");
6826+
}
6827+
// Return OB_SCHEMA_EAGAIN to retry acquiring schema
6828+
ret = OB_SCHEMA_EAGAIN;
6829+
}
6830+
}
6831+
return ret;
6832+
}
68026833

68036834
int ObResolverUtils::resolve_external_symbol(common::ObIAllocator &allocator,
68046835
sql::ObRawExprFactory &expr_factory,
@@ -6839,32 +6870,8 @@ int ObResolverUtils::resolve_external_symbol(common::ObIAllocator &allocator,
68396870

68406871
if (OB_SUCC(ret)) {
68416872
// Wait for sys package to be loaded if not ready yet
6842-
if (GCONF._enable_async_load_sys_package && !GCTX.sys_package_ready_ && session_info.is_user_session()) {
6843-
const int64_t retry_interval_us = 100L * 1000L; // 100ms
6844-
bool waited = false;
6845-
while (!GCTX.sys_package_ready_ && OB_SUCC(ret)) {
6846-
if (NULL != session_info.get_cur_exec_ctx() && OB_FAIL(session_info.get_cur_exec_ctx()->check_status())) {
6847-
LOG_WARN("check status failed", K(ret));
6848-
} else {
6849-
if (!waited) {
6850-
LOG_INFO("sys package not ready yet, waiting for loading completion", K(q_name));
6851-
waited = true;
6852-
}
6853-
ob_usleep(retry_interval_us);
6854-
}
6855-
}
6856-
if (OB_FAIL(ret)) {
6857-
LOG_WARN("sys package waiting interrupted", K(ret), K(q_name));
6858-
} else if (!GCTX.sys_package_ready_) {
6859-
LOG_WARN("sys package not ready after waiting", K(q_name));
6860-
} else {
6861-
if (waited) {
6862-
LOG_INFO("sys package ready after waiting", K(q_name));
6863-
}
6864-
// Return OB_SCHEMA_EAGAIN to retry acquiring schema
6865-
ret = OB_SCHEMA_EAGAIN;
6866-
}
6867-
} else {
6873+
OZ (wait_for_sys_package_ready(session_info));
6874+
if (OB_SUCC(ret)) {
68686875
pl::ObPLResolver pl_resolver(allocator,
68696876
session_info,
68706877
schema_guard,

src/sql/resolver/ob_resolver_utils.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,10 @@ struct ObResolverUtils
302302
ObRawExpr &expr,
303303
ObQueryCtx &ctx);
304304

305+
// Wait for sys package to be loaded if not ready yet
306+
// Returns OB_SCHEMA_EAGAIN if waiting succeeded and retry is needed, OB_SUCCESS if no waiting needed or already ready
307+
static int wait_for_sys_package_ready(ObSQLSessionInfo &session_info);
308+
305309
static int resolve_external_symbol(common::ObIAllocator &allocator,
306310
sql::ObRawExprFactory &expr_factory,
307311
sql::ObSQLSessionInfo &session_info,

0 commit comments

Comments
 (0)