@@ -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