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

Reply via email to