[CP] fix core-dump due to missing lock

This commit is contained in:
LeonChaoHi 2024-10-25 13:43:50 +00:00 committed by ob-robot
parent 853e90a042
commit 07af09e351
3 changed files with 21 additions and 4 deletions

View File

@ -333,7 +333,7 @@ int ObServerBalancer::distribute_for_standalone_sys_unit()
} else if (!enable_sys_unit_standalone) {
ret = OB_STATE_NOT_MATCH;
LOG_WARN("sys unit standalone deployment is disabled", K(ret));
} else if (OB_FAIL(unit_mgr_->get_tenant_unit_servers(
} else if (OB_FAIL(unit_mgr_->get_tenant_unit_servers_(
OB_SYS_TENANT_ID, empty_zone, sys_unit_server_array))) {
LOG_WARN("fail to get tenant unit server array", K(ret));
} else {
@ -1240,7 +1240,7 @@ int ObServerBalancer::generate_available_servers(
LOG_WARN("zone is not in active", K(ret), K(zone_info));
} else if (OB_FAIL(SVR_TRACER.get_servers_of_zone(zone, server_list))) {
LOG_WARN("fail to get servers of zone", K(ret), K(zone));
} else if (OB_FAIL(unit_mgr_->get_tenant_unit_servers(
} else if (OB_FAIL(unit_mgr_->get_tenant_unit_servers_(
OB_SYS_TENANT_ID, zone, sys_unit_server_array))) {
LOG_WARN("fail to get tenant unit server array", K(ret));
} else {

View File

@ -5426,6 +5426,19 @@ int ObUnitManager::get_tenant_unit_servers(
const uint64_t tenant_id,
const common::ObZone &zone,
common::ObIArray<common::ObAddr> &server_array) const
{
int ret = OB_SUCCESS;
SpinRLockGuard guard(lock_);
if (OB_FAIL(get_tenant_unit_servers_(tenant_id, zone, server_array))) {
LOG_WARN("fail to get_tenant_unit_servers_", KR(ret), K(tenant_id), K(zone));
}
return ret;
}
int ObUnitManager::get_tenant_unit_servers_(
const uint64_t tenant_id,
const common::ObZone &zone,
common::ObIArray<common::ObAddr> &server_array) const
{
int ret = OB_SUCCESS;
ObArray<share::ObResourcePool *> *pools = nullptr;
@ -5768,14 +5781,14 @@ int ObUnitManager::get_excluded_servers(const uint64_t resource_pool_id,
}
}
// get all tenant resource pool related servers on target zone
else if (OB_FAIL(get_tenant_unit_servers(tenant_id, zone, excluded_servers))) {
else if (OB_FAIL(get_tenant_unit_servers_(tenant_id, zone, excluded_servers))) {
LOG_WARN("get tennat unit server fail", KR(ret), K(tenant_id), K(zone));
}
if (OB_SUCC(ret) && GCONF.enable_sys_unit_standalone) {
// When the system tenant is deployed independently,
// the server where the unit of the system tenant is located is also required as the executed servers
if (OB_FAIL(get_tenant_unit_servers(OB_SYS_TENANT_ID, zone, sys_standalone_servers))) {
if (OB_FAIL(get_tenant_unit_servers_(OB_SYS_TENANT_ID, zone, sys_standalone_servers))) {
LOG_WARN("fail to get tenant unit servers", KR(ret), K(zone));
} else if (OB_FAIL(append(excluded_servers, sys_standalone_servers))) {
LOG_WARN("fail to append other excluded servers", K(ret));

View File

@ -395,6 +395,10 @@ private:
const bool is_manual = false);
int get_zone_units(const common::ObArray<share::ObResourcePool *> &pools,
common::ObArray<ZoneUnit> &zone_units) const;
int get_tenant_unit_servers_(
const uint64_t tenant_id,
const common::ObZone &zone,
common::ObIArray<common::ObAddr> &server_array) const;
virtual int end_migrate_unit(const uint64_t unit_id, const EndMigrateOp end_migrate_op = COMMIT);
int get_excluded_servers(
const share::ObUnit &unit,