Repository: cloudstack
Updated Branches:
  refs/heads/4.4 df4a21ae3 -> ce966c8b3


CLOUDSTACK-6345: Non gpu enabled VMs are getting deployed in gpu enabled Hosts.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ce966c8b
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ce966c8b
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ce966c8b

Branch: refs/heads/4.4
Commit: ce966c8b381da9e3b22538d17f7e4e1b180a4a14
Parents: df4a21a
Author: Sanjay Tripathi <sanjay.tripa...@citrix.com>
Authored: Mon Apr 7 15:43:46 2014 +0530
Committer: Sanjay Tripathi <sanjay.tripa...@citrix.com>
Committed: Mon Apr 7 16:05:58 2014 +0530

----------------------------------------------------------------------
 .../src/com/cloud/resource/ResourceManager.java |  7 +++++++
 .../allocator/impl/FirstFitAllocator.java       | 20 ++++++++++++++++++--
 .../com/cloud/resource/ResourceManagerImpl.java |  7 +++++++
 .../cloud/resource/MockResourceManagerImpl.java |  6 ++++++
 4 files changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ce966c8b/engine/components-api/src/com/cloud/resource/ResourceManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/resource/ResourceManager.java 
b/engine/components-api/src/com/cloud/resource/ResourceManager.java
index 5a9bddb..0608cb4 100755
--- a/engine/components-api/src/com/cloud/resource/ResourceManager.java
+++ b/engine/components-api/src/com/cloud/resource/ResourceManager.java
@@ -142,6 +142,13 @@ public interface ResourceManager extends ResourceService {
     List<HostVO> listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long 
podId, long dcId);
 
     /**
+     * Check if host is GPU enabled
+     * @param hostId the host to be checked
+     * @return true if host contains GPU card else false
+     */
+    boolean isHostGpuEnabled(long hostId);
+
+    /**
      * Check if host has GPU devices available
      * @param hostId the host to be checked
      * @param vgpuType the VGPU type

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ce966c8b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java 
b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
index 3736884..a451fad 100755
--- a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
+++ b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
@@ -243,7 +243,7 @@ public class FirstFitAllocator extends AdapterBase 
implements HostAllocator {
 
         // We will try to reorder the host lists such that we give priority to 
hosts that have
         // the minimums to support a VM's requirements
-        hosts = prioritizeHosts(template, hosts);
+        hosts = prioritizeHosts(template, offering, hosts);
 
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Found " + hosts.size() + " hosts for allocation 
after prioritization: " + hosts);
@@ -353,7 +353,7 @@ public class FirstFitAllocator extends AdapterBase 
implements HostAllocator {
         return true;
     }
 
-    protected List<? extends Host> prioritizeHosts(VMTemplateVO template, 
List<? extends Host> hosts) {
+    protected List<? extends Host> prioritizeHosts(VMTemplateVO template, 
ServiceOffering offering, List<? extends Host> hosts) {
         if (template == null) {
             return hosts;
         }
@@ -416,6 +416,22 @@ public class FirstFitAllocator extends AdapterBase 
implements HostAllocator {
         prioritizedHosts.addAll(0, highPriorityHosts);
         prioritizedHosts.addAll(lowPriorityHosts);
 
+        // if service offering is not GPU enabled then move all the GPU 
enabled hosts to the end of priority list.
+        if (_serviceOfferingDetailsDao.findDetail(offering.getId(), 
GPU.Keys.vgpuType.toString()) == null) {
+
+            List<Host> gpuEnabledHosts = new ArrayList<Host>();
+            // Check for GPU enabled hosts.
+            for (Host host : prioritizedHosts) {
+                if (_resourceMgr.isHostGpuEnabled(host.getId())) {
+                    gpuEnabledHosts.add(host);
+                }
+            }
+            // Move GPU enabled hosts to the end of list
+            if(!gpuEnabledHosts.isEmpty()) {
+                prioritizedHosts.removeAll(gpuEnabledHosts);
+                prioritizedHosts.addAll(gpuEnabledHosts);
+            }
+        }
         return prioritizedHosts;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ce966c8b/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java 
b/server/src/com/cloud/resource/ResourceManagerImpl.java
index 5a5c196..0bbc2f0 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -2501,6 +2501,13 @@ public class ResourceManagerImpl extends ManagerBase 
implements ResourceManager,
     }
 
     @Override
+    public boolean isHostGpuEnabled(long hostId) {
+        SearchCriteria<HostGpuGroupsVO> sc = _gpuAvailability.create();
+        sc.setParameters("hostId", hostId);
+        return _hostGpuGroupsDao.customSearch(sc, null).size() > 0 ? true : 
false;
+    }
+
+    @Override
     public List<HostGpuGroupsVO> listAvailableGPUDevice(long hostId, String 
vgpuType) {
         if (vgpuType == null) {
             vgpuType = vGPUType.passthrough.getType();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ce966c8b/server/test/com/cloud/resource/MockResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java 
b/server/test/com/cloud/resource/MockResourceManagerImpl.java
index e6bf9a2..8c5f5da 100644
--- a/server/test/com/cloud/resource/MockResourceManagerImpl.java
+++ b/server/test/com/cloud/resource/MockResourceManagerImpl.java
@@ -585,4 +585,10 @@ public class MockResourceManagerImpl extends ManagerBase 
implements ResourceMana
         // TODO Auto-generated method stub
         return null;
     }
+
+    @Override
+    public boolean isHostGpuEnabled(long hostId) {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }

Reply via email to