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 2eef0e5  Fix hosts for migration count (#4500)
2eef0e5 is described below

commit 2eef0e5af3322eb12e2de5cf2a24c0609ac88b16
Author: davidjumani <[email protected]>
AuthorDate: Wed Nov 25 15:34:23 2020 +0530

    Fix hosts for migration count (#4500)
    
    * Fixing count for findHostsForMigration
    
    * Changing list name
---
 .../com/cloud/server/ManagementServerImpl.java     | 30 +++++++++++++---------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java 
b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
index 1b1debb..ca38545 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -1164,8 +1164,8 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         final Object resourceState = cmd.getResourceState();
         final Object haHosts = cmd.getHaHost();
 
-        final Pair<List<HostVO>, Integer> result = 
searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, 
zoneId, pod, cluster, id, keyword, resourceState, haHosts, null,
-                null);
+        final Pair<List<HostVO>, Integer> result = 
searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, 
zoneId, pod,
+            cluster, id, keyword, resourceState, haHosts, null, null);
         return new Pair<List<? extends Host>, Integer>(result.first(), 
result.second());
     }
 
@@ -1267,19 +1267,20 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         final Type hostType = srcHost.getType();
         Pair<List<HostVO>, Integer> allHostsPair = null;
         List<HostVO> allHosts = null;
+        List<HostVO> hostsForMigrationWithStorage = null;
         final Map<Host, Boolean> requiresStorageMotion = new HashMap<Host, 
Boolean>();
         DataCenterDeployment plan = null;
         if (canMigrateWithStorage) {
-            allHostsPair = searchForServers(startIndex, pageSize, null, 
hostType, null, srcHost.getDataCenterId(), null, null, null, keyword, null, 
null, srcHost.getHypervisorType(),
-                    srcHost.getHypervisorVersion());
+            allHostsPair = searchForServers(startIndex, pageSize, null, 
hostType, null, srcHost.getDataCenterId(), null, null, null, keyword,
+                null, null, srcHost.getHypervisorType(), 
srcHost.getHypervisorVersion(), srcHost.getId());
             allHosts = allHostsPair.first();
-            allHosts.remove(srcHost);
+            hostsForMigrationWithStorage = new ArrayList<>(allHosts);
 
             for (final VolumeVO volume : volumes) {
                 StoragePool storagePool = 
_poolDao.findById(volume.getPoolId());
                 Long volClusterId = storagePool.getClusterId();
 
-                for (Iterator<HostVO> iterator = allHosts.iterator(); 
iterator.hasNext();) {
+                for (Iterator<HostVO> iterator = 
hostsForMigrationWithStorage.iterator(); iterator.hasNext();) {
                     final Host host = iterator.next();
 
                     if (volClusterId != null) {
@@ -1318,10 +1319,9 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Searching for all hosts in cluster " + cluster 
+ " for migrating VM " + vm);
             }
-            allHostsPair = searchForServers(startIndex, pageSize, null, 
hostType, null, null, null, cluster, null, keyword, null, null, null, null);
-            // Filter out the current host.
+            allHostsPair = searchForServers(startIndex, pageSize, null, 
hostType, null, null, null, cluster, null, keyword, null, null, null,
+                null, srcHost.getId());
             allHosts = allHostsPair.first();
-            allHosts.remove(srcHost);
             plan = new DataCenterDeployment(srcHost.getDataCenterId(), 
srcHost.getPodId(), srcHost.getClusterId(), null, null, null);
         }
 
@@ -1350,7 +1350,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
 
         for (final HostAllocator allocator : hostAllocators) {
             if (canMigrateWithStorage) {
-                suitableHosts = allocator.allocateTo(vmProfile, plan, 
Host.Type.Routing, excludes, allHosts, HostAllocator.RETURN_UPTO_ALL, false);
+                suitableHosts = allocator.allocateTo(vmProfile, plan, 
Host.Type.Routing, excludes, hostsForMigrationWithStorage, 
HostAllocator.RETURN_UPTO_ALL, false);
             } else {
                 suitableHosts = allocator.allocateTo(vmProfile, plan, 
Host.Type.Routing, excludes, HostAllocator.RETURN_UPTO_ALL, false);
             }
@@ -1542,12 +1542,14 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         return suitablePools;
     }
 
-    private Pair<List<HostVO>, Integer> searchForServers(final Long 
startIndex, final Long pageSize, final Object name, final Object type, final 
Object state, final Object zone, final Object pod,
-            final Object cluster, final Object id, final Object keyword, final 
Object resourceState, final Object haHosts, final Object hypervisorType, final 
Object hypervisorVersion) {
+    private Pair<List<HostVO>, Integer> searchForServers(final Long 
startIndex, final Long pageSize, final Object name, final Object type,
+        final Object state, final Object zone, final Object pod, final Object 
cluster, final Object id, final Object keyword,
+        final Object resourceState, final Object haHosts, final Object 
hypervisorType, final Object hypervisorVersion, final Object... excludes) {
         final Filter searchFilter = new Filter(HostVO.class, "id", 
Boolean.TRUE, startIndex, pageSize);
 
         final SearchBuilder<HostVO> sb = _hostDao.createSearchBuilder();
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+        sb.and("idsNotIn", sb.entity().getId(), SearchCriteria.Op.NOTIN);
         sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
         sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
         sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
@@ -1588,6 +1590,10 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
             sc.setParameters("id", id);
         }
 
+        if (excludes != null && excludes.length > 0) {
+            sc.setParameters("idsNotIn", excludes);
+        }
+
         if (name != null) {
             sc.setParameters("name", "%" + name + "%");
         }

Reply via email to