Skip to content

Commit c403680

Browse files
authored
Fix: check root disk offering tagged limits during VM deploy (#8871)
1 parent 93f3182 commit c403680

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4037,11 +4037,12 @@ private UserVm createVirtualMachine(DataCenter zone, ServiceOffering serviceOffe
40374037
throw new InvalidParameterValueException("Root volume encryption is not supported for hypervisor type " + hypervisorType);
40384038
}
40394039

4040+
long additionalDiskSize = 0L;
40404041
if (!isIso && diskOfferingId != null) {
40414042
DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId);
4042-
volumesSize += verifyAndGetDiskSize(diskOffering, diskSize);
4043+
additionalDiskSize = verifyAndGetDiskSize(diskOffering, diskSize);
40434044
}
4044-
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, rootDiskOfferingId, volumesSize);
4045+
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, rootDiskOfferingId, volumesSize, additionalDiskSize);
40454046

40464047
_securityGroupMgr.addInstanceToGroups(vm.getId(), securityGroupIdList);
40474048

@@ -4061,15 +4062,14 @@ private UserVm getCheckedUserVmResource(DataCenter zone, String hostName, String
40614062
Map<String, Map<Integer, String>> dhcpOptionMap, Map<Long, DiskOffering> datadiskTemplateToDiskOfferringMap,
40624063
Map<String, String> userVmOVFPropertiesMap, boolean dynamicScalingEnabled, String vmType, VMTemplateVO template,
40634064
HypervisorType hypervisorType, long accountId, ServiceOfferingVO offering, boolean isIso,
4064-
Long rootDiskOfferingId, long volumesSize) throws ResourceAllocationException, StorageUnavailableException,
4065-
InsufficientCapacityException {
4065+
Long rootDiskOfferingId, long volumesSize, long additionalDiskSize) throws ResourceAllocationException {
40664066
if (!VirtualMachineManager.ResourceCountRunningVMsonly.value()) {
40674067
List<String> resourceLimitHostTags = resourceLimitService.getResourceLimitHostTags(offering, template);
40684068
try (CheckedReservation vmReservation = new CheckedReservation(owner, ResourceType.user_vm, resourceLimitHostTags, 1l, reservationDao, resourceLimitService);
40694069
CheckedReservation cpuReservation = new CheckedReservation(owner, ResourceType.cpu, resourceLimitHostTags, Long.valueOf(offering.getCpu()), reservationDao, resourceLimitService);
40704070
CheckedReservation memReservation = new CheckedReservation(owner, ResourceType.memory, resourceLimitHostTags, Long.valueOf(offering.getRamSize()), reservationDao, resourceLimitService);
40714071
) {
4072-
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, rootDiskOfferingId, volumesSize);
4072+
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, rootDiskOfferingId, volumesSize, additionalDiskSize);
40734073
} catch (ResourceAllocationException | CloudRuntimeException e) {
40744074
throw e;
40754075
} catch (Exception e) {
@@ -4078,7 +4078,7 @@ private UserVm getCheckedUserVmResource(DataCenter zone, String hostName, String
40784078
}
40794079

40804080
} else {
4081-
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, rootDiskOfferingId, volumesSize);
4081+
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, rootDiskOfferingId, volumesSize, additionalDiskSize);
40824082
}
40834083
}
40844084

@@ -4095,11 +4095,16 @@ private UserVm getUncheckedUserVmResource(DataCenter zone, String hostName, Stri
40954095
Map<String, Map<Integer, String>> dhcpOptionMap, Map<Long, DiskOffering> datadiskTemplateToDiskOfferringMap,
40964096
Map<String, String> userVmOVFPropertiesMap, boolean dynamicScalingEnabled, String vmType, VMTemplateVO template,
40974097
HypervisorType hypervisorType, long accountId, ServiceOfferingVO offering, boolean isIso,
4098-
Long rootDiskOfferingId, long volumesSize) throws ResourceAllocationException, StorageUnavailableException,
4099-
InsufficientCapacityException {
4100-
List<String> resourceLimitStorageTags = getResourceLimitStorageTags(diskOfferingId != null ? diskOfferingId : offering.getDiskOfferingId());
4101-
try (CheckedReservation volumeReservation = new CheckedReservation(owner, ResourceType.volume, resourceLimitStorageTags, (isIso || diskOfferingId == null ? 1l : 2), reservationDao, resourceLimitService);
4102-
CheckedReservation primaryStorageReservation = new CheckedReservation(owner, ResourceType.primary_storage, resourceLimitStorageTags, volumesSize, reservationDao, resourceLimitService)) {
4098+
Long rootDiskOfferingId, long volumesSize, long additionalDiskSize) throws ResourceAllocationException
4099+
{
4100+
List<String> rootResourceLimitStorageTags = getResourceLimitStorageTags(rootDiskOfferingId != null ? rootDiskOfferingId : offering.getDiskOfferingId());
4101+
List<String> additionalResourceLimitStorageTags = diskOfferingId != null ? getResourceLimitStorageTags(diskOfferingId) : null;
4102+
4103+
try (CheckedReservation rootVolumeReservation = new CheckedReservation(owner, ResourceType.volume, rootResourceLimitStorageTags, 1L, reservationDao, resourceLimitService);
4104+
CheckedReservation additionalVolumeReservation = diskOfferingId != null ? new CheckedReservation(owner, ResourceType.volume, additionalResourceLimitStorageTags, 1L, reservationDao, resourceLimitService) : null;
4105+
CheckedReservation rootPrimaryStorageReservation = new CheckedReservation(owner, ResourceType.primary_storage, rootResourceLimitStorageTags, volumesSize, reservationDao, resourceLimitService);
4106+
CheckedReservation additionalPrimaryStorageReservation = diskOfferingId != null ? new CheckedReservation(owner, ResourceType.primary_storage, additionalResourceLimitStorageTags, additionalDiskSize, reservationDao, resourceLimitService) : null;
4107+
) {
41034108

41044109
// verify security group ids
41054110
if (securityGroupIdList != null) {

0 commit comments

Comments
 (0)