wido commented on a change in pull request #3681: Validate disk offering IOPS 
normal and maximum read/write values
URL: https://github.com/apache/cloudstack/pull/3681#discussion_r367079155
 
 

 ##########
 File path: 
server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
 ##########
 @@ -2975,6 +2983,49 @@ public DiskOffering createDiskOffering(final 
CreateDiskOfferingCmd cmd) {
                 hypervisorSnapshotReserve);
     }
 
+    /**
+     * Validates IOPS read and write rate offerings. It throws 
InvalidParameterValueException in case of one of the following cases is not 
respected: </br>
+     * <ul>
+     *  <li>IOPS write rate cannot be greater than IOPS write maximum rate</li>
+     *  <li>IOPS read rate cannot be greater than IOPS read maximum rate</li>
+     *  <li>IOPS read rate max length (seconds) must be greater than zero</li>
+     *  <li>IOPS write rate max length (seconds) must be greater than zero</li>
+     *  <li>If iops.maximum.rate.length is not 0 (zero), blank or null, IOPS 
write/read maximum rate length (seconds) cannot be bigger than thevalue from 
iops.maximum.rate.length</li>
+     * </ul>
+     */
+    protected void valildateIopsRateOfferings(final Long iopsReadRate, final 
Long iopsReadRateMax, final Long iopsReadRateMaxLength, final Long 
iopsWriteRate,
+            final Long iopsWriteRateMax, final Long iopsWriteRateMaxLength) {
+        if (iopsWriteRateMax != null && iopsWriteRate != null && 
iopsWriteRateMax < iopsWriteRate) {
+            throw new InvalidParameterValueException(
+                    String.format("IOPS write rate (rate: %d) cannot be 
greater than IOPS write maximum rate (maximum rate: %d)", iopsWriteRate, 
iopsWriteRateMax));
+        }
+
+        if (iopsReadRateMax != null && iopsReadRate != null && iopsReadRateMax 
< iopsReadRate) {
+            throw new InvalidParameterValueException(
+                    String.format("IOPS read rate (rate: %d) cannot be greater 
than IOPS read maximum rate (maximum rate: %d)", iopsReadRate, 
iopsReadRateMax));
+        }
+
+        if (iopsReadRateMaxLength != null && iopsReadRateMaxLength <= 0) {
+            throw new InvalidParameterValueException(String.format("IOPS read 
rate max length (max length: %d seconds) must be greater than zero", 
iopsReadRateMaxLength));
+        }
+
+        if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength <= 0) {
+            throw new InvalidParameterValueException(String.format("IOPS write 
rate max length (max length: %d seconds) must be greater than zero", 
iopsWriteRateMaxLength));
+        }
+
+        if (iopsMaximumRateLength.value() != null && 
!iopsMaximumRateLength.value().equals(0L)) {
+            if (iopsReadRateMaxLength != null && iopsReadRateMaxLength > 
iopsMaximumRateLength.value()) {
+                throw new InvalidParameterValueException(String.format("IOPS 
read max length (%d seconds) cannot be greater than iops.maximum.rate.length 
(%ds seconds)",
+                        iopsReadRateMaxLength, iopsMaximumRateLength.value()));
+            }
+
+            if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 
iopsMaximumRateLength.value()) {
+                throw new InvalidParameterValueException(String.format("IOPS 
write max length (%d seconds) cannot be greater than 
sane.iops.maximum.rate.length (%d seconds)",
+                        iopsWriteRateMaxLength, 
iopsMaximumRateLength.value()));
+            }
+        }
+    }
+
 
 Review comment:
   As suggested I would also validate the bytes duration here

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to