This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new c4036800de5 Fix: check root disk offering tagged limits during VM 
deploy (#8871)
c4036800de5 is described below

commit c4036800de50e61b1f2541c354f54a0943b2e610
Author: Vishesh <vishes...@gmail.com>
AuthorDate: Wed Apr 3 19:42:43 2024 +0530

    Fix: check root disk offering tagged limits during VM deploy (#8871)
---
 .../main/java/com/cloud/vm/UserVmManagerImpl.java  | 27 +++++++++++++---------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index fbcbac66dc3..47c26757949 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -4037,11 +4037,12 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             throw new InvalidParameterValueException("Root volume encryption 
is not supported for hypervisor type " + hypervisorType);
         }
 
+        long additionalDiskSize = 0L;
         if (!isIso && diskOfferingId != null) {
             DiskOfferingVO diskOffering = 
_diskOfferingDao.findById(diskOfferingId);
-            volumesSize += verifyAndGetDiskSize(diskOffering, diskSize);
+            additionalDiskSize = verifyAndGetDiskSize(diskOffering, diskSize);
         }
-        UserVm vm = getCheckedUserVmResource(zone, hostName, displayName, 
owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, 
httpmethod, userData, userDataId, userDataDetails, sshKeyPairs, caller, 
requestedIps, defaultIps, isDisplayVm, keyboard, affinityGroupIdList, 
customParameters, customId, dhcpOptionMap, datadiskTemplateToDiskOfferringMap, 
userVmOVFPropertiesMap, dynamicScalingEnabled, vmType, template, 
hypervisorType, accountId, offering, isIso, rootDiskOfferi [...]
+        UserVm vm = getCheckedUserVmResource(zone, hostName, displayName, 
owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, 
httpmethod, userData, userDataId, userDataDetails, sshKeyPairs, caller, 
requestedIps, defaultIps, isDisplayVm, keyboard, affinityGroupIdList, 
customParameters, customId, dhcpOptionMap, datadiskTemplateToDiskOfferringMap, 
userVmOVFPropertiesMap, dynamicScalingEnabled, vmType, template, 
hypervisorType, accountId, offering, isIso, rootDiskOfferi [...]
 
         _securityGroupMgr.addInstanceToGroups(vm.getId(), securityGroupIdList);
 
@@ -4061,15 +4062,14 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
         Map<String, Map<Integer, String>> dhcpOptionMap, Map<Long, 
DiskOffering> datadiskTemplateToDiskOfferringMap,
         Map<String, String> userVmOVFPropertiesMap, boolean 
dynamicScalingEnabled, String vmType, VMTemplateVO template,
         HypervisorType hypervisorType, long accountId, ServiceOfferingVO 
offering, boolean isIso,
-        Long rootDiskOfferingId, long volumesSize) throws 
ResourceAllocationException, StorageUnavailableException,
-            InsufficientCapacityException {
+        Long rootDiskOfferingId, long volumesSize, long additionalDiskSize) 
throws ResourceAllocationException {
         if (!VirtualMachineManager.ResourceCountRunningVMsonly.value()) {
             List<String> resourceLimitHostTags = 
resourceLimitService.getResourceLimitHostTags(offering, template);
             try (CheckedReservation vmReservation = new 
CheckedReservation(owner, ResourceType.user_vm, resourceLimitHostTags, 1l, 
reservationDao, resourceLimitService);
                  CheckedReservation cpuReservation = new 
CheckedReservation(owner, ResourceType.cpu, resourceLimitHostTags, 
Long.valueOf(offering.getCpu()), reservationDao, resourceLimitService);
                  CheckedReservation memReservation = new 
CheckedReservation(owner, ResourceType.memory, resourceLimitHostTags, 
Long.valueOf(offering.getRamSize()), reservationDao, resourceLimitService);
             ) {
-                return getUncheckedUserVmResource(zone, hostName, displayName, 
owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, 
httpmethod, userData, userDataId, userDataDetails, sshKeyPairs, caller, 
requestedIps, defaultIps, isDisplayVm, keyboard, affinityGroupIdList, 
customParameters, customId, dhcpOptionMap, datadiskTemplateToDiskOfferringMap, 
userVmOVFPropertiesMap, dynamicScalingEnabled, vmType, template, 
hypervisorType, accountId, offering, isIso, rootDiskO [...]
+                return getUncheckedUserVmResource(zone, hostName, displayName, 
owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, 
httpmethod, userData, userDataId, userDataDetails, sshKeyPairs, caller, 
requestedIps, defaultIps, isDisplayVm, keyboard, affinityGroupIdList, 
customParameters, customId, dhcpOptionMap, datadiskTemplateToDiskOfferringMap, 
userVmOVFPropertiesMap, dynamicScalingEnabled, vmType, template, 
hypervisorType, accountId, offering, isIso, rootDiskO [...]
             } catch (ResourceAllocationException | CloudRuntimeException  e) {
                 throw e;
             } catch (Exception e) {
@@ -4078,7 +4078,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             }
 
         } else {
-            return getUncheckedUserVmResource(zone, hostName, displayName, 
owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, 
httpmethod, userData, userDataId, userDataDetails, sshKeyPairs, caller, 
requestedIps, defaultIps, isDisplayVm, keyboard, affinityGroupIdList, 
customParameters, customId, dhcpOptionMap, datadiskTemplateToDiskOfferringMap, 
userVmOVFPropertiesMap, dynamicScalingEnabled, vmType, template, 
hypervisorType, accountId, offering, isIso, rootDiskOffer [...]
+            return getUncheckedUserVmResource(zone, hostName, displayName, 
owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, 
httpmethod, userData, userDataId, userDataDetails, sshKeyPairs, caller, 
requestedIps, defaultIps, isDisplayVm, keyboard, affinityGroupIdList, 
customParameters, customId, dhcpOptionMap, datadiskTemplateToDiskOfferringMap, 
userVmOVFPropertiesMap, dynamicScalingEnabled, vmType, template, 
hypervisorType, accountId, offering, isIso, rootDiskOffer [...]
         }
     }
 
@@ -4095,11 +4095,16 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
         Map<String, Map<Integer, String>> dhcpOptionMap, Map<Long, 
DiskOffering> datadiskTemplateToDiskOfferringMap,
         Map<String, String> userVmOVFPropertiesMap, boolean 
dynamicScalingEnabled, String vmType, VMTemplateVO template,
         HypervisorType hypervisorType, long accountId, ServiceOfferingVO 
offering, boolean isIso,
-        Long rootDiskOfferingId, long volumesSize) throws 
ResourceAllocationException, StorageUnavailableException,
-            InsufficientCapacityException {
-        List<String> resourceLimitStorageTags = 
getResourceLimitStorageTags(diskOfferingId != null ? diskOfferingId : 
offering.getDiskOfferingId());
-        try (CheckedReservation volumeReservation = new 
CheckedReservation(owner, ResourceType.volume, resourceLimitStorageTags, (isIso 
|| diskOfferingId == null ? 1l : 2), reservationDao, resourceLimitService);
-             CheckedReservation primaryStorageReservation = new 
CheckedReservation(owner, ResourceType.primary_storage, 
resourceLimitStorageTags, volumesSize, reservationDao, resourceLimitService)) {
+        Long rootDiskOfferingId, long volumesSize, long additionalDiskSize) 
throws ResourceAllocationException
+    {
+        List<String> rootResourceLimitStorageTags = 
getResourceLimitStorageTags(rootDiskOfferingId != null ? rootDiskOfferingId : 
offering.getDiskOfferingId());
+        List<String> additionalResourceLimitStorageTags = diskOfferingId != 
null ? getResourceLimitStorageTags(diskOfferingId) : null;
+
+        try (CheckedReservation rootVolumeReservation = new 
CheckedReservation(owner, ResourceType.volume, rootResourceLimitStorageTags, 
1L, reservationDao, resourceLimitService);
+             CheckedReservation additionalVolumeReservation = diskOfferingId 
!= null ? new CheckedReservation(owner, ResourceType.volume, 
additionalResourceLimitStorageTags, 1L, reservationDao, resourceLimitService) : 
null;
+             CheckedReservation rootPrimaryStorageReservation = new 
CheckedReservation(owner, ResourceType.primary_storage, 
rootResourceLimitStorageTags, volumesSize, reservationDao, 
resourceLimitService);
+             CheckedReservation additionalPrimaryStorageReservation = 
diskOfferingId != null ? new CheckedReservation(owner, 
ResourceType.primary_storage, additionalResourceLimitStorageTags, 
additionalDiskSize, reservationDao, resourceLimitService) : null;
+        ) {
 
             // verify security group ids
             if (securityGroupIdList != null) {

Reply via email to