diff --git a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java index e80d3ec2d94..6bfc3debf4c 100644 --- a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java @@ -1080,10 +1080,15 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl ReadyCommand ready = null; try { final List agentMSHostList = new ArrayList<>(); + String lbAlgorithm = null; if (startup != null && startup.length > 0) { final String agentMSHosts = startup[0].getMsHostList(); if (!Strings.isNullOrEmpty(agentMSHosts)) { - agentMSHostList.addAll(Arrays.asList(agentMSHosts.split(","))); + String[] msHosts = agentMSHosts.split("@"); + if (msHosts.length > 1) { + lbAlgorithm = msHosts[1]; + } + agentMSHostList.addAll(Arrays.asList(msHosts[0].split(","))); } } @@ -1091,7 +1096,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl if (host != null) { ready = new ReadyCommand(host.getDataCenterId(), host.getId()); - if (!indirectAgentLB.compareManagementServerList(host.getId(), host.getDataCenterId(), agentMSHostList)) { + if (!indirectAgentLB.compareManagementServerList(host.getId(), host.getDataCenterId(), agentMSHostList, lbAlgorithm)) { final List newMSList = indirectAgentLB.getManagementServerList(host.getId(), host.getDataCenterId(), null); ready.setMsHostList(newMSList); ready.setLbAlgorithm(indirectAgentLB.getLBAlgorithmName()); diff --git a/framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java b/framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java index 464c489af84..9dfb9e1654e 100644 --- a/framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java +++ b/framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java @@ -37,7 +37,7 @@ public interface IndirectAgentLB { * @param receivedMSHosts received management server list * @return true if mgmtHosts is up to date, false if not */ - boolean compareManagementServerList(Long hostId, Long dcId, List receivedMSHosts); + boolean compareManagementServerList(Long hostId, Long dcId, List receivedMSHosts, String lbAlgorithm); /** * Returns the configure LB algorithm 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 8742e2dfe6f..a25575cd175 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 @@ -98,10 +98,13 @@ public class IndirectAgentLBServiceImpl extends ComponentLifecycleBase implement } @Override - public boolean compareManagementServerList(final Long hostId, final Long dcId, final List receivedMSHosts) { + public boolean compareManagementServerList(final Long hostId, final Long dcId, final List receivedMSHosts, final String lbAlgorithm) { if (receivedMSHosts == null || receivedMSHosts.size() < 1) { return false; } + if (getLBAlgorithmName() != lbAlgorithm) { + return false; + } final List expectedMSList = getManagementServerList(hostId, dcId, null); final org.apache.cloudstack.agent.lb.IndirectAgentLBAlgorithm algorithm = getAgentMSLBAlgorithm(); return algorithm.compare(expectedMSList, receivedMSHosts);