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