Skip to content

Commit eff10bc

Browse files
authored
server: always use iops settings from new disk-offer (#6681)
If you had an disk-offer which would compute-only == false, it wouldn't apply the iop settings of the new disk-offer and instead use null for the settings.
1 parent ff961c9 commit eff10bc

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,18 @@ private void validateVolumeReadyStateAndHypervisorChecks(VolumeVO volume, long c
19451945
}
19461946
}
19471947

1948+
private void setNewIopsLimits(VolumeVO volume, DiskOfferingVO newDiskOffering, Long[] newMinIops, Long[] newMaxIops) {
1949+
if (Boolean.TRUE.equals(newDiskOffering.isCustomizedIops())) {
1950+
newMinIops[0] = newMinIops[0] != null ? newMinIops[0] : volume.getMinIops();
1951+
newMaxIops[0] = newMaxIops[0] != null ? newMaxIops[0] : volume.getMaxIops();
1952+
1953+
validateIops(newMinIops[0], newMaxIops[0], volume.getPoolType());
1954+
} else {
1955+
newMinIops[0] = newDiskOffering.getMinIops();
1956+
newMaxIops[0] = newDiskOffering.getMaxIops();
1957+
}
1958+
}
1959+
19481960
private void validateVolumeResizeWithNewDiskOfferingAndLoad(VolumeVO volume, DiskOfferingVO existingDiskOffering, DiskOfferingVO newDiskOffering, Long[] newSize, Long[] newMinIops, Long[] newMaxIops, Integer[] newHypervisorSnapshotReserve) {
19491961
if (newDiskOffering.getRemoved() != null) {
19501962
throw new InvalidParameterValueException("Requested disk offering has been removed.");
@@ -1993,20 +2005,13 @@ private void validateVolumeResizeWithNewDiskOfferingAndLoad(VolumeVO volume, Dis
19932005
} else {
19942006
newSize[0] = newDiskOffering.getDiskSize();
19952007
}
1996-
if (newDiskOffering.isCustomizedIops() != null && newDiskOffering.isCustomizedIops()) {
1997-
newMinIops[0] = newMinIops[0] != null ? newMinIops[0] : volume.getMinIops();
1998-
newMaxIops[0] = newMaxIops[0] != null ? newMaxIops[0] : volume.getMaxIops();
1999-
2000-
validateIops(newMinIops[0], newMaxIops[0], volume.getPoolType());
2001-
} else {
2002-
newMinIops[0] = newDiskOffering.getMinIops();
2003-
newMaxIops[0] = newDiskOffering.getMaxIops();
2004-
}
20052008

20062009
// if the hypervisor snapshot reserve value is null, it must remain null (currently only KVM uses null and null is all KVM uses for a value here)
20072010
newHypervisorSnapshotReserve[0] = volume.getHypervisorSnapshotReserve() != null ? newDiskOffering.getHypervisorSnapshotReserve() : null;
20082011
}
20092012

2013+
setNewIopsLimits(volume, newDiskOffering, newMinIops, newMaxIops);
2014+
20102015
if (existingDiskOffering.getDiskSizeStrictness() && !(volume.getSize().equals(newSize[0]))) {
20112016
throw new InvalidParameterValueException(String.format("Resize volume for %s is not allowed since disk offering's size is fixed", volume.getName()));
20122017
}

0 commit comments

Comments
 (0)