Skip to content

Commit 3dc0e49

Browse files
storage: validate disk size range of custom disk offering when resize volume (#7073)
1 parent 4bb43f7 commit 3dc0e49

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

api/src/main/java/com/cloud/storage/VolumeApiService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account acc
154154

155155
Volume recoverVolume(long volumeId);
156156

157+
void validateCustomDiskOfferingSizeRange(Long sizeInGB);
158+
157159
boolean validateVolumeSizeInBytes(long size);
158160

159161
Volume changeDiskOfferingForVolume(ChangeOfferingForVolumeCmd cmd) throws ResourceAllocationException;

server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -715,12 +715,7 @@ public VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationExcept
715715
if (size == null) {
716716
throw new InvalidParameterValueException("This disk offering requires a custom size specified");
717717
}
718-
Long customDiskOfferingMaxSize = VolumeOrchestrationService.CustomDiskOfferingMaxSize.value();
719-
Long customDiskOfferingMinSize = VolumeOrchestrationService.CustomDiskOfferingMinSize.value();
720-
721-
if ((sizeInGB < customDiskOfferingMinSize) || (sizeInGB > customDiskOfferingMaxSize)) {
722-
throw new InvalidParameterValueException("Volume size: " + sizeInGB + "GB is out of allowed range. Max: " + customDiskOfferingMaxSize + " Min:" + customDiskOfferingMinSize);
723-
}
718+
validateCustomDiskOfferingSizeRange(sizeInGB);
724719
}
725720

726721
if (!diskOffering.isCustomized() && size != null) {
@@ -872,6 +867,16 @@ public VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationExcept
872867
_uuidMgr.generateUuid(Volume.class, cmd.getCustomId()), details);
873868
}
874869

870+
@Override
871+
public void validateCustomDiskOfferingSizeRange(Long sizeInGB) {
872+
Long customDiskOfferingMaxSize = VolumeOrchestrationService.CustomDiskOfferingMaxSize.value();
873+
Long customDiskOfferingMinSize = VolumeOrchestrationService.CustomDiskOfferingMinSize.value();
874+
875+
if ((sizeInGB < customDiskOfferingMinSize) || (sizeInGB > customDiskOfferingMaxSize)) {
876+
throw new InvalidParameterValueException(String.format("Volume size: %s GB is out of allowed range. Min: %s. Max: %s", sizeInGB, customDiskOfferingMinSize, customDiskOfferingMaxSize));
877+
}
878+
}
879+
875880
private VolumeVO commitVolume(final CreateVolumeCmd cmd, final Account caller, final Account owner, final Boolean displayVolume, final Long zoneId, final Long diskOfferingId,
876881
final Storage.ProvisioningType provisioningType, final Long size, final Long minIops, final Long maxIops, final VolumeVO parentVolume, final String userSpecifiedName, final String uuid, final Map<String, String> details) {
877882
return Transaction.execute(new TransactionCallback<VolumeVO>() {
@@ -1060,6 +1065,10 @@ public VolumeVO resizeVolume(ResizeVolumeCmd cmd) throws ResourceAllocationExcep
10601065
throw new InvalidParameterValueException(String.format("Resize of volume %s is not allowed, since disk size is strictly fixed as per the disk offering", volume.getUuid()));
10611066
}
10621067

1068+
if (diskOffering.isCustomized()) {
1069+
validateCustomDiskOfferingSizeRange(newSize);
1070+
}
1071+
10631072
if (isNotPossibleToResize(volume, diskOffering)) {
10641073
throw new InvalidParameterValueException(
10651074
"Failed to resize Root volume. The service offering of this Volume has been configured with a root disk size; "
@@ -1138,6 +1147,8 @@ public VolumeVO resizeVolume(ResizeVolumeCmd cmd) throws ResourceAllocationExcep
11381147
throw new InvalidParameterValueException("The new disk offering requires that a size be specified.");
11391148
}
11401149

1150+
validateCustomDiskOfferingSizeRange(newSize);
1151+
11411152
// convert from GiB to bytes
11421153
newSize = newSize << 30;
11431154
} else {

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4187,12 +4187,7 @@ private long verifyAndGetDiskSize(DiskOfferingVO diskOffering, Long diskSize) {
41874187
if (diskSize == null) {
41884188
throw new InvalidParameterValueException("This disk offering requires a custom size specified");
41894189
}
4190-
Long customDiskOfferingMaxSize = VolumeOrchestrationService.CustomDiskOfferingMaxSize.value();
4191-
Long customDiskOfferingMinSize = VolumeOrchestrationService.CustomDiskOfferingMinSize.value();
4192-
if ((diskSize < customDiskOfferingMinSize) || (diskSize > customDiskOfferingMaxSize)) {
4193-
throw new InvalidParameterValueException("VM Creation failed. Volume size: " + diskSize + "GB is out of allowed range. Max: " + customDiskOfferingMaxSize
4194-
+ " Min:" + customDiskOfferingMinSize);
4195-
}
4190+
_volumeService.validateCustomDiskOfferingSizeRange(diskSize);
41964191
size = diskSize * GiB_TO_BYTES;
41974192
} else {
41984193
size = diskOffering.getDiskSize();

0 commit comments

Comments
 (0)