From 5c33a662ae4719ceb5b7b3b21b5de57688073d4e Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 19 Jun 2023 03:48:00 +0000 Subject: [PATCH] [CP] Fix connection hang when schema is not refreshed --- src/observer/mysql/obmp_connect.cpp | 5 +++++ src/share/schema/ob_multi_version_schema_service.cpp | 12 ++++++++++++ src/share/schema/ob_multi_version_schema_service.h | 1 + 3 files changed, 18 insertions(+) diff --git a/src/observer/mysql/obmp_connect.cpp b/src/observer/mysql/obmp_connect.cpp index 29f518717..f1d7bb0d9 100644 --- a/src/observer/mysql/obmp_connect.cpp +++ b/src/observer/mysql/obmp_connect.cpp @@ -1296,6 +1296,11 @@ int ObMPConnect::get_tenant_id(uint64_t &tenant_id) ret = OB_NOT_SUPPORTED; LOG_WARN("can't login meta tenant", KR(ret), K_(tenant_name), K(tenant_id)); LOG_USER_ERROR(OB_NOT_SUPPORTED, "login meta tenant"); + } else if (!gctx_.schema_service_->is_tenant_refreshed(tenant_id)) { + ret = OB_SERVER_IS_INIT; + LOG_WARN("tenant schema not refreshed yet", KR(ret), K(tenant_id)); + } else { + // do nothing } } } diff --git a/src/share/schema/ob_multi_version_schema_service.cpp b/src/share/schema/ob_multi_version_schema_service.cpp index f81fd2389..8c3499f4f 100644 --- a/src/share/schema/ob_multi_version_schema_service.cpp +++ b/src/share/schema/ob_multi_version_schema_service.cpp @@ -3613,6 +3613,18 @@ bool ObMultiVersionSchemaService::is_tenant_not_refreshed(const uint64_t tenant_ return schema_not_refreshed; } +// for obmp_connect +bool ObMultiVersionSchemaService::is_tenant_refreshed(const uint64_t tenant_id) const +{ + bool bret = false; + bool schema_not_refreshed = false; + int ret = refresh_full_schema_map_.get_refactored(tenant_id, schema_not_refreshed); + if (OB_SUCC(ret)) { + bret = !schema_not_refreshed; + } + return bret; +} + // sql should retry when tenant is normal but never refresh schema successfully. bool ObMultiVersionSchemaService::is_schema_error_need_retry( ObSchemaGetterGuard *guard, diff --git a/src/share/schema/ob_multi_version_schema_service.h b/src/share/schema/ob_multi_version_schema_service.h index 83b9bffe9..d8cfcbac2 100644 --- a/src/share/schema/ob_multi_version_schema_service.h +++ b/src/share/schema/ob_multi_version_schema_service.h @@ -241,6 +241,7 @@ public: bool is_tenant_full_schema(const uint64_t tenant_id) const; bool is_tenant_not_refreshed(const uint64_t tenant_id); + bool is_tenant_refreshed(const uint64_t tenant_id) const; // sql should retry when tenant is normal but never refresh schema successfully. bool is_schema_error_need_retry(