From 60817d296082474f66b970e3d96b926127dc14e7 Mon Sep 17 00:00:00 2001 From: zhjc1124 Date: Wed, 12 Jul 2023 10:48:08 +0000 Subject: [PATCH] fix tenant memory update policy --- src/observer/omt/ob_multi_tenant.cpp | 19 ++++-- src/observer/omt/ob_multi_tenant.h | 1 + src/observer/omt/ob_tenant_node_balancer.cpp | 69 +++++++------------- 3 files changed, 37 insertions(+), 52 deletions(-) diff --git a/src/observer/omt/ob_multi_tenant.cpp b/src/observer/omt/ob_multi_tenant.cpp index 6a1fbec24e..5a71928136 100644 --- a/src/observer/omt/ob_multi_tenant.cpp +++ b/src/observer/omt/ob_multi_tenant.cpp @@ -1014,11 +1014,7 @@ int ObMultiTenant::update_tenant_unit_no_lock(const ObUnitInfoGetter::ObTenantCo LOG_ERROR("tenant is nullptr", K(tenant_id)); } else if (OB_FAIL(write_update_tenant_unit_slog(unit))) { LOG_WARN("fail to write tenant meta slog", K(ret), K(tenant_id)); - } else if (OB_FAIL(update_tenant_memory(tenant_id, unit.config_.memory_size(), allowed_mem_limit))) { - LOG_WARN("fail to update tenant memory", K(ret), K(tenant_id)); - } else if (OB_FAIL(update_tenant_freezer_mem_limit(tenant_id, unit.config_.memory_size(), allowed_mem_limit))) { - LOG_WARN("fail to update_tenant_freezer_mem_limit", K(ret), K(tenant_id)); - } else if (OB_FAIL(tenant->update_thread_cnt(max_cpu))) { + } else if (OB_FAIL(tenant->update_thread_cnt(max_cpu))) { LOG_WARN("fail to update mtl module thread_cnt", K(ret), K(tenant_id)); } else if (OB_FAIL(update_tenant_log_disk_size(tenant_id, unit.config_.log_disk_size()))) { LOG_WARN("fail to update tenant log disk size", K(ret), K(tenant_id)); @@ -1038,6 +1034,19 @@ int ObMultiTenant::update_tenant_unit_no_lock(const ObUnitInfoGetter::ObTenantCo return ret; } +int ObMultiTenant::update_tenant_memory(const ObUnitInfoGetter::ObTenantConfig &unit) +{ + int ret = OB_SUCCESS; + const uint64_t tenant_id = unit.tenant_id_; + int64_t allowed_mem_limit = 0; + if (OB_FAIL(update_tenant_memory(tenant_id, unit.config_.memory_size(), allowed_mem_limit))) { + LOG_WARN("fail to update tenant memory", K(ret), K(tenant_id)); + } else if (OB_FAIL(update_tenant_freezer_mem_limit(tenant_id, unit.config_.memory_size(), allowed_mem_limit))) { + LOG_WARN("fail to update_tenant_freezer_mem_limit", K(ret), K(tenant_id)); + } + return ret; +} + int ObMultiTenant::update_tenant_unit(const ObUnitInfoGetter::ObTenantConfig &unit) { int ret = OB_SUCCESS; diff --git a/src/observer/omt/ob_multi_tenant.h b/src/observer/omt/ob_multi_tenant.h index 20a9d71a0d..834698cc4d 100644 --- a/src/observer/omt/ob_multi_tenant.h +++ b/src/observer/omt/ob_multi_tenant.h @@ -110,6 +110,7 @@ public: int convert_real_to_hidden_sys_tenant(); int update_tenant_cpu(const uint64_t tenant_id, const double min_cpu, const double max_cpu); int update_tenant_memory(const uint64_t tenant_id, const int64_t mem_limit, int64_t &allowed_mem_limit); + int update_tenant_memory(const share::ObUnitInfoGetter::ObTenantConfig &unit); int update_tenant_log_disk_size(const uint64_t tenant_id, const int64_t expected_log_disk_size); int modify_tenant_io(const uint64_t tenant_id, const share::ObUnitConfig &unit_config); diff --git a/src/observer/omt/ob_tenant_node_balancer.cpp b/src/observer/omt/ob_tenant_node_balancer.cpp index 965dabb5eb..4d971929a0 100644 --- a/src/observer/omt/ob_tenant_node_balancer.cpp +++ b/src/observer/omt/ob_tenant_node_balancer.cpp @@ -330,60 +330,35 @@ int ObTenantNodeBalancer::check_new_tenant(const ObUnitInfoGetter::ObTenantConfi const int64_t tenant_id = unit.tenant_id_; ObTenant *tenant = nullptr; - bool is_new_tenant = true; - bool is_config_changed = true; - ObUnitInfoGetter::ObTenantConfig old_unit; - if (OB_SYS_TENANT_ID == tenant_id) { - if (OB_SUCC(omt_->get_tenant(tenant_id, tenant))) { - if (tenant->is_hidden()) { - if (OB_FAIL(omt_->convert_hidden_to_real_sys_tenant(unit, abs_timeout_us))) { - LOG_WARN("fail to create real sys tenant", K(unit)); - } - } else { // is real sys tenant - old_unit = tenant->get_unit(); - if (unit == old_unit) { - // has real sys tenant and config not change, do nothing - } else if (OB_FAIL(omt_->update_tenant_unit(unit))) { - LOG_ERROR("fail to update sys tenant config", K(ret), K(tenant_id)); - } - } - } else { + if (OB_FAIL(omt_->get_tenant(tenant_id, tenant))) { + if (is_sys_tenant(tenant_id)) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("real or hidden sys tenant must be exist", K(ret)); - } - } else { // not sys tenant - if (OB_SUCC(omt_->get_tenant(tenant_id, tenant))) { - is_new_tenant = false; - old_unit = tenant->get_unit(); - if (unit == old_unit) { - is_config_changed = false; - } else { - is_config_changed = true; - } } else { ret = OB_SUCCESS; - is_new_tenant = true; - is_config_changed = true; - } - - if (OB_SUCC(ret)) { - if (!is_config_changed) { - // do nothing - } else { - if (is_new_tenant) { - ObTenantMeta tenant_meta; - ObTenantSuperBlock super_block(tenant_id, false/*is_hidden*/); // empty super block - if (OB_FAIL(tenant_meta.build(unit, super_block))) { - LOG_WARN("fail to build tenant meta", K(ret)); - } else if (OB_FAIL(omt_->create_tenant(tenant_meta, true/* write_slog */, abs_timeout_us))) { - LOG_WARN("fail to create new tenant", K(ret), K(tenant_id)); - } - } else if (OB_FAIL(omt_->update_tenant_unit(unit))) { - LOG_WARN("fail to update tenant config", K(ret), K(tenant_id)); - } + ObTenantMeta tenant_meta; + ObTenantSuperBlock super_block(tenant_id, false /*is_hidden*/); // empty super block + if (OB_FAIL(tenant_meta.build(unit, super_block))) { + LOG_WARN("fail to build tenant meta", K(ret)); + } else if (OB_FAIL(omt_->create_tenant(tenant_meta, true /* write_slog */, abs_timeout_us))) { + LOG_WARN("fail to create new tenant", K(ret), K(tenant_id)); } } + } else { + if (is_sys_tenant(tenant_id) && tenant->is_hidden()) { + if (OB_FAIL(omt_->convert_hidden_to_real_sys_tenant(unit, abs_timeout_us))) { + LOG_WARN("fail to create real sys tenant", K(unit)); + } + } + if (OB_SUCC(ret) && !(unit == tenant->get_unit())) { + if (OB_FAIL(omt_->update_tenant_unit(unit))) { + LOG_WARN("fail to update tenant unit", K(ret), K(tenant_id)); + } + } + if (OB_SUCC(ret) && OB_FAIL(omt_->update_tenant_memory(unit))) { + LOG_ERROR("fail to update tenant memory", K(ret), K(tenant_id)); + } } if (OB_SUCC(ret) && !is_virtual_tenant_id(tenant_id)) { if (OB_FAIL(omt_->modify_tenant_io(tenant_id, unit.config_))) {