fix tenant memory update policy

This commit is contained in:
zhjc1124
2023-07-12 10:48:08 +00:00
committed by ob-robot
parent 676684b41e
commit 60817d2960
3 changed files with 37 additions and 52 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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_))) {