You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cloudstack.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/03/15 11:46:41 UTC

[jira] [Commented] (CLOUDSTACK-9696) Fail to deploy VM on dedicating clusters and hosts

    [ https://issues.apache.org/jira/browse/CLOUDSTACK-9696?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15925962#comment-15925962 ] 

ASF GitHub Bot commented on CLOUDSTACK-9696:
--------------------------------------------

Github user koushik-das commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1853#discussion_r106145072
  
    --- Diff: server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java ---
    @@ -584,105 +583,64 @@ private void checkForNonDedicatedResources(VirtualMachineProfile vmProfile, Data
                 isExplicit = true;
             }
     
    -        List<Long> allPodsInDc = _podDao.listAllPods(dc.getId());
    -        List<Long> allDedicatedPods = _dedicatedDao.listAllPods();
    -        allPodsInDc.retainAll(allDedicatedPods);
    -
    -        List<Long> allClustersInDc = _clusterDao.listAllCusters(dc.getId());
    -        List<Long> allDedicatedClusters = _dedicatedDao.listAllClusters();
    -        allClustersInDc.retainAll(allDedicatedClusters);
    -
    -        List<Long> allHostsInDc = _hostDao.listAllHosts(dc.getId());
    -        List<Long> allDedicatedHosts = _dedicatedDao.listAllHosts();
    -        allHostsInDc.retainAll(allDedicatedHosts);
    -
    -        //Only when the type is instance VM and not explicitly dedicated.
    -        if (vm.getType() == VirtualMachine.Type.User && !isExplicit) {
    -            //add explicitly dedicated resources in avoidList
    -
    -            avoids.addPodList(allPodsInDc);
    -            avoids.addClusterList(allClustersInDc);
    -            avoids.addHostList(allHostsInDc);
    -        }
    -
    -        //Handle the Virtual Router Case
    -        //No need to check the isExplicit. As both the cases are handled.
    -        if (vm.getType() == VirtualMachine.Type.DomainRouter) {
    -            long vmAccountId = vm.getAccountId();
    -            long vmDomainId = vm.getDomainId();
    -
    -            //Lists all explicitly dedicated resources from vm account ID or domain ID.
    -            List<Long> allPodsFromDedicatedID = new ArrayList<Long>();
    -            List<Long> allClustersFromDedicatedID = new ArrayList<Long>();
    -            List<Long> allHostsFromDedicatedID = new ArrayList<Long>();
    -
    -            //Whether the dedicated resources belong to Domain or not. If not, it may belongs to Account or no dedication.
    -            List<AffinityGroupDomainMapVO> domainGroupMappings = _affinityGroupDomainMapDao.listByDomain(vmDomainId);
    -
    -            //For temporary storage and indexing.
    -            List<DedicatedResourceVO> tempStorage;
    -
    -            if (domainGroupMappings == null || domainGroupMappings.isEmpty()) {
    -                //The dedicated resource belongs to VM Account ID.
    -
    -                tempStorage = _dedicatedDao.searchDedicatedPods(null, vmDomainId, vmAccountId, null).first();
    -
    -                for(DedicatedResourceVO vo : tempStorage) {
    -                    allPodsFromDedicatedID.add(vo.getPodId());
    -                }
    -
    -                tempStorage.clear();
    -                tempStorage = _dedicatedDao.searchDedicatedClusters(null, vmDomainId, vmAccountId, null).first();
    +        if ((vm.getType() == VirtualMachine.Type.User && !isExplicit) || vm.getType() == VirtualMachine.Type.DomainRouter) {
    +            List<Long> allPodsInDc = _podDao.listAllPods(dc.getId());
    +            List<Long> allDedicatedPods = _dedicatedDao.listAllPods();
    +            allPodsInDc.retainAll(allDedicatedPods);
     
    -                for(DedicatedResourceVO vo : tempStorage) {
    -                    allClustersFromDedicatedID.add(vo.getClusterId());
    -                }
    +            List<Long> allClustersInDc = _clusterDao.listAllCusters(dc.getId());
    +            List<Long> allDedicatedClusters = _dedicatedDao.listAllClusters();
    +            allClustersInDc.retainAll(allDedicatedClusters);
     
    -                tempStorage.clear();
    -                tempStorage = _dedicatedDao.searchDedicatedHosts(null, vmDomainId, vmAccountId, null).first();
    +            List<Long> allHostsInDc = _hostDao.listAllHosts(dc.getId());
    +            List<Long> allDedicatedHosts = _dedicatedDao.listAllHosts();
    +            allHostsInDc.retainAll(allDedicatedHosts);
     
    -                for(DedicatedResourceVO vo : tempStorage) {
    -                    allHostsFromDedicatedID.add(vo.getHostId());
    -                }
    +            //Only when the type is instance VM and not explicitly dedicated.
    +            if (vm.getType() == VirtualMachine.Type.User && !isExplicit) {
    +                //add explicitly dedicated resources in avoidList
     
    -                //Remove the dedicated ones from main list
    -                allPodsInDc.removeAll(allPodsFromDedicatedID);
    -                allClustersInDc.removeAll(allClustersFromDedicatedID);
    -                allHostsInDc.removeAll(allHostsFromDedicatedID);
    +                avoids.addPodList(allPodsInDc);
    +                avoids.addClusterList(allClustersInDc);
    +                avoids.addHostList(allHostsInDc);
                 }
    -            else {
    -                //The dedicated resource belongs to VM Domain ID or No dedication.
     
    -                tempStorage = _dedicatedDao.searchDedicatedPods(null, vmDomainId, null, null).first();
    +            //Handle the Virtual Router Case
    +            //No need to check the isExplicit. As both the cases are handled.
    +            if (vm.getType() == VirtualMachine.Type.DomainRouter) {
    +                long vmAccountId = vm.getAccountId();
    +                long vmDomainId = vm.getDomainId();
     
    -                for(DedicatedResourceVO vo : tempStorage) {
    -                    allPodsFromDedicatedID.add(vo.getPodId());
    -                }
    +                List<Long> allPodsFromDedicatedID = new ArrayList<Long>();
    +                List<Long> allClustersFromDedicatedID = new ArrayList<Long>();
    +                List<Long> allHostsFromDedicatedID = new ArrayList<Long>();
     
    -                tempStorage.clear();
    -                tempStorage = _dedicatedDao.searchDedicatedClusters(null, vmDomainId, null, null).first();
    -
    -                for(DedicatedResourceVO vo : tempStorage) {
    -                    allClustersFromDedicatedID.add(vo.getClusterId());
    -                }
    +                for (DedicatedResourceVO vo : _dedicatedDao.listAvailableResources(vmAccountId, vmDomainId)) {
    +                    if (vo.getPodId() != null) {
    +                        allPodsFromDedicatedID.add(vo.getPodId());
    +                        continue;
    +                    }
     
    -                tempStorage.clear();
    -                tempStorage = _dedicatedDao.searchDedicatedHosts(null, vmDomainId, null, null).first();
    +                    if (vo.getClusterId() != null) {
    +                        allClustersFromDedicatedID.add(vo.getClusterId());
    +                        continue;
    +                    }
     
    -                for(DedicatedResourceVO vo : tempStorage) {
    -                    allHostsFromDedicatedID.add(vo.getHostId());
    +                    if (vo.getHostId() != null) {
    +                        allHostsFromDedicatedID.add(vo.getHostId());
    +                    }
                     }
     
                     //Remove the dedicated ones from main list
                     allPodsInDc.removeAll(allPodsFromDedicatedID);
    --- End diff --
    
    Can you put some explanation as to why there is a difference in checking for dedicated resources for user VM and VR? In case of user VMs dedicated resources are put in avoid list, for VR only non-dedicated resources are put in avoid list.


> Fail to deploy VM on dedicating clusters and hosts
> --------------------------------------------------
>
>                 Key: CLOUDSTACK-9696
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9696
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the default.) 
>            Reporter: Anshul Gangwar
>            Assignee: Anshul Gangwar
>
> IN the below scenario:
> cluster C1 is having 2 hosts, H1 and H2. 
> Root domain is having 2 sub domain, D1 and D2
> C1 is dedicated to Root and H1 and H2 are dedicated to D1 and D2 respectively
> D1 and D2 has users U1 and U2 respectively
> Login into U1 and deploy the VM
> router and VM deployment failed with the error: 
> com.cloud.exception.InsufficientServerCapacityException: Unable to create a deployment



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)