Alona Kaplan has uploaded a new change for review. Change subject: engine: Add compatibility version check to qos on profiles bll commands ......................................................................
engine: Add compatibility version check to qos on profiles bll commands Add canDoAction check to Add/UpdateVnicProfile commands to make sure that network qos set just if the cluster compatibility version supports it. Change-Id: I58f21e68f2c58792c21982f4a60f73be4c744c5e Signed-off-by: Alona Kaplan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.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/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 9 files changed, 72 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/18032/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java index 25b931c..c872921 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java @@ -25,6 +25,7 @@ return validate(validator.vnicProfileIsSet()) && validate(validator.networkExists()) && validate(validator.networkQosExistsOrNull()) + && validate(validator.networkQosSupported()) && validate(validator.vnicProfileForVmNetworkOnly()) && validate(validator.vnicProfileNameNotUsed()) && validate(validator.portMirroringNotSetIfExternalNetwork()) diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java index 5be5078..5769e6b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java @@ -29,6 +29,7 @@ && validate(validator.vnicProfileNameNotUsed()) && validate(validator.networkNotChanged()) && validate(validator.networkQosExistsOrNull()) + && validate(validator.networkQosSupported()) && validate(validator.portMirroringNotChangedIfUsedByVms()) && validate(validator.portMirroringNotSetIfExternalNetwork()) && validator.validateCustomProperties(getReturnValue().getCanDoActionMessages()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java index 005b23c..7c0365f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java @@ -5,6 +5,7 @@ import org.apache.commons.lang.ObjectUtils; import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.businessentities.Nameable; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; @@ -49,6 +50,15 @@ return new NetworkValidator(getNetwork()).networkIsSet(); } + public ValidationResult networkQosSupported() { + return vnicProfile.getNetworkQosId() == null + || FeatureSupported.networkQoS(getDbFacade().getStoragePoolDao() + .get(getNetwork().getDataCenterId()) + .getcompatibility_version()) + ? ValidationResult.VALID + : new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED); + } + public ValidationResult networkQosExistsOrNull() { return vnicProfile.getNetworkQosId() == null || getDbFacade().getQosDao().get(vnicProfile.getNetworkQosId()) != null diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java index 289cfec..72d911d 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java @@ -15,24 +15,30 @@ import org.hamcrest.Matcher; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; import org.ovirt.engine.core.common.businessentities.network.VnicProfile; +import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.StoragePoolDAO; import org.ovirt.engine.core.dao.VmDAO; import org.ovirt.engine.core.dao.VmTemplateDAO; import org.ovirt.engine.core.dao.network.NetworkDao; import org.ovirt.engine.core.dao.network.NetworkQoSDao; import org.ovirt.engine.core.dao.network.VnicProfileDao; +import org.ovirt.engine.core.utils.MockConfigRule; @RunWith(MockitoJUnitRunner.class) public class VnicProfileValidatorTest { @@ -56,6 +62,9 @@ private NetworkQoSDao networkQosDao; @Mock + private StoragePoolDAO dbDao; + + @Mock private VmDAO vmDao; @Mock @@ -67,9 +76,15 @@ @Mock private NetworkQoS networkQos; + @Mock + private StoragePool dc; + private List<VnicProfile> vnicProfiles = new ArrayList<>(); private VnicProfileValidator validator; + + @Rule + public MockConfigRule mockConfigRule = new MockConfigRule(); @Before public void setup() { @@ -83,6 +98,7 @@ when(dbFacade.getNetworkDao()).thenReturn(networkDao); when(dbFacade.getQosDao()).thenReturn(networkQosDao); when(dbFacade.getVmDao()).thenReturn(vmDao); + when(dbFacade.getStoragePoolDao()).thenReturn(dbDao); // mock their getters when(vnicProfileDao.get(any(Guid.class))).thenReturn(vnicProfile); @@ -139,8 +155,43 @@ @Test public void networkQosDoesntExist() throws Exception { when(vnicProfile.getNetworkQosId()).thenReturn(DEFAULT_GUID); - when(networkQosDao.get(any(Guid.class))).thenReturn(null); - assertThat(validator.networkQosExistsOrNull(), failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS)); + when(networkDao.get(any(Guid.class))).thenReturn(null); + assertThat(validator.networkQosExistsOrNull(), + failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS)); + } + + public void networkQosSupportedTest(Matcher<ValidationResult> matcher, Guid networkQosId, boolean featureSupported) { + when(vnicProfile.getNetworkQosId()).thenReturn(networkQosId); + when(networkDao.get(any(Guid.class))).thenReturn(network); + when(dbDao.get(any(Guid.class))).thenReturn(dc); + Version version = mock(Version.class); + when(dc.getcompatibility_version()).thenReturn(version); + mockConfigRule.mockConfigValue(ConfigValues.NetworkQoSSupported, + dc.getcompatibility_version(), + featureSupported); + assertThat(validator.networkQosSupported(), matcher); + } + + @Test + public void networkQosSetAndSupported() throws Exception { + networkQosSupportedTest(isValid(), DEFAULT_GUID, true); + } + + @Test + public void networkQosNotSetAndSupported() throws Exception { + networkQosSupportedTest(isValid(), null, true); + } + + @Test + public void networkQosSetAndNotSupported() throws Exception { + networkQosSupportedTest(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED), + DEFAULT_GUID, + false); + } + + @Test + public void networkQosNotNotSetAndNotSupported() throws Exception { + networkQosSupportedTest(isValid(), null, true); } private void vnicProfileAvailableTest(Matcher<ValidationResult> matcher, List<VnicProfile> vnicProfiles) { 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 276e24f..14dd4ad 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 @@ -387,6 +387,7 @@ ACTION_TYPE_FAILED_NETWORK_IN_USE(ErrorType.CONFLICT), NETWORK_NOT_EXISTS(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED(ErrorType.NOT_SUPPORTED), NETWORK_NOT_EXISTS_IN_CLUSTER(ErrorType.BAD_PARAMETERS), NETWORK_OLD_NETWORK_NOT_SPECIFIED(ErrorType.BAD_PARAMETERS), NETWORK_CAN_NOT_REMOVE_DEFAULT_NETWORK(ErrorType.CONSTRAINT_VIOLATION), 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 47cb478..35b30dd 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -422,6 +422,7 @@ NETWORK_ALREADY_ATTACHED_TO_INTERFACE=Logical Network is already attached to a Network Interface. NETWORK_NOT_EXISTS=The specified Logical Network doesn't exist. ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS=The specified Network QoS doesn't exist. +ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED=Cannot ${action} ${type}. Network QoS is not supported for this cluster's compatibility version. EXTERNAL_NETWORK_CANNOT_BE_PROVISIONED=The specified external network cannot be configured on the host's interface. ERROR_CANNOT_RECOVERY_STORAGE_POOL_THERE_IS_ACTIVE_DATA_DOMAINS=Cannot recover Data Center with active Data Storage Domain in Data Center. ERROR_CANNOT_RECOVERY_STORAGE_POOL_STORAGE_TYPE_MISSMATCH=Cannot recover Data Center. Mismatch between Storage Domain type and Data Center type. 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 6f30ea8..96d191f 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 @@ -1147,6 +1147,9 @@ @DefaultStringValue("The specified Network QoS doesn't exist.") String ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS(); + @DefaultStringValue("Cannot ${action} ${type}. Network QoS is not supported for this cluster's compatibility version.") + String ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED(); + @DefaultStringValue("Cannot ${action} ${type}. The specified VM network interface profile doesn't exist.") String ACTION_TYPE_FAILED_VNIC_PROFILE_NOT_EXISTS(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 8adafcf..65d42ed 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -402,6 +402,7 @@ NETWORK_ALREAY_ATTACH_TO_INTERFACE=Logical Network is already attached to a Network Interface. NETWORK_NOT_EXISTS=The specified Logical Network doesn't exist. ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS=The specified Network QoS doesn't exist. +ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED=Cannot ${action} ${type}. Network QoS is not supported for this cluster's compatibility version. ACTION_TYPE_FAILED_VNIC_PROFILE_NOT_EXISTS=Cannot ${action} ${type}. The specified VM network interface profile doesn't exist. ACTION_TYPE_FAILED_VNIC_PROFILE_NAME_IN_USE=Cannot ${action} ${type}. The VM network interface profile's name is already used by an existing profile for the same network.\n-Please choose a different name. ACTION_TYPE_FAILED_VNIC_PROFILE_IN_USE=Cannot ${action} ${type}. Several ${entities} (${ENTITIES_USING_VNIC_PROFILE_COUNTER}) are using this VM network interface profile:\n${ENTITIES_USING_VNIC_PROFILE}\n - Please remove it from all ${entities} that are using it and try again. 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 c60e334..b3458a6 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 @@ -426,6 +426,7 @@ NETWORK_ALREAY_ATTACH_TO_INTERFACE=Logical Network is already attached to a Network Interface. NETWORK_NOT_EXISTS=The specified Logical Network doesn't exist. ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS=The specified Network QoS doesn't exist. +ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED=Cannot ${action} ${type}. Network QoS is not supported for this cluster's compatibility version. EXTERNAL_NETWORK_CANNOT_BE_PROVISIONED=The specified external network cannot be configured on the host's interface. ERROR_CANNOT_RECOVERY_STORAGE_POOL_THERE_IS_ACTIVE_DATA_DOMAINS=Cannot recover Data Center with active Data Storage Domain in Data Center. ERROR_CANNOT_RECOVERY_STORAGE_POOL_STORAGE_TYPE_MISSMATCH=Cannot recover Data Center. Mismatch between Storage Domain type and Data Center type. -- To view, visit http://gerrit.ovirt.org/18032 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I58f21e68f2c58792c21982f4a60f73be4c744c5e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alona Kaplan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
