@@ -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
68036834int 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,
0 commit comments