From ded089a3b0a305cef255a2a192ea6a02e24deabd Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Fri, 7 Mar 2025 14:47:15 +0530 Subject: [PATCH 1/3] propagate updated management servers list and lb algorithm in host and indirect.agent.lb.algorithm settings, to systemvm agents --- .../agent/lb/IndirectAgentLBServiceImpl.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java index 84c3081bfc1b..a8f5ec5fd65b 100644 --- a/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java @@ -74,6 +74,8 @@ public class IndirectAgentLBServiceImpl extends ComponentLifecycleBase implement ResourceState.ErrorInMaintenance, ResourceState.PrepareForMaintenance); private static final List agentValidHostTypes = List.of(Host.Type.Routing, Host.Type.ConsoleProxy, Host.Type.SecondaryStorage, Host.Type.SecondaryStorageVM); + private static final List agentNonRoutingHostTypes = List.of(Host.Type.ConsoleProxy, + Host.Type.SecondaryStorage, Host.Type.SecondaryStorageVM); private static final List agentValidHypervisorTypes = List.of( Hypervisor.HypervisorType.KVM, Hypervisor.HypervisorType.LXC); @@ -136,6 +138,16 @@ List getOrderedHostIdList(final Long dcId) { return hostIdList; } + private List getAllAgentBasedNonRoutingHostsFromDB(final Long zoneId) { + return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, null, + agentValidResourceStates, agentNonRoutingHostTypes, agentValidHypervisorTypes); + } + + private List getAllAgentBasedRoutingHostsFromDB(final Long zoneId, final Long clusterId) { + return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, clusterId, + agentValidResourceStates, List.of(Host.Type.Routing), agentValidHypervisorTypes); + } + private List getAllAgentBasedHostsFromDB(final Long zoneId, final Long clusterId) { return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, clusterId, agentValidResourceStates, agentValidHostTypes, agentValidHypervisorTypes); @@ -161,29 +173,40 @@ public void propagateMSListToAgents() { List zones = dataCenterDao.listAll(); for (DataCenterVO zone : zones) { List zoneHostIds = new ArrayList<>(); + List nonRoutingHostIds = getAllAgentBasedNonRoutingHostsFromDB(zone.getId()); + zoneHostIds.addAll(nonRoutingHostIds); Map> clusterHostIdsMap = new HashMap<>(); List clusterIds = clusterDao.listAllClusterIds(zone.getId()); for (Long clusterId : clusterIds) { - List hostIds = getAllAgentBasedHostsFromDB(zone.getId(), clusterId); + List hostIds = getAllAgentBasedRoutingHostsFromDB(zone.getId(), clusterId); clusterHostIdsMap.put(clusterId, hostIds); zoneHostIds.addAll(hostIds); } zoneHostIds.sort(Comparator.comparingLong(x -> x)); + Long lbCheckInterval = getLBPreferredHostCheckInterval(null); + for (Long nonRoutingHostId : nonRoutingHostIds) { + setupMSList(nonRoutingHostId, zone.getId(), zoneHostIds, lbCheckInterval); + } for (Long clusterId : clusterIds) { - final Long lbCheckInterval = getLBPreferredHostCheckInterval(clusterId); + lbCheckInterval = getLBPreferredHostCheckInterval(clusterId); List hostIds = clusterHostIdsMap.get(clusterId); for (Long hostId : hostIds) { - final List msList = getManagementServerList(hostId, zone.getId(), zoneHostIds); - final SetupMSListCommand cmd = new SetupMSListCommand(msList, lbAlgorithm, lbCheckInterval); - final Answer answer = agentManager.easySend(hostId, cmd); - if (answer == null || !answer.getResult()) { - logger.warn("Failed to setup management servers list to the agent of ID: {}", hostId); - } + setupMSList(hostId, zone.getId(), zoneHostIds, lbCheckInterval); } } } } + private void setupMSList(final Long hostId, final Long dcId, final List orderedHostIdList, final Long lbCheckInterval) { + final List msList = getManagementServerList(hostId, dcId, orderedHostIdList); + final String lbAlgorithm = getLBAlgorithmName(); + final SetupMSListCommand cmd = new SetupMSListCommand(msList, lbAlgorithm, lbCheckInterval); + final Answer answer = agentManager.easySend(hostId, cmd); + if (answer == null || !answer.getResult()) { + logger.warn(String.format("Failed to setup management servers list to the agent of ID: %d", hostId)); + } + } + private void configureAlgorithmMap() { final List algorithms = new ArrayList<>(); algorithms.add(new IndirectAgentLBStaticAlgorithm()); From 67ae5190879c55f42e9d3e661da2af5ba0293d4d Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Mon, 10 Mar 2025 14:50:16 +0530 Subject: [PATCH 2/3] addressed comments --- .../cloudstack/agent/lb/IndirectAgentLBServiceImpl.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java index a8f5ec5fd65b..ac7385528f6d 100644 --- a/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java @@ -171,6 +171,7 @@ public void propagateMSListToAgents() { logger.debug("Propagating management server list update to agents"); final String lbAlgorithm = getLBAlgorithmName(); List zones = dataCenterDao.listAll(); + Long lbCheckInterval = getLBPreferredHostCheckInterval(null); for (DataCenterVO zone : zones) { List zoneHostIds = new ArrayList<>(); List nonRoutingHostIds = getAllAgentBasedNonRoutingHostsFromDB(zone.getId()); @@ -183,23 +184,21 @@ public void propagateMSListToAgents() { zoneHostIds.addAll(hostIds); } zoneHostIds.sort(Comparator.comparingLong(x -> x)); - Long lbCheckInterval = getLBPreferredHostCheckInterval(null); for (Long nonRoutingHostId : nonRoutingHostIds) { - setupMSList(nonRoutingHostId, zone.getId(), zoneHostIds, lbCheckInterval); + setupMSList(nonRoutingHostId, zone.getId(), zoneHostIds, lbAlgorithm, lbCheckInterval); } for (Long clusterId : clusterIds) { lbCheckInterval = getLBPreferredHostCheckInterval(clusterId); List hostIds = clusterHostIdsMap.get(clusterId); for (Long hostId : hostIds) { - setupMSList(hostId, zone.getId(), zoneHostIds, lbCheckInterval); + setupMSList(hostId, zone.getId(), zoneHostIds, lbAlgorithm, lbCheckInterval); } } } } - private void setupMSList(final Long hostId, final Long dcId, final List orderedHostIdList, final Long lbCheckInterval) { + private void setupMSList(final Long hostId, final Long dcId, final List orderedHostIdList, final String lbAlgorithm, final Long lbCheckInterval) { final List msList = getManagementServerList(hostId, dcId, orderedHostIdList); - final String lbAlgorithm = getLBAlgorithmName(); final SetupMSListCommand cmd = new SetupMSListCommand(msList, lbAlgorithm, lbCheckInterval); final Answer answer = agentManager.easySend(hostId, cmd); if (answer == null || !answer.getResult()) { From 7cdfaa90e1899b75146bc843bbf08cdb0de4dffe Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Mon, 10 Mar 2025 16:30:09 +0530 Subject: [PATCH 3/3] addressed comments --- .../cloudstack/agent/lb/IndirectAgentLBServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java index ac7385528f6d..d51b42ab17f9 100644 --- a/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java @@ -170,8 +170,8 @@ private org.apache.cloudstack.agent.lb.IndirectAgentLBAlgorithm getAgentMSLBAlgo public void propagateMSListToAgents() { logger.debug("Propagating management server list update to agents"); final String lbAlgorithm = getLBAlgorithmName(); + final Long globalLbCheckInterval = getLBPreferredHostCheckInterval(null); List zones = dataCenterDao.listAll(); - Long lbCheckInterval = getLBPreferredHostCheckInterval(null); for (DataCenterVO zone : zones) { List zoneHostIds = new ArrayList<>(); List nonRoutingHostIds = getAllAgentBasedNonRoutingHostsFromDB(zone.getId()); @@ -185,13 +185,13 @@ public void propagateMSListToAgents() { } zoneHostIds.sort(Comparator.comparingLong(x -> x)); for (Long nonRoutingHostId : nonRoutingHostIds) { - setupMSList(nonRoutingHostId, zone.getId(), zoneHostIds, lbAlgorithm, lbCheckInterval); + setupMSList(nonRoutingHostId, zone.getId(), zoneHostIds, lbAlgorithm, globalLbCheckInterval); } for (Long clusterId : clusterIds) { - lbCheckInterval = getLBPreferredHostCheckInterval(clusterId); + final Long clusterLbCheckInterval = getLBPreferredHostCheckInterval(clusterId); List hostIds = clusterHostIdsMap.get(clusterId); for (Long hostId : hostIds) { - setupMSList(hostId, zone.getId(), zoneHostIds, lbAlgorithm, lbCheckInterval); + setupMSList(hostId, zone.getId(), zoneHostIds, lbAlgorithm, clusterLbCheckInterval); } } }