fix tenant memory update policy
This commit is contained in:
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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_))) {
|
||||
|
Reference in New Issue
Block a user