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);