mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Fix to propagate updated management servers list and lb algorithm in host and indirect.agent.lb.algorithm settings resp, to systemvm agents (#10524)
* propagate updated management servers list and lb algorithm in host and indirect.agent.lb.algorithm settings, to systemvm agents * addressed comments * addressed comments
This commit is contained in:
		
							parent
							
								
									704d7a9787
								
							
						
					
					
						commit
						33cdddfcd1
					
				| @ -74,6 +74,8 @@ public class IndirectAgentLBServiceImpl extends ComponentLifecycleBase implement | |||||||
|             ResourceState.ErrorInMaintenance, ResourceState.PrepareForMaintenance); |             ResourceState.ErrorInMaintenance, ResourceState.PrepareForMaintenance); | ||||||
|     private static final List<Host.Type> agentValidHostTypes = List.of(Host.Type.Routing, Host.Type.ConsoleProxy, |     private static final List<Host.Type> agentValidHostTypes = List.of(Host.Type.Routing, Host.Type.ConsoleProxy, | ||||||
|             Host.Type.SecondaryStorage, Host.Type.SecondaryStorageVM); |             Host.Type.SecondaryStorage, Host.Type.SecondaryStorageVM); | ||||||
|  |     private static final List<Host.Type> agentNonRoutingHostTypes = List.of(Host.Type.ConsoleProxy, | ||||||
|  |             Host.Type.SecondaryStorage, Host.Type.SecondaryStorageVM); | ||||||
|     private static final List<Hypervisor.HypervisorType> agentValidHypervisorTypes = List.of( |     private static final List<Hypervisor.HypervisorType> agentValidHypervisorTypes = List.of( | ||||||
|             Hypervisor.HypervisorType.KVM, Hypervisor.HypervisorType.LXC); |             Hypervisor.HypervisorType.KVM, Hypervisor.HypervisorType.LXC); | ||||||
| 
 | 
 | ||||||
| @ -136,6 +138,16 @@ public class IndirectAgentLBServiceImpl extends ComponentLifecycleBase implement | |||||||
|         return hostIdList; |         return hostIdList; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private List<Long> getAllAgentBasedNonRoutingHostsFromDB(final Long zoneId) { | ||||||
|  |         return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, null, | ||||||
|  |                 agentValidResourceStates, agentNonRoutingHostTypes, agentValidHypervisorTypes); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private List<Long> getAllAgentBasedRoutingHostsFromDB(final Long zoneId, final Long clusterId) { | ||||||
|  |         return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, clusterId, | ||||||
|  |                 agentValidResourceStates, List.of(Host.Type.Routing), agentValidHypervisorTypes); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private List<Long> getAllAgentBasedHostsFromDB(final Long zoneId, final Long clusterId) { |     private List<Long> getAllAgentBasedHostsFromDB(final Long zoneId, final Long clusterId) { | ||||||
|         return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, clusterId, |         return hostDao.findHostIdsByZoneClusterResourceStateTypeAndHypervisorType(zoneId, clusterId, | ||||||
|                 agentValidResourceStates, agentValidHostTypes, agentValidHypervisorTypes); |                 agentValidResourceStates, agentValidHostTypes, agentValidHypervisorTypes); | ||||||
| @ -158,32 +170,42 @@ public class IndirectAgentLBServiceImpl extends ComponentLifecycleBase implement | |||||||
|     public void propagateMSListToAgents() { |     public void propagateMSListToAgents() { | ||||||
|         logger.debug("Propagating management server list update to agents"); |         logger.debug("Propagating management server list update to agents"); | ||||||
|         final String lbAlgorithm = getLBAlgorithmName(); |         final String lbAlgorithm = getLBAlgorithmName(); | ||||||
|  |         final Long globalLbCheckInterval = getLBPreferredHostCheckInterval(null); | ||||||
|         List<DataCenterVO> zones = dataCenterDao.listAll(); |         List<DataCenterVO> zones = dataCenterDao.listAll(); | ||||||
|         for (DataCenterVO zone : zones) { |         for (DataCenterVO zone : zones) { | ||||||
|             List<Long> zoneHostIds = new ArrayList<>(); |             List<Long> zoneHostIds = new ArrayList<>(); | ||||||
|  |             List<Long> nonRoutingHostIds = getAllAgentBasedNonRoutingHostsFromDB(zone.getId()); | ||||||
|  |             zoneHostIds.addAll(nonRoutingHostIds); | ||||||
|             Map<Long, List<Long>> clusterHostIdsMap = new HashMap<>(); |             Map<Long, List<Long>> clusterHostIdsMap = new HashMap<>(); | ||||||
|             List<Long> clusterIds = clusterDao.listAllClusterIds(zone.getId()); |             List<Long> clusterIds = clusterDao.listAllClusterIds(zone.getId()); | ||||||
|             for (Long clusterId : clusterIds) { |             for (Long clusterId : clusterIds) { | ||||||
|                 List<Long> hostIds = getAllAgentBasedHostsFromDB(zone.getId(), clusterId); |                 List<Long> hostIds = getAllAgentBasedRoutingHostsFromDB(zone.getId(), clusterId); | ||||||
|                 clusterHostIdsMap.put(clusterId, hostIds); |                 clusterHostIdsMap.put(clusterId, hostIds); | ||||||
|                 zoneHostIds.addAll(hostIds); |                 zoneHostIds.addAll(hostIds); | ||||||
|             } |             } | ||||||
|             zoneHostIds.sort(Comparator.comparingLong(x -> x)); |             zoneHostIds.sort(Comparator.comparingLong(x -> x)); | ||||||
|  |             for (Long nonRoutingHostId : nonRoutingHostIds) { | ||||||
|  |                 setupMSList(nonRoutingHostId, zone.getId(), zoneHostIds, lbAlgorithm, globalLbCheckInterval); | ||||||
|  |             } | ||||||
|             for (Long clusterId : clusterIds) { |             for (Long clusterId : clusterIds) { | ||||||
|                 final Long lbCheckInterval = getLBPreferredHostCheckInterval(clusterId); |                 final Long clusterLbCheckInterval = getLBPreferredHostCheckInterval(clusterId); | ||||||
|                 List<Long> hostIds = clusterHostIdsMap.get(clusterId); |                 List<Long> hostIds = clusterHostIdsMap.get(clusterId); | ||||||
|                 for (Long hostId : hostIds) { |                 for (Long hostId : hostIds) { | ||||||
|                     final List<String> msList = getManagementServerList(hostId, zone.getId(), zoneHostIds); |                     setupMSList(hostId, zone.getId(), zoneHostIds, lbAlgorithm, clusterLbCheckInterval); | ||||||
|                     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); |  | ||||||
|                     } |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private void setupMSList(final Long hostId, final Long dcId, final List<Long> orderedHostIdList, final String lbAlgorithm, final Long lbCheckInterval) { | ||||||
|  |         final List<String> msList = getManagementServerList(hostId, dcId, orderedHostIdList); | ||||||
|  |         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() { |     private void configureAlgorithmMap() { | ||||||
|         final List<org.apache.cloudstack.agent.lb.IndirectAgentLBAlgorithm> algorithms = new ArrayList<>(); |         final List<org.apache.cloudstack.agent.lb.IndirectAgentLBAlgorithm> algorithms = new ArrayList<>(); | ||||||
|         algorithms.add(new IndirectAgentLBStaticAlgorithm()); |         algorithms.add(new IndirectAgentLBStaticAlgorithm()); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user