Lior Vernia has uploaded a new change for review. Change subject: engine: Implement HostNetworkQosValidator ......................................................................
engine: Implement HostNetworkQosValidator Implemented dedicated validation, e.g. that the QoS configuration must contain at the very least average link share rate. Change-Id: Ibf156e27381111efb3d9abac3e6e37ccdd8f7643 Signed-off-by: Lior Vernia <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/QosCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/CpuQosValidator.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/QosValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageQosValidator.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidatorTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/NetworkQosValidatorTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 13 files changed, 185 insertions(+), 19 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/34123/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java index f5ca097..0c6f834 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java @@ -257,11 +257,13 @@ } NetworkQosValidator qosValidator = new NetworkQosValidator(iface.getQos()); - if (qosValidator.allValuesPresent() != ValidationResult.VALID) { - addViolation(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES, iface.getNetworkName()); + if (qosValidator.requiredValuesPresent() != ValidationResult.VALID) { + addViolation(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES, + iface.getNetworkName()); } if (qosValidator.peakConsistentWithAverage() != ValidationResult.VALID) { - addViolation(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE, iface.getNetworkName()); + addViolation(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES, + iface.getNetworkName()); } } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/QosCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/QosCommandBase.java index ec768f6..fe9ef3b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/QosCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/QosCommandBase.java @@ -32,7 +32,7 @@ protected boolean canDoAction() { M validator = getQosValidator(getQos()); return (validateParameters() - && validate(validator.allValuesPresent())); + && validate(validator.requiredValuesPresent())); } public T getQos() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/CpuQosValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/CpuQosValidator.java index c0c788c..94c5a69 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/CpuQosValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/CpuQosValidator.java @@ -18,7 +18,7 @@ } @Override - public ValidationResult allValuesPresent() { + public ValidationResult requiredValuesPresent() { if (getQos().getCpuLimit() == null) { return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_QOS_MISSING_VALUES); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidator.java new file mode 100644 index 0000000..07b1df6 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidator.java @@ -0,0 +1,43 @@ +package org.ovirt.engine.core.bll.validator; + +import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.common.businessentities.network.HostNetworkQos; +import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.qos.QosDao; + +public class HostNetworkQosValidator extends QosValidator<HostNetworkQos> { + + public HostNetworkQosValidator(HostNetworkQos qos) { + super(qos); + } + + @Override + public ValidationResult requiredValuesPresent() { + return (getQos() != null && getQos().getOutAverageLinkshare() == null) + ? new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES) + : ValidationResult.VALID; + } + + /** + * Verify that if upper limit and real time rates are provided, real time isn't lower than upper limit. + */ + public ValidationResult valuesConsistent() { + HostNetworkQos qos = getQos(); + if (qos == null) { + return ValidationResult.VALID; + } + + Integer outUpperlimit = qos.getOutAverageUpperlimit(); + Integer outRealtime = qos.getOutAverageRealtime(); + return (outUpperlimit != null && outRealtime != null && outUpperlimit < outRealtime) + ? new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES) + : ValidationResult.VALID; + } + + @Override + protected QosDao<HostNetworkQos> getQosDao() { + return DbFacade.getInstance().getHostNetworkQosDao(); + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java index 834850e..7ac64ad 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java @@ -16,7 +16,7 @@ * Verify that if any inbound/outbound capping was specified, that all three parameters are present. */ @Override - public ValidationResult allValuesPresent() { + public ValidationResult requiredValuesPresent() { return (getQos() != null) && (missingValue(getQos().getInboundAverage(), getQos().getInboundPeak(), getQos().getInboundBurst()) || missingValue(getQos().getOutboundAverage(), getQos().getOutboundPeak(), getQos().getOutboundBurst())) diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/QosValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/QosValidator.java index b5d89b1..eb16756 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/QosValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/QosValidator.java @@ -83,7 +83,7 @@ } /** - * Verify that if any capping was specified, that all parameters are present. + * Verify that if any capping was specified, that all required parameters are present. */ - public abstract ValidationResult allValuesPresent(); + public abstract ValidationResult requiredValuesPresent(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageQosValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageQosValidator.java index e85b162..59a9e12 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageQosValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageQosValidator.java @@ -25,7 +25,7 @@ * write value. */ @Override - public ValidationResult allValuesPresent() { + public ValidationResult requiredValuesPresent() { if (missingCategoryValues(getQos().getMaxThroughput(), getQos().getMaxReadThroughput(), getQos().getMaxWriteThroughput()) diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidatorTest.java new file mode 100644 index 0000000..4c8a53c --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/HostNetworkQosValidatorTest.java @@ -0,0 +1,109 @@ +package org.ovirt.engine.core.bll.validator; + +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith; +import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.isValid; + +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Test; +import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.common.businessentities.network.HostNetworkQos; +import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.utils.RandomUtils; + +public class HostNetworkQosValidatorTest { + + private static int LOW_BANDWIDTH = 500; + private static int HIGH_BANDWIDTH = 2000; + + private HostNetworkQos qos; + private HostNetworkQosValidator validator; + private HostNetworkQosValidator nullValidator; + + @Before + public void setup() { + qos = mock(HostNetworkQos.class); + validator = new HostNetworkQosValidator(qos); + nullValidator = new HostNetworkQosValidator(null); + } + + private void mockQos(Integer linkshare, Integer upperlimit, Integer realtime) { + when(qos.getOutAverageLinkshare()).thenReturn(linkshare); + when(qos.getOutAverageUpperlimit()).thenReturn(upperlimit); + when(qos.getOutAverageRealtime()).thenReturn(realtime); + } + + private int generateValue() { + return RandomUtils.instance().nextInt(0, 1000000); + } + + private void requiredValuesTest(Matcher<ValidationResult> matcher) { + assertThat(validator.requiredValuesPresent(), matcher); + } + + @Test + public void onlyLinksharePresent() { + mockQos(generateValue(), null, null); + requiredValuesTest(isValid()); + } + + @Test + public void allValuesPresent() { + mockQos(generateValue(), generateValue(), generateValue()); + requiredValuesTest(isValid()); + } + + @Test + public void noValuesPresent() { + mockQos(null, null, null); + requiredValuesTest(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES)); + } + + @Test + public void allButLinksharePresent() { + mockQos(null, generateValue(), generateValue()); + requiredValuesTest(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES)); + } + + @Test + public void nullQosValuesPresent() { + assertThat(nullValidator.requiredValuesPresent(), isValid()); + } + + private void consistentValuesTest(Matcher<ValidationResult> matcher) { + assertThat(validator.valuesConsistent(), matcher); + } + + @Test + public void valuesConsistent() { + mockQos(generateValue(), HIGH_BANDWIDTH, LOW_BANDWIDTH); + consistentValuesTest(isValid()); + } + + @Test + public void valuesConsistentEqual() { + mockQos(generateValue(), HIGH_BANDWIDTH, HIGH_BANDWIDTH); + consistentValuesTest(isValid()); + } + + @Test + public void valuesConsistentOnlyLinkshare() { + mockQos(generateValue(), null, null); + consistentValuesTest(isValid()); + } + + @Test + public void upperlimitLowerThanRealTime() { + mockQos(generateValue(), LOW_BANDWIDTH, HIGH_BANDWIDTH); + consistentValuesTest(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES)); + } + + @Test + public void nullQosValuesConsistent() { + assertThat(nullValidator.valuesConsistent(), isValid()); + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/NetworkQosValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/NetworkQosValidatorTest.java index d2d71b8..1947762 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/NetworkQosValidatorTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/NetworkQosValidatorTest.java @@ -122,12 +122,12 @@ } private void valuesPresentTest(Matcher<ValidationResult> matcher) { - assertThat(validator.allValuesPresent(), matcher); + assertThat(validator.requiredValuesPresent(), matcher); } @Test public void valuesPresentNullInput() { - assertThat(nullValidator.allValuesPresent(), isValid()); + assertThat(nullValidator.requiredValuesPresent(), isValid()); } @Test diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 695051c..57a40c7 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -999,7 +999,9 @@ ACTION_TYPE_FAILED_NETWORK_QOS_INVALID_DC_ID(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES(ErrorType.BAD_PARAMETERS), - ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES(ErrorType.BAD_PARAMETERS), // Alignment scan ERROR_CANNOT_RUN_ALIGNMENT_SCAN_VM_IS_RUNNING(ErrorType.CONFLICT), diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index fb5ab1b..27548c2 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -1144,8 +1144,10 @@ ACTION_TYPE_FAILED_NETWORK_QOS_NOT_FOUND=Cannot ${action} ${type}. QoS entity not found. ACTION_TYPE_FAILED_NETWORK_QOS_INVALID_DC_ID=Cannot ${action} ${type}. Data Center does not contain the specific QoS entity. ACTION_TYPE_FAILED_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE=Cannot ${action} ${type}. Peak cannot be set lower than Average. -ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES=Cannot ${action} ${type}. All three QoS parameters are required to configure QoS in a certain direction, but the following network(s) are missing some of them: ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES_LIST}. -ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE=Cannot ${action} ${type}. QoS cannot be configured such that Peak is set lower than Average, but it was configured so on the following network(s): ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE_LIST}. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES=Cannot ${action} ${type}. Weighted share must be specified to complete QoS configuration. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES=Cannot ${action} ${type}. Weighted share must be specified to complete QoS configuration, but the following network(s) are missing it: ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES_LIST}. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES=Cannot ${action} ${type}. If both are provided, rate limit must not be lower than committed rate. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES=Cannot ${action} ${type}. If both are provided, rate limit must not be lower than committed rate. However, this is not the case with the following network(s): ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES_LIST}. QOS_NAME_NOT_NULL=QoS name cannot be empty. QOS_NAME_INVALID=Invalid QoS name (name must be formed of "a-z0-9A-Z" or "-_ ") QOS_NAME_TOO_LONG=QoS name length must be under 50 characters. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index f9a5a87..dacef7a 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -3080,11 +3080,17 @@ @DefaultStringValue("Cannot ${action} ${type}. Peak cannot be set lower than Average.") String ACTION_TYPE_FAILED_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE(); - @DefaultStringValue("Cannot ${action} ${type}. All three QoS parameters are required to configure QoS in a certain direction, but the following network(s) are missing some of them: ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES_LIST}.") + @DefaultStringValue("Cannot ${action} ${type}. Weighted share must be specified to complete QoS configuration.") String ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES(); - @DefaultStringValue("Cannot ${action} ${type}. QoS cannot be configured such that Peak is set lower than Average, but it was configured so on the following network(s): ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE_LIST}.") - String ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE(); + @DefaultStringValue("Cannot ${action} ${type}. Weighted share must be specified to complete QoS configuration, but the following network(s) are missing it: ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES_LIST}.") + String ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES(); + + @DefaultStringValue("Cannot ${action} ${type}. If both are provided, rate limit must not be lower than committed rate.") + String ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES(); + + @DefaultStringValue("Cannot ${action} ${type}. If both are provided, rate limit must not be lower than committed rate. However, this is not the case with the following network(s): ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES_LIST}.") + String ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES(); @DefaultStringValue("Cannot ${action} ${type}. Values are out of range.") String ACTION_TYPE_FAILED_QOS_OUT_OF_RANGE_VALUES(); diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index be087ee..2b9b45e 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -1113,8 +1113,10 @@ ACTION_TYPE_FAILED_NETWORK_QOS_NOT_FOUND=Cannot ${action} ${type}. QoS entity not found. ACTION_TYPE_FAILED_NETWORK_QOS_INVALID_DC_ID=Cannot ${action} ${type}. Data Center does not contain the specific QoS entity. ACTION_TYPE_FAILED_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE=Cannot ${action} ${type}. Peak cannot be set lower than Average. -ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES=Cannot ${action} ${type}. All three QoS parameters are required to configure QoS in a certain direction, but the following network(s) are missing some of them: ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES_LIST}. -ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE=Cannot ${action} ${type}. QoS cannot be configured such that Peak is set lower than Average, but it was configured so on the following network(s): ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE_LIST}. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES=Cannot ${action} ${type}. Weighted share must be specified to complete QoS configuration. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES=Cannot ${action} ${type}. Weighted share must be specified to complete QoS configuration, but the following network(s) are missing it: ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES_LIST}. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES=Cannot ${action} ${type}. If both are provided, rate limit must not be lower than committed rate. +ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES=Cannot ${action} ${type}. If both are provided, rate limit must not be lower than committed rate. However, this is not the case with the following network(s): ${ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES_LIST}. QOS_NAME_NOT_NULL=QoS name cannot be empty. QOS_NAME_INVALID=Invalid QoS name (name must be formed of "a-z0-9A-Z" or "-_ ") QOS_NAME_TOO_LONG=QoS name length must be under 50 characters. -- To view, visit http://gerrit.ovirt.org/34123 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibf156e27381111efb3d9abac3e6e37ccdd8f7643 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
