|
37 | 37 | import org.apache.cloudstack.context.CallContext; |
38 | 38 | import org.apache.cloudstack.framework.config.ConfigKey; |
39 | 39 | import org.apache.commons.collections.CollectionUtils; |
| 40 | +import org.apache.commons.lang3.ObjectUtils; |
40 | 41 | import org.apache.log4j.Logger; |
41 | 42 |
|
42 | 43 | import com.cloud.agent.AgentManager; |
@@ -627,33 +628,16 @@ private Pair<Boolean, String> performCapacityChecksBeforeHostInMaintenance(Host |
627 | 628 | int successfullyCheckedVmMigrations = 0; |
628 | 629 | for (VMInstanceVO runningVM : vmsRunning) { |
629 | 630 | boolean canMigrateVm = false; |
630 | | - ServiceOfferingVO serviceOffering = serviceOfferingDao.findById(runningVM.getServiceOfferingId()); |
631 | | - Integer cpu = serviceOffering.getCpu(); |
632 | | - Integer speed = serviceOffering.getSpeed(); |
633 | | - Integer ramSize = serviceOffering.getRamSize(); |
634 | | - if (serviceOffering.isDynamic()) { |
635 | | - List<UserVmDetailVO> vmDetails = userVmDetailsDao.listDetails(runningVM.getId()); |
636 | | - if (CollectionUtils.isNotEmpty(vmDetails)) { |
637 | | - for (UserVmDetailVO vmDetail : vmDetails) { |
638 | | - if (vmDetail.getName() != null &&vmDetail.getValue() != null) { |
639 | | - if (cpu == null && VmDetailConstants.CPU_NUMBER.equals(vmDetail.getName())) { |
640 | | - cpu = Integer.valueOf(vmDetail.getValue()); |
641 | | - } |
642 | | - if (speed == null && VmDetailConstants.CPU_SPEED.equals(vmDetail.getName())) { |
643 | | - speed = Integer.valueOf(vmDetail.getValue()); |
644 | | - } |
645 | | - if (ramSize == null && VmDetailConstants.MEMORY.equals(vmDetail.getName())) { |
646 | | - ramSize = Integer.valueOf(vmDetail.getValue()); |
647 | | - } |
648 | | - } |
649 | | - } |
650 | | - } |
651 | | - } |
652 | | - if (cpu == null || speed == null || ramSize == null) { |
| 631 | + Ternary<Integer, Integer, Integer> cpuSpeedAndRamSize = getComputeResourcesCpuSpeedAndRamSize(runningVM); |
| 632 | + Integer cpu = cpuSpeedAndRamSize.first(); |
| 633 | + Integer speed = cpuSpeedAndRamSize.second(); |
| 634 | + Integer ramSize = cpuSpeedAndRamSize.third(); |
| 635 | + if (ObjectUtils.anyNull(cpu, speed,ramSize)) { |
653 | 636 | s_logger.warn(String.format("Cannot fetch compute resources for the VM %s, skipping it from the capacity check", runningVM)); |
654 | 637 | continue; |
655 | 638 | } |
656 | 639 |
|
| 640 | + ServiceOfferingVO serviceOffering = serviceOfferingDao.findById(runningVM.getServiceOfferingId()); |
657 | 641 | for (Host hostInCluster : hostsInCluster) { |
658 | 642 | if (!checkHostTags(hostTags, hostTagsDao.getHostTags(hostInCluster.getId()), serviceOffering.getHostTag())) { |
659 | 643 | s_logger.warn(String.format("Host tags mismatch between %s and %s, skipping it from the capacity check", host, hostInCluster)); |
@@ -698,6 +682,31 @@ private Pair<Boolean, String> performCapacityChecksBeforeHostInMaintenance(Host |
698 | 682 | return new Pair<>(true, "OK"); |
699 | 683 | } |
700 | 684 |
|
| 685 | + protected Ternary<Integer, Integer, Integer> getComputeResourcesCpuSpeedAndRamSize(VMInstanceVO runningVM) { |
| 686 | + ServiceOfferingVO serviceOffering = serviceOfferingDao.findById(runningVM.getServiceOfferingId()); |
| 687 | + Integer cpu = serviceOffering.getCpu(); |
| 688 | + Integer speed = serviceOffering.getSpeed(); |
| 689 | + Integer ramSize = serviceOffering.getRamSize(); |
| 690 | + if (serviceOffering.isDynamic()) { |
| 691 | + List<UserVmDetailVO> vmDetails = userVmDetailsDao.listDetails(runningVM.getId()); |
| 692 | + if (CollectionUtils.isNotEmpty(vmDetails)) { |
| 693 | + for (UserVmDetailVO vmDetail : vmDetails) { |
| 694 | + if (vmDetail.getName() != null && vmDetail.getValue() != null) { |
| 695 | + if (cpu == null && VmDetailConstants.CPU_NUMBER.equals(vmDetail.getName())) { |
| 696 | + cpu = Integer.valueOf(vmDetail.getValue()); |
| 697 | + } else if (speed == null && VmDetailConstants.CPU_SPEED.equals(vmDetail.getName())) { |
| 698 | + speed = Integer.valueOf(vmDetail.getValue()); |
| 699 | + } else if (ramSize == null && VmDetailConstants.MEMORY.equals(vmDetail.getName())) { |
| 700 | + ramSize = Integer.valueOf(vmDetail.getValue()); |
| 701 | + } |
| 702 | + } |
| 703 | + } |
| 704 | + } |
| 705 | + } |
| 706 | + |
| 707 | + return new Ternary<>(cpu, speed, ramSize); |
| 708 | + } |
| 709 | + |
701 | 710 | /** |
702 | 711 | * Check hosts tags |
703 | 712 | */ |
|
0 commit comments