You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2020/09/23 07:18:41 UTC
[cloudstack] branch 4.14 updated: agent: Compare indirect agent lb
algorithm when cloudstack agent connects (#4335)
This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.14
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.14 by this push:
new 534dd47 agent: Compare indirect agent lb algorithm when cloudstack agent connects (#4335)
534dd47 is described below
commit 534dd475d8a94904d3e266dde41f307c394aed8d
Author: Wei Zhou <w....@global.leaseweb.com>
AuthorDate: Wed Sep 23 09:18:16 2020 +0200
agent: Compare indirect agent lb algorithm when cloudstack agent connects (#4335)
Compare not only the list of management servers but also the lb algorithm when agent connects.
Fixes: #3895
---
.../src/main/java/com/cloud/agent/manager/AgentManagerImpl.java | 9 +++++++--
.../java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java | 2 +-
.../apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java | 5 ++++-
3 files changed, 12 insertions(+), 4 deletions(-)
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 e80d3ec..6bfc3de 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<String> 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<String> 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 464c489..9dfb9e1 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<String> receivedMSHosts);
+ boolean compareManagementServerList(Long hostId, Long dcId, List<String> 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 8742e2d..a25575c 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<String> receivedMSHosts) {
+ public boolean compareManagementServerList(final Long hostId, final Long dcId, final List<String> receivedMSHosts, final String lbAlgorithm) {
if (receivedMSHosts == null || receivedMSHosts.size() < 1) {
return false;
}
+ if (getLBAlgorithmName() != lbAlgorithm) {
+ return false;
+ }
final List<String> expectedMSList = getManagementServerList(hostId, dcId, null);
final org.apache.cloudstack.agent.lb.IndirectAgentLBAlgorithm algorithm = getAgentMSLBAlgorithm();
return algorithm.compare(expectedMSList, receivedMSHosts);