Gilad Chaplik has uploaded a new change for review. Change subject: core: numa engine fixups ......................................................................
core: numa engine fixups Change-Id: I6caf6a5ef6a460ea2d7689bc89ad954c96c2443e Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java 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/numa/vm/AbstractVmNumaNodeCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AddVmNumaNodesCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/UpdateVmNumaNodesCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmNumaNodeOperationParameters.java 6 files changed, 110 insertions(+), 33 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/04/32904/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java index 5f5432e..7df71db 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java @@ -82,6 +82,7 @@ import org.ovirt.engine.core.common.validation.group.CreateVm; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dao.PermissionDAO; import org.ovirt.engine.core.dao.VmDynamicDAO; import org.ovirt.engine.core.dao.VmStaticDAO; @@ -926,7 +927,15 @@ protected void addVmNumaNodes() { List<VmNumaNode> numaNodes = getParameters().getVmStaticData().getvNumaNodeList(); VmNumaNodeOperationParameters params = new VmNumaNodeOperationParameters(getVmId(), numaNodes); - getBackend().runInternalAction(VdcActionType.AddVmNumaNodes, params); + params.setNumaTuneMode(getParameters().getVmStaticData().getNumaTuneMode()); + params.setDedicatedHost(getParameters().getVmStaticData().getDedicatedVmForVds()); + if (numaNodes == null || numaNodes.isEmpty()) { + return; + } + VdcReturnValueBase returnValueBase = getBackend().runInternalAction(VdcActionType.AddVmNumaNodes, params); + if (!returnValueBase.getSucceeded()) { + AuditLogDirector.log(this, AuditLogType.NUMA_ADD_VM_NUMA_NODE_FAILED); + } } protected void addVmInit() { 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 033eb51..419ebf0 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 @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -146,7 +147,7 @@ } UpdateVmNetworks(); - UpdateVmNumaNodes(); + updateVmNumaNodes(); if (!getParameters().isApplyChangesLater()) { hotSetCpus(cpuPerSocket, numOfSockets); } @@ -356,25 +357,54 @@ } } - private void UpdateVmNumaNodes() { + private void updateVmNumaNodes() { VmNumaNodeDAO dao = DbFacade.getInstance().getVmNumaNodeDAO(); List<VmNumaNode> addList = new ArrayList<>(); - List<VmNumaNode> updateList = new ArrayList<>(); - List<VmNumaNode> removeList = new ArrayList<>(); List<VmNumaNode> oldList = dao.getAllVmNumaNodeByVmId(getVmId()); + Map<Guid, VmNumaNode> removeMap = new HashMap<>(); + for (VmNumaNode node : oldList) { + removeMap.put(node.getId(), node); + } List<VmNumaNode> newList = getParameters().getVmStaticData().getvNumaNodeList(); - addList.addAll(newList); - updateList.addAll(newList); - removeList.addAll(oldList); - updateList.retainAll(oldList); - removeList.retainAll(newList); - addList.retainAll(updateList); - VmNumaNodeOperationParameters params = new VmNumaNodeOperationParameters(getVmId(), addList); - getBackend().runInternalAction(VdcActionType.AddVmNumaNodes, params); - params = new VmNumaNodeOperationParameters(getVmId(), updateList); - getBackend().runInternalAction(VdcActionType.UpdateVmNumaNodes, params); - params = new VmNumaNodeOperationParameters(getVmId(), removeList); - getBackend().runInternalAction(VdcActionType.RemoveVmNumaNodes, params); + List<VmNumaNode> updateList = new ArrayList<>(); + for (VmNumaNode node : newList) { + // no id means new entity + if (node.getId() == null) { + addList.addAll(newList); + } else { + updateList.add(node); + } + } + for (VmNumaNode vmNumaNode : updateList) { + removeMap.remove(vmNumaNode.getId()); + } + VmNumaNodeOperationParameters params; + if (!addList.isEmpty()) { + params = new VmNumaNodeOperationParameters(getVmId(), addList); + addAddtionalParams(params); + addLogMessages(getBackend().runInternalAction(VdcActionType.AddVmNumaNodes, params)); + } + if (!updateList.isEmpty()) { + params = new VmNumaNodeOperationParameters(getVmId(), updateList); + addAddtionalParams(params); + addLogMessages(getBackend().runInternalAction(VdcActionType.UpdateVmNumaNodes, params)); + } + if (!removeMap.isEmpty()) { + params = new VmNumaNodeOperationParameters(getVmId(), new ArrayList<>(removeMap.values())); + addAddtionalParams(params); + addLogMessages(getBackend().runInternalAction(VdcActionType.RemoveVmNumaNodes, params)); + } + } + + private void addLogMessages(VdcReturnValueBase returnValueBase) { + if (!returnValueBase.getSucceeded()) { + AuditLogDirector.log(this, AuditLogType.NUMA_UPDATE_VM_NUMA_NODE_FAILED); + } + } + + private void addAddtionalParams(VmNumaNodeOperationParameters params) { + params.setDedicatedHost(getParameters().getVmStaticData().getDedicatedVmForVds()); + params.setNumaTuneMode(getParameters().getVmStaticData().getNumaTuneMode()); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AbstractVmNumaNodeCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AbstractVmNumaNodeCommand.java index 4a615ea..4a79bec 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AbstractVmNumaNodeCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AbstractVmNumaNodeCommand.java @@ -6,7 +6,6 @@ import org.ovirt.engine.core.bll.VmCommand; import org.ovirt.engine.core.common.action.VmNumaNodeOperationParameters; import org.ovirt.engine.core.common.businessentities.NumaTuneMode; -import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VmNumaNode; import org.ovirt.engine.core.common.config.Config; @@ -31,6 +30,22 @@ return getDbFacade().getVmNumaNodeDAO(); } + protected Guid getDedicatedHost() { + Guid dedicatedHost = getParameters().getDedicatedHost(); + if (dedicatedHost != null) { + return dedicatedHost; + } + return getVm().getDedicatedVmForVds(); + } + + protected NumaTuneMode getNumaTuneMode() { + NumaTuneMode numaTuneMode = getParameters().getNumaTuneMode(); + if (numaTuneMode != null) { + return numaTuneMode; + } + return getVm().getNumaTuneMode(); + } + @Override protected boolean canDoAction() { List<VmNumaNode> vmNumaNodes = getParameters().getVmNumaNodeList(); @@ -39,9 +54,8 @@ return true; } - VM vm = getVm(); boolean pinHost = !Config.<Boolean>getValue(ConfigValues.NUMAMigration); - Guid vdsId = vm.getDedicatedVmForVds(); + Guid vdsId = getDedicatedHost(); if (pinHost && vdsId == null) { return failCanDoAction(VdcBllMessages.VM_NUMA_PINNED_VDS_NOT_EXIST); } @@ -54,7 +68,7 @@ } } - boolean memStrict = vm.getNumaTuneMode() == NumaTuneMode.STRICT; + boolean memStrict = getNumaTuneMode() == NumaTuneMode.STRICT; for (VmNumaNode vmNumaNode : vmNumaNodes) { for (Pair<Guid, Pair<Boolean, Integer>> pair : vmNumaNode.getVdsNumaNodeList()) { if (pair.getSecond() == null || pair.getSecond().getSecond() == null) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AddVmNumaNodesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AddVmNumaNodesCommand.java index d43389c..dbfaeb4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AddVmNumaNodesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/AddVmNumaNodesCommand.java @@ -22,7 +22,7 @@ protected void executeCommand() { Guid vmId = getParameters().getVmId(); List<VmNumaNode> vmNumaNodes = getParameters().getVmNumaNodeList(); - Guid vdsId = getVm().getDedicatedVmForVds(); + Guid vdsId = getDedicatedHost(); List<VdsNumaNode> vdsNumaNodes = new ArrayList<>(); if (vdsId != null) { vdsNumaNodes = getVdsNumaNodeDao().getAllVdsNumaNodeByVdsId(vdsId); @@ -30,13 +30,16 @@ List<VdsNumaNode> nodes = new ArrayList<>(); for (VmNumaNode vmNumaNode : vmNumaNodes) { + vmNumaNode.setId(Guid.newGuid()); for (Pair<Guid, Pair<Boolean, Integer>> pair : vmNumaNode.getVdsNumaNodeList()) { int index = pair.getSecond().getSecond(); - for (VdsNumaNode vdsNumaNode : vdsNumaNodes) { - if (vdsNumaNode.getIndex() == index) { - pair.setFirst(vdsNumaNode.getId()); - pair.getSecond().setFirst(true); - break; + // if pinned set pNode + if (pair.getSecond().getFirst()) { + for (VdsNumaNode vdsNumaNode : vdsNumaNodes) { + if (vdsNumaNode.getIndex() == index) { + pair.setFirst(vdsNumaNode.getId()); + break; + } } } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/UpdateVmNumaNodesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/UpdateVmNumaNodesCommand.java index 2738a3e..54f7317 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/UpdateVmNumaNodesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/numa/vm/UpdateVmNumaNodesCommand.java @@ -30,12 +30,13 @@ List<VdsNumaNode> nodes = new ArrayList<>(); for (VmNumaNode vmNumaNode : vmNumaNodes) { for (Pair<Guid, Pair<Boolean, Integer>> pair : vmNumaNode.getVdsNumaNodeList()) { - int index = pair.getSecond().getSecond(); - for (VdsNumaNode vdsNumaNode : vdsNumaNodes) { - if (vdsNumaNode.getIndex() == index) { - pair.setFirst(vdsNumaNode.getId()); - pair.getSecond().setFirst(true); - break; + if (pair.getSecond().getFirst()) { + int index = pair.getSecond().getSecond(); + for (VdsNumaNode vdsNumaNode : vdsNumaNodes) { + if (vdsNumaNode.getIndex() == index) { + pair.setFirst(vdsNumaNode.getId()); + break; + } } } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmNumaNodeOperationParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmNumaNodeOperationParameters.java index d41d891..0960560 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmNumaNodeOperationParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmNumaNodeOperationParameters.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.ovirt.engine.core.common.businessentities.NumaTuneMode; import org.ovirt.engine.core.common.businessentities.VmNumaNode; import org.ovirt.engine.core.compat.Guid; @@ -11,6 +12,9 @@ private static final long serialVersionUID = -1955959985341097257L; private List<VmNumaNode> vmNumaNodeList; + + private NumaTuneMode numaTuneMode; + private Guid dedicatedHost; public VmNumaNodeOperationParameters() { } @@ -30,4 +34,20 @@ return vmNumaNodeList; } + public NumaTuneMode getNumaTuneMode() { + return numaTuneMode; + } + + public void setNumaTuneMode(NumaTuneMode numaTuneMode) { + this.numaTuneMode = numaTuneMode; + } + + public Guid getDedicatedHost() { + return dedicatedHost; + } + + public void setDedicatedHost(Guid dedicatedHost) { + this.dedicatedHost = dedicatedHost; + } + } -- To view, visit http://gerrit.ovirt.org/32904 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6caf6a5ef6a460ea2d7689bc89ad954c96c2443e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches