From 9163013683a2b42e459756f1ca4f090d77d18c23 Mon Sep 17 00:00:00 2001 From: DK101010 <57522802+DK101010@users.noreply.github.com> Date: Tue, 24 Aug 2021 19:15:52 +0200 Subject: [PATCH] Feat/ram reservation (#4662) * remove hot enable cpu und memory in case of reservation ram and cpu reservation have not relation to ram and cpu hot add * add custom ram_reservation and it to vm details * system vms haven't this property, for this reason add additional check * Update plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java Co-authored-by: dahn * replace 0.0 with NumberUtils * remove default value and remove return MinRam(seems to be not necessary) * Update plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VmwareVmImplementer.java Co-authored-by: davidjumani * Update plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java Co-authored-by: davidjumani Co-authored-by: DK101010 Co-authored-by: dahn Co-authored-by: davidjumani --- api/src/main/java/com/cloud/vm/VmDetailConstants.java | 1 + .../java/com/cloud/hypervisor/guru/VmwareVmImplementer.java | 2 +- .../cloud/hypervisor/vmware/resource/VmwareResource.java | 5 ++++- .../src/main/java/com/cloud/api/query/QueryManagerImpl.java | 1 + .../java/com/cloud/hypervisor/vmware/util/VmwareHelper.java | 6 ------ 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/cloud/vm/VmDetailConstants.java b/api/src/main/java/com/cloud/vm/VmDetailConstants.java index 5784ff110bf..512506e739c 100644 --- a/api/src/main/java/com/cloud/vm/VmDetailConstants.java +++ b/api/src/main/java/com/cloud/vm/VmDetailConstants.java @@ -29,6 +29,7 @@ public interface VmDetailConstants { String DATA_DISK_CONTROLLER = "dataDiskController"; String SVGA_VRAM_SIZE = "svga.vramSize"; String NESTED_VIRTUALIZATION_FLAG = "nestedVirtualizationFlag"; + String RAM_RESERVATION = "ramReservation"; // XenServer specific (internal) String HYPERVISOR_TOOLS_VERSION = "hypervisortoolsversion"; diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VmwareVmImplementer.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VmwareVmImplementer.java index b8de0bbe1b6..08cda5016fc 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VmwareVmImplementer.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VmwareVmImplementer.java @@ -405,4 +405,4 @@ class VmwareVmImplementer { return listForSort.toArray(new NicTO[0]); } -} \ No newline at end of file +} diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 0248903173b..761b0ff7bf5 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1976,7 +1976,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa int scsiControllerKey = vmMo.getScsiDeviceControllerKeyNoException(); VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[totalChangeDevices]; DiskTO[] sortedDisks = sortVolumesByDeviceId(disks); - VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(), getReservedCpuMHZ(vmSpec), (int) (vmSpec.getMaxRam() / (1024 * 1024)), getReservedMemoryMb(vmSpec), guestOsId, vmSpec.getLimitCpuUse(), deployAsIs); @@ -2977,6 +2976,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa int getReservedMemoryMb(VirtualMachineTO vmSpec) { if (vmSpec.getDetails().get(VMwareGuru.VmwareReserveMemory.key()).equalsIgnoreCase("true")) { + if(vmSpec.getDetails().get(VmDetailConstants.RAM_RESERVATION) != null){ + float reservedMemory = (vmSpec.getMaxRam() * Float.parseFloat(vmSpec.getDetails().get(VmDetailConstants.RAM_RESERVATION))); + return (int) (reservedMemory / ResourceType.bytesToMiB); + } return (int) (vmSpec.getMinRam() / ResourceType.bytesToMiB); } return 0; diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 6efe2e8a417..a13720f17e2 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3822,6 +3822,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q options.put(VmDetailConstants.DATA_DISK_CONTROLLER, Arrays.asList("osdefault", "ide", "scsi", "lsilogic", "lsisas1068", "buslogic", "pvscsi")); options.put(VmDetailConstants.NESTED_VIRTUALIZATION_FLAG, Arrays.asList("true", "false")); options.put(VmDetailConstants.SVGA_VRAM_SIZE, Collections.emptyList()); + options.put(VmDetailConstants.RAM_RESERVATION, Collections.emptyList()); } } diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareHelper.java index a9620414fd5..94b83a39e73 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareHelper.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareHelper.java @@ -548,12 +548,6 @@ public class VmwareHelper { cpuInfo.setReservation((long)cpuReservedMhz); vmConfig.setCpuAllocation(cpuInfo); - if (cpuSpeedMHz != cpuReservedMhz) { - vmConfig.setCpuHotAddEnabled(true); - } - if (memoryMB != memoryReserveMB) { - vmConfig.setMemoryHotAddEnabled(true); - } ResourceAllocationInfo memInfo = new ResourceAllocationInfo(); memInfo.setLimit((long)memoryMB); memInfo.setReservation((long)memoryReserveMB);