From 36af52b8d8c5aae364fb2bc703a57546216a4d5c Mon Sep 17 00:00:00 2001 From: zhjc1124 Date: Thu, 21 Sep 2023 07:40:31 +0000 Subject: [PATCH] [CP] alter server_cpu_quota_max/server_cpu_quota_min dynamic_effective --- src/observer/ob_server.cpp | 26 ++++++++++---- src/observer/ob_server.h | 2 +- src/observer/omt/ob_multi_tenant.cpp | 43 +++++++++++++++-------- src/observer/omt/ob_multi_tenant.h | 1 + src/share/config/ob_config_manager.cpp | 2 ++ src/share/parameter/ob_parameter_seed.ipp | 4 +-- 6 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/observer/ob_server.cpp b/src/observer/ob_server.cpp index 0862b8645..86c7961b3 100644 --- a/src/observer/ob_server.cpp +++ b/src/observer/ob_server.cpp @@ -880,10 +880,10 @@ int ObServer::start() FLOG_INFO("success to start log pool"); } - if (FAILEDx(try_create_hidden_sys())) { - LOG_ERROR("fail to create hidden sys tenant", KR(ret)); + if (FAILEDx(try_update_hidden_sys())) { + LOG_ERROR("fail to update hidden sys tenant", KR(ret)); } else { - FLOG_INFO("success to create hidden sys tenant"); + FLOG_INFO("success to update hidden sys tenant"); } if (FAILEDx(weak_read_service_.start())) { @@ -1088,12 +1088,24 @@ int ObServer::start() } // try create hidden sys tenant must after ObServerCheckpointSlogHandler start, -// no need create if real sys has been replayed out from slog. -int ObServer::try_create_hidden_sys() +// update hidden sys tenant unit if it exists +int ObServer::try_update_hidden_sys() { int ret = OB_SUCCESS; - if (OB_FAIL(multi_tenant_.create_hidden_sys_tenant())) { - LOG_ERROR("fail to create hidden sys tenant", KR(ret)); + const uint64_t tenant_id = OB_SYS_TENANT_ID; + omt::ObTenant *tenant = nullptr; + if (OB_FAIL(multi_tenant_.get_tenant(tenant_id, tenant))) { + if (OB_TENANT_NOT_IN_SERVER == ret) { // only when adding a new server + ret = OB_SUCCESS; + if (OB_FAIL(multi_tenant_.create_hidden_sys_tenant())) { + LOG_ERROR("fail to create hidden sys tenant", KR(ret)); + } + LOG_INFO("finish create hidden sys", KR(ret)); + } else { + LOG_ERROR("fail to get tenant", KR(ret)); + } + } else if (OB_FAIL(multi_tenant_.update_hidden_sys_tenant())) { + LOG_WARN("fail to update hidden sys tenant unit", KR(ret)); } return ret; } diff --git a/src/observer/ob_server.h b/src/observer/ob_server.h index 164d6ed13..d80b5be57 100644 --- a/src/observer/ob_server.h +++ b/src/observer/ob_server.h @@ -297,7 +297,7 @@ private: int set_running_mode(); void check_user_tenant_schema_refreshed(const common::ObIArray &tenant_ids, const int64_t expire_time); void check_log_replay_over(const common::ObIArray &tenant_ids, const int64_t expire_time); - int try_create_hidden_sys(); + int try_update_hidden_sys(); int parse_mode(); // ------------------------------- arb server start ------------------------------------ diff --git a/src/observer/omt/ob_multi_tenant.cpp b/src/observer/omt/ob_multi_tenant.cpp index 6191a1b46..b6178c594 100644 --- a/src/observer/omt/ob_multi_tenant.cpp +++ b/src/observer/omt/ob_multi_tenant.cpp @@ -683,24 +683,39 @@ int ObMultiTenant::create_hidden_sys_tenant() { int ret = OB_SUCCESS; const uint64_t tenant_id = OB_SYS_TENANT_ID; - omt::ObTenant *tenant; + omt::ObTenant *tenant = nullptr; ObTenantMeta meta; if (OB_FAIL(construct_meta_for_hidden_sys(meta))) { LOG_ERROR("fail to construct meta", K(ret)); + } else if (OB_FAIL(create_tenant(meta, true /* write_slog */))) { + LOG_ERROR("create hidden sys tenant failed", K(ret)); + } + return ret; +} + +int ObMultiTenant::update_hidden_sys_tenant() +{ + int ret = OB_SUCCESS; + const uint64_t tenant_id = OB_SYS_TENANT_ID; + omt::ObTenant *tenant = nullptr; + ObTenantMeta meta; + if (OB_FAIL(get_tenant(tenant_id, tenant))) { // sys tenant will not be deleted + LOG_WARN("failed to get sys tenant", K(ret)); + } else if (OB_FAIL(construct_meta_for_hidden_sys(meta))) { + LOG_ERROR("fail to construct meta", K(ret)); } else { - if (OB_FAIL(get_tenant(tenant_id, tenant))) { - ret = OB_SUCCESS; - if (OB_FAIL(create_tenant(meta, true/* write_slog */))) { - LOG_ERROR("create hidden sys tenant failed", K(ret)); - } - LOG_INFO("finish create hidden sys", KR(ret)); - } else if(tenant->is_hidden()){ - if (OB_SUCC(ret) && !(meta.unit_ == tenant->get_unit())) { - if (OB_FAIL(GCTX.omt_->update_tenant_unit_no_lock(meta.unit_))) { - LOG_WARN("fail to update tenant unit", K(ret), K(tenant_id)); - } - } - LOG_INFO("sys tenant has been created, no need create hidden sys"); + int64_t bucket_lock_idx = -1; + bool lock_succ = false; + if (OB_FAIL(bucket_lock_.wrlock(bucket_lock_idx = get_tenant_lock_bucket_idx(tenant_id)))) { + LOG_WARN("fail to try_wrlock for update tenant unit", K(ret), K(tenant_id), K(bucket_lock_idx)); + } else if (FALSE_IT(lock_succ = true)) { + } else if (!tenant->is_hidden() || meta.unit_ == tenant->get_unit()) { + // do nothing + } else if (OB_FAIL(update_tenant_unit_no_lock(meta.unit_))) { + LOG_WARN("fail to update tenant unit", K(ret), K(tenant_id)); + } + if (lock_succ) { + bucket_lock_.unlock(bucket_lock_idx); } } return ret; diff --git a/src/observer/omt/ob_multi_tenant.h b/src/observer/omt/ob_multi_tenant.h index b1fb5395a..95af0cf56 100644 --- a/src/observer/omt/ob_multi_tenant.h +++ b/src/observer/omt/ob_multi_tenant.h @@ -90,6 +90,7 @@ public: void destroy(); int create_hidden_sys_tenant(); + int update_hidden_sys_tenant(); int convert_hidden_to_real_sys_tenant(const share::ObUnitInfoGetter::ObTenantConfig &unit, const int64_t abs_timeout_us = INT64_MAX); int create_tenant_without_unit(const uint64_t tenant_id, const double min_cpu, const double max_cpu); int create_tenant(const ObTenantMeta &meta, bool write_slog, const int64_t abs_timeout_us = INT64_MAX); diff --git a/src/share/config/ob_config_manager.cpp b/src/share/config/ob_config_manager.cpp index 3071498cc..3e9b46fdb 100644 --- a/src/share/config/ob_config_manager.cpp +++ b/src/share/config/ob_config_manager.cpp @@ -103,6 +103,8 @@ int ObConfigManager::reload_config() LOG_WARN("reload config for mysql login thread count failed", K(ret)); } else if (OB_FAIL(ObTdeEncryptEngineLoader::get_instance().reload_config())) { LOG_WARN("reload config for tde encrypt engine fail", K(ret)); + } else if (OB_FAIL(GCTX.omt_->update_hidden_sys_tenant())) { + LOG_WARN("update hidden sys tenant failed", K(ret)); } return ret; } diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index 8a767a5a9..90150343e 100755 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -284,11 +284,11 @@ DEF_BOOL(enable_monotonic_weak_read, OB_TENANT_PARAMETER, "false", DEF_DBL(server_cpu_quota_min, OB_CLUSTER_PARAMETER, "0", "[0,16]", "the number of minimal vCPUs allocated to the server tenant" "(a special internal tenant that exists on every observer). 0 stands for adaptive. Range: [0, 16]", - ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::STATIC_EFFECTIVE)); + ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_DBL(server_cpu_quota_max, OB_CLUSTER_PARAMETER, "0", "[0,16]", "the number of maximal vCPUs allocated to the server tenant" "(a special internal tenant that exists on every observer). 0 stands for adaptive. Range: [0, 16]", - ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::STATIC_EFFECTIVE)); + ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_CAP_WITH_CHECKER(_hidden_sys_tenant_memory, OB_CLUSTER_PARAMETER, "0M", common::ObConfigTenantMemoryChecker, "[0M,)", "the size of the memory reserved for hidden sys tenant, 0M means follow the adjusting value.",