Roy Golan has uploaded a new change for review. Change subject: core: constraint num of cpu and socket provisioning ......................................................................
core: constraint num of cpu and socket provisioning use ConfigValues.MaxNumOfVmSockets and ConfigValues.MaxNumOfCpuPerSocket for constrainting VmStatic.cpuPerSocket and VmStatic.numOfSockets Change-Id: If3617eb93e83e563a74f9f7e5a6b3bfa11d68126 Bug-url: https://bugzilla.redhat.com/1070890 Signed-off-by: Roy Golan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/vmManagementValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java 5 files changed, 63 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/30845/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java index a9308c4..5408ebc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java @@ -811,7 +811,7 @@ * validation */ protected boolean validateInputs() { - return validateObject(getParameters()); + return validateObject(getParameters()) && validateObject(getValidationObject()); } protected boolean validateObject(Object value) { @@ -821,6 +821,16 @@ return false; } return true; + } + + /** A command may supply additional object to validate at the validateInput stage. + * that is especially useful for command who share the same validation logic but + * have different parameters class or for situations where parameters objects doesn't + * hold sufficient data. + * @return by default supply an instance which will result a positive validation check. + */ + protected Object getValidationObject() { + return Void.class; } /** @@ -2231,4 +2241,5 @@ public CommandContext cloneContextAndDetachFromParent() { return cloneContext().withoutCompensationContext().withoutExecutionContext().withoutLock(); } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java index ba578c9..8cb4295 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java @@ -218,4 +218,9 @@ protected boolean isCpuSharesValid(VM vmData) { return (vmData.getCpuShares() >= 0 && vmData.getCpuShares() <= MAXIMUM_CPU_SHARES); } + + @Override + protected Object getValidationObject() { + return new vmManagementValidator(this); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/vmManagementValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/vmManagementValidator.java new file mode 100644 index 0000000..0655644 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/vmManagementValidator.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; + +import javax.validation.constraints.AssertTrue; + +/** + * a validator class with validator methods - all + * invoked reflectively by the validator {@link javax.validation.Validator} + */ +public class vmManagementValidator { + + private final VmManagementCommandBase<?> cmd; + + public vmManagementValidator(VmManagementCommandBase<?> cmd) { + this.cmd = cmd; + } + + @AssertTrue(message = "cpu per socket problem") + public boolean isCpuPerSocketValid() { + return cmd.getParameters().getVm().getCpuPerSocket() <= Config.<Integer>getValue( + ConfigValues.MaxNumOfCpuPerSocket, + cmd.getVdsGroup().getcompatibility_version().getValue()); + } + + @AssertTrue(message = "num of sockets no valid") + public boolean isNumOfSocketsValid() { + return cmd.getParameters().getVm().getCpuPerSocket() <= Config.<Integer>getValue( + ConfigValues.MaxNumOfVmSockets, + cmd.getVdsGroup().getcompatibility_version().getValue()); + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java index bd1ed9c..4756bbd 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java @@ -509,6 +509,8 @@ mcr.mockConfigValue(ConfigValues.VirtIoScsiEnabled, Version.v3_3, true); mcr.mockConfigValue(ConfigValues.ValidNumOfMonitors, Arrays.asList("1,2,4".split(","))); mcr.mockConfigValue(ConfigValues.IsMigrationSupported, Version.v3_3, migrationMap); + mcr.mockConfigValue(ConfigValues.MaxNumOfCpuPerSocket, Version.v3_3, 16); + mcr.mockConfigValue(ConfigValues.MaxNumOfVmSockets, Version.v3_3, 16); } private void mockConfigSizeRequirements(int requiredSpaceBufferInGB) { @@ -632,12 +634,15 @@ @Test public void testBeanValidations() { - assertTrue(createCommand(initializeMock(1, 1)).validateInputs()); + AddVmCommand<VmManagementParametersBase> cmd = createCommand(initializeMock(1, 1)); + doReturn(createVdsGroup()).when(cmd).getVdsGroup(); + assertTrue(cmd.validateInputs()); } @Test public void testPatternBasedNameFails() { AddVmCommand<VmManagementParametersBase> cmd = createCommand(initializeMock(1, 1)); + doReturn(createVdsGroup()).when(cmd).getVdsGroup(); cmd.getParameters().getVm().setName("aa-??bb"); assertFalse("Pattern-based name should not be supported for VM", cmd.validateInputs()); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java index f5f14e85..3193fdc 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java @@ -3,6 +3,7 @@ import java.util.HashMap; import javax.validation.Valid; +import javax.validation.constraints.AssertTrue; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.EditableDeviceOnVmStatusField; @@ -12,6 +13,8 @@ import org.ovirt.engine.core.common.businessentities.VmRngDevice; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmWatchdog; +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.compat.Guid; @@ -51,7 +54,9 @@ * for add vm legacy logic will be used: create device for desktop type * for update the current configuration will remain */ - @EditableDeviceOnVmStatusField(generalType = VmDeviceGeneralType.SOUND, type = VmDeviceType.SOUND, isReadOnly = true) + @EditableDeviceOnVmStatusField(generalType = VmDeviceGeneralType.SOUND, + type = VmDeviceType.SOUND, + isReadOnly = true) private Boolean soundDeviceEnabled; /* * This parameter is used to decide if to create console device or not if it is null then: for add vm don't add -- To view, visit http://gerrit.ovirt.org/30845 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If3617eb93e83e563a74f9f7e5a6b3bfa11d68126 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Roy Golan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
