Dudi Maroshi has uploaded a new change for review. Change subject: engine: validate (vm NUMA nodes) <= (vm CPU cores) ......................................................................
engine: validate (vm NUMA nodes) <= (vm CPU cores) Add validation in canDoAction(), in UpdateVmCommand. Validate (vm NUMA nodes> <= (vm CPU cores), even if called from REST api Generate a detailed error message: [Cannot edit VM. Assigned 2 NUMA nodes for 1 CPU cores. Cannot assign more NUMA nodes then CPU cores.] Bug-Url: https://bugzilla.redhat.com/1196235 Change-Id: I4589721f3d9fa76509d2931b351c5517c06df334 Signed-off-by: Dudi Maroshi <d...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.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 6 files changed, 41 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/17/39317/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java index 150fece..0e583a7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java @@ -691,6 +691,9 @@ getVmId()))) { return false; } + if (getParameters().getVm().getMigrationSupport() == MigrationSupport.PINNED_TO_HOST && + !validate(VmHandler.checkVmNumaNodesIntegrity(getParameters().getVm(), getVm()))) + return false; return true; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index f097aca..b2a7b37 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -860,8 +860,34 @@ } /** - * preferred supports single pinned vnuma node (without that VM fails to run in libvirt). - * used by add/update VM commands + * Cannot have more vm NUMA nodes then vm CPU cores + */ + public static ValidationResult checkVmNumaNodesIntegrity(VM paramsVm, VM actualVm) { + List<VmNumaNode> vmNumaNodes = paramsVm.getvNumaNodeList(); + if (vmNumaNodes == null || vmNumaNodes.isEmpty()){ // no NUMA nodes from parameters (empty parameter) + // try getting the actual vm NUMA nodes from database + vmNumaNodes = DbFacade.getInstance().getVmNumaNodeDAO().getAllVmNumaNodeByVmId(actualVm.getId()); + } + + if (vmNumaNodes == null || vmNumaNodes.isEmpty()) // no NUMA nodes + return ValidationResult.VALID; + + int cpuCount = paramsVm.getNumOfCpus(); + if (cpuCount == 0) // no CPU count from parameters (empty parameter) + cpuCount = actualVm.getNumOfCpus(); + + if (cpuCount < vmNumaNodes.size()) { + return new ValidationResult(VdcBllMessages.VM_NUMA_NODE_MORE_NODES_THEN_CPUS, + String.format("$numaNodes %d", vmNumaNodes.size()), + String.format("$cpus %d", cpuCount)); + } + + return ValidationResult.VALID; + } + + /** + * preferred supports single pinned vnuma node (without that VM fails to run in libvirt). used by add/update VM + * commands */ public static ValidationResult checkNumaPreferredTuneMode(NumaTuneMode numaTuneMode, List<VmNumaNode> vmNumaNodes, 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 65f70b2..cdbf5f6 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 @@ -417,6 +417,7 @@ VM_NUMA_NODE_PINNED_INDEX_ERROR(ErrorType.BAD_PARAMETERS), VM_NUMA_NODE_MEMRORY_ERROR(ErrorType.BAD_PARAMETERS), VM_NUMA_NODE_PREFERRED_NOT_PINNED_TO_SINGLE_NODE(ErrorType.BAD_PARAMETERS), + VM_NUMA_NODE_MORE_NODES_THEN_CPUS(ErrorType.BAD_PARAMETERS), CANNOT_PREVIEW_ACTIVE_SNAPSHOT(ErrorType.BAD_PARAMETERS), VM_CANNOT_SUSPENDE_HAS_RUNNING_TASKS(ErrorType.CONFLICT), VM_CANNOT_REMOVE_HAS_RUNNING_TASKS(ErrorType.CONFLICT), @@ -1181,7 +1182,7 @@ private ErrorType messageType; - VdcBllMessages() { + VdcBllMessages() { this.messageType = null; } 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 80a75a1..990aa8e 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -746,6 +746,7 @@ VM_NUMA_NODE_PINNED_INDEX_ERROR=NUMA node pinned index error. VM_NUMA_NODE_MEMRORY_ERROR=NUMA node memory error. VM_NUMA_NODE_PREFERRED_NOT_PINNED_TO_SINGLE_NODE=Preferred NUMA tune mode is allowed for a single pinned Virtual NUMA Node. +VM_NUMA_NODE_MORE_NODES_THEN_CPUS=Cannot ${action} ${type}. Assigned ${numaNodes} NUMA nodes for ${cpus} CPU cores. Cannot assign more NUMA nodes then CPU cores. ACTION_TYPE_FAILED_TEMPLATE_NOT_FOUND_ON_EXPORT_DOMAIN=Cannot export VM. Template ${TemplateName} does not exist on the export domain. if you want to export VM without its Template please use TemplateMustExists=false ACTION_TYPE_FAILED_VM_NOT_FOUND_ON_EXPORT_DOMAIN=Cannot delete VM, VM not exists in export domain ACTION_NOT_SUPPORTED_FOR_CLUSTER_POOL_LEVEL=The Action ${action} ${type} is not supported for this Cluster or Data Center compatibility version 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 58a9e8a..0feacba 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 @@ -3208,6 +3208,7 @@ @DefaultStringValue("Cannot ${action} ${type}. Geo-replication session is paused.") String ACTION_TYPE_FAILED_GEOREP_SESSION_ALREADY_PAUSED(); + @DefaultStringValue("Cannot ${action} ${type}. Cannot set the configuration.") String ACTION_TYPE_FAILED_GLUSTER_GEOREP_CONFIG_SET(); @@ -3514,6 +3515,9 @@ @DefaultStringValue("Preferred NUMA tune mode is allowed for a single pinned Virtual NUMA Node.") String VM_NUMA_NODE_PREFERRED_NOT_PINNED_TO_SINGLE_NODE(); + @DefaultStringValue("Cannot ${action} ${type}. Assigned ${numaNodes} NUMA nodes for ${cpus} CPU cores. Cannot assign more NUMA nodes then CPU cores.") + String VM_NUMA_NODE_MORE_NODES_THEN_CPUS(); + @DefaultStringValue("$detailMessage it is not a Hosted Engine host.") String VAR__DETAIL__NOT_HE_HOST(); 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 c8925a2..eb3db5d 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 @@ -1329,3 +1329,6 @@ ACTION_TYPE_FAILED_PROVIDER_NOT_SUPPORTED=Cannot ${action} ${type}. The current type ${providerType} is not supported. ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. + +VM_NUMA_NODE_MORE_NODES_THEN_CPUS=Cannot ${action} ${type}. Assigned ${numaNodes} NUMA nodes for ${cpus} CPU cores. Cannot assign more NUMA nodes then CPU cores. + -- To view, visit https://gerrit.ovirt.org/39317 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4589721f3d9fa76509d2931b351c5517c06df334 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Dudi Maroshi <d...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches