From 7af83ab4f7168ec8821de7798f8f280eacc52777 Mon Sep 17 00:00:00 2001 From: hnwyllmm Date: Mon, 27 Jul 2026 19:36:12 +0800 Subject: [PATCH 1/3] fix: handle stale routine definers in macOS mysqltests --- src/share/schema/ob_schema_getter_guard.cpp | 23 +++++++++++++++++-- .../load_data/t/query_load_data_stat.test | 1 - 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/share/schema/ob_schema_getter_guard.cpp b/src/share/schema/ob_schema_getter_guard.cpp index faf290a22..d566e57d8 100644 --- a/src/share/schema/ob_schema_getter_guard.cpp +++ b/src/share/schema/ob_schema_getter_guard.cpp @@ -3526,6 +3526,8 @@ int ObSchemaGetterGuard::check_routine_definer_existed(const ObString &user_name { int ret = OB_SUCCESS; const ObSchemaMgr *mgr = NULL; + ObSEArray routine_schemas; + existed = false; if (!check_inner_stat()) { ret = OB_INNER_STAT_ERROR; @@ -3535,8 +3537,25 @@ int ObSchemaGetterGuard::check_routine_definer_existed(const ObString &user_name LOG_WARN("invalid argument", KR(ret), K(user_name)); } else if (OB_FAIL(check_lazy_guard( mgr))) { LOG_WARN("fail to check lazy guard", KR(ret)); - } else if (OB_FAIL(mgr->routine_mgr_.check_user_reffered_by_definer(user_name, existed))) { - LOG_WARN("check routine definer failed", KR(ret), K(user_name)); + } else if (OB_FAIL(mgr->routine_mgr_.get_routine_schemas_in_runtime(routine_schemas))) { + LOG_WARN("get routine schemas in runtime failed", KR(ret), K(user_name)); + } else { + for (int64_t i = 0; OB_SUCC(ret) && !existed && i < routine_schemas.count(); ++i) { + const ObSimpleRoutineSchema *routine_schema = routine_schemas.at(i); + const ObDatabaseSchema *database_schema = NULL; + if (OB_ISNULL(routine_schema)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("routine schema is null", KR(ret), K(i)); + } else if (0 != user_name.compare(routine_schema->get_priv_user())) { + // Ignore routines owned by another definer. + } else if (OB_FAIL(get_database_schema(routine_schema->get_database_id(), database_schema))) { + LOG_WARN("get database schema failed", KR(ret), KPC(routine_schema)); + } else if (NULL != database_schema && !database_schema->is_in_recyclebin()) { + existed = true; + } + // A routine whose database has been dropped or moved to the recycle bin + // is no longer a live definer reference. + } } return ret; } diff --git a/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test b/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test index 9276f952b..9c0c0471b 100644 --- a/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test +++ b/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test @@ -46,7 +46,6 @@ send load data /*+ parallel(1) load_batch_size(100) */ infile 'data_for_mysqltes # Query __all_virtual_load_data_stat during loading data connection conn_query; ---sleep 1 --sorted_result select table_name,file_path,table_column,file_column,batch_size,parallel,load_mode,total_bytes from __all_virtual_load_data_stat; disconnect conn_query; From fa9e503df1363d48e437f1665652a1403952a20f Mon Sep 17 00:00:00 2001 From: hnwyllmm Date: Mon, 27 Jul 2026 20:07:32 +0800 Subject: [PATCH 2/3] revert: preserve recyclebin routine definer checks --- src/share/schema/ob_schema_getter_guard.cpp | 23 ++------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/src/share/schema/ob_schema_getter_guard.cpp b/src/share/schema/ob_schema_getter_guard.cpp index d566e57d8..faf290a22 100644 --- a/src/share/schema/ob_schema_getter_guard.cpp +++ b/src/share/schema/ob_schema_getter_guard.cpp @@ -3526,8 +3526,6 @@ int ObSchemaGetterGuard::check_routine_definer_existed(const ObString &user_name { int ret = OB_SUCCESS; const ObSchemaMgr *mgr = NULL; - ObSEArray routine_schemas; - existed = false; if (!check_inner_stat()) { ret = OB_INNER_STAT_ERROR; @@ -3537,25 +3535,8 @@ int ObSchemaGetterGuard::check_routine_definer_existed(const ObString &user_name LOG_WARN("invalid argument", KR(ret), K(user_name)); } else if (OB_FAIL(check_lazy_guard( mgr))) { LOG_WARN("fail to check lazy guard", KR(ret)); - } else if (OB_FAIL(mgr->routine_mgr_.get_routine_schemas_in_runtime(routine_schemas))) { - LOG_WARN("get routine schemas in runtime failed", KR(ret), K(user_name)); - } else { - for (int64_t i = 0; OB_SUCC(ret) && !existed && i < routine_schemas.count(); ++i) { - const ObSimpleRoutineSchema *routine_schema = routine_schemas.at(i); - const ObDatabaseSchema *database_schema = NULL; - if (OB_ISNULL(routine_schema)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("routine schema is null", KR(ret), K(i)); - } else if (0 != user_name.compare(routine_schema->get_priv_user())) { - // Ignore routines owned by another definer. - } else if (OB_FAIL(get_database_schema(routine_schema->get_database_id(), database_schema))) { - LOG_WARN("get database schema failed", KR(ret), KPC(routine_schema)); - } else if (NULL != database_schema && !database_schema->is_in_recyclebin()) { - existed = true; - } - // A routine whose database has been dropped or moved to the recycle bin - // is no longer a live definer reference. - } + } else if (OB_FAIL(mgr->routine_mgr_.check_user_reffered_by_definer(user_name, existed))) { + LOG_WARN("check routine definer failed", KR(ret), K(user_name)); } return ret; } From ed67cb409a12e1fab78395a6495a43a72e466613 Mon Sep 17 00:00:00 2001 From: hnwyllmm Date: Mon, 27 Jul 2026 20:46:50 +0800 Subject: [PATCH 3/3] revert: restore product bug and timing-sensitive cases --- .../mysql_test/test_suite/load_data/t/query_load_data_stat.test | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test b/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test index 9c0c0471b..9276f952b 100644 --- a/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test +++ b/tools/deploy/mysql_test/test_suite/load_data/t/query_load_data_stat.test @@ -46,6 +46,7 @@ send load data /*+ parallel(1) load_batch_size(100) */ infile 'data_for_mysqltes # Query __all_virtual_load_data_stat during loading data connection conn_query; +--sleep 1 --sorted_result select table_name,file_path,table_column,file_column,batch_size,parallel,load_mode,total_bytes from __all_virtual_load_data_stat; disconnect conn_query;