Hello Xiaolei Shi, I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/33183 to review the following change. Change subject: core: need vds id when build vm numa properties ...................................................................... core: need vds id when build vm numa properties Change-Id: I19be54812d0ebbb54145f33e6b036af84ff1d8ae Bug-Url: https://bugzilla.redhat.com/1099417 Signed-off-by: Bruce Shi <xiao-lei....@hp.com> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactory.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java A backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactoryTest.java 6 files changed, 266 insertions(+), 94 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/83/33183/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java index 4d60460..6b70e97 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java @@ -54,7 +54,7 @@ // backward compatibility for 3.0 return new VmOldInfoBuilder(vm, createInfo); } else { - return new VmInfoBuilder(vm, createInfo); + return new VmInfoBuilder(vm, getParameters().getVdsId(), createInfo); } } @@ -79,6 +79,7 @@ builder.buildVmRngDevice(); builder.buildUnmanagedDevices(); builder.buildVmSerialNumber(); + builder.buildVmNumaProperties(); } private static final Log log = LogFactory.getLog(CreateVDSCommand.class); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactory.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactory.java new file mode 100644 index 0000000..5b3021d --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactory.java @@ -0,0 +1,78 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.ovirt.engine.core.common.businessentities.NumaTuneMode; +import org.ovirt.engine.core.common.businessentities.VdsNumaNode; +import org.ovirt.engine.core.common.businessentities.VmNumaNode; +import org.ovirt.engine.core.utils.NumaUtils; + +public class NumaSettingFactory { + + public static List<Map<String, Object>> buildVmNumaNodeSetting(List<VmNumaNode> vmNumaNodes) { + List<Map<String, Object>> createVmNumaNodes = new ArrayList<>(); + for (VmNumaNode node : vmNumaNodes) { + Map<String, Object> createVmNumaNode = new HashMap<>(); + createVmNumaNode.put(VdsProperties.NUMA_NODE_CPU_LIST, NumaUtils.buildStringFromListForNuma(node.getCpuIds())); + createVmNumaNode.put(VdsProperties.VM_NUMA_NODE_MEM, String.valueOf(node.getMemTotal())); + createVmNumaNodes.add(createVmNumaNode); + } + return createVmNumaNodes; + } + + public static Map<String, Object> buildCpuPinningWithNumaSetting(List<VmNumaNode> vmNodes, List<VdsNumaNode> vdsNodes) { + Map<Integer, List<Integer>> vdsNumaNodeCpus = new HashMap<>(); + Map<String, Object> cpuPinDict = new HashMap<>(); + for (VdsNumaNode node : vdsNodes) { + vdsNumaNodeCpus.put(node.getIndex(), node.getCpuIds()); + } + for (VmNumaNode node : vmNodes) { + List<Integer> pinnedNodeIndexes = NumaUtils.getPinnedNodeIndexList(node.getVdsNumaNodeList()); + if (!pinnedNodeIndexes.isEmpty()) { + Set <Integer> totalPinnedVdsCpus = new LinkedHashSet<>(); + for (Integer vCpu : node.getCpuIds()) { + for (Integer pinnedVdsNode : pinnedNodeIndexes) { + if (vdsNumaNodeCpus.containsKey(pinnedVdsNode)) { + totalPinnedVdsCpus.addAll(vdsNumaNodeCpus.get(pinnedVdsNode)); + } + } + cpuPinDict.put(String.valueOf(vCpu), NumaUtils.buildStringFromListForNuma(totalPinnedVdsCpus)); + } + } + } + return cpuPinDict; + } + + public static Map<String, Object> buildVmNumatuneSetting( + NumaTuneMode numaTuneMode, List<VmNumaNode> vmNumaNodes, List<VdsNumaNode> totalVdsNumaNodes) { + List<Integer> totalVdsNumaNodesIndexes = NumaUtils.getNodeIndexList(totalVdsNumaNodes); + Map<String, Object> createNumaTune = new HashMap<>(2); + Set<Integer> vmNumaNodePinInfo = new HashSet<>(); + for (VmNumaNode node : vmNumaNodes) { + if (!node.getVdsNumaNodeList().isEmpty()) { + vmNumaNodePinInfo.addAll(NumaUtils.getPinnedNodeIndexList(node.getVdsNumaNodeList())); + } + } + if (vmNumaNodePinInfo.isEmpty()) { + if (!totalVdsNumaNodesIndexes.isEmpty()) { + createNumaTune.put(VdsProperties.NUMA_TUNE_NODESET, + NumaUtils.buildStringFromListForNuma(totalVdsNumaNodesIndexes)); + } + } + else { + createNumaTune.put(VdsProperties.NUMA_TUNE_NODESET, + NumaUtils.buildStringFromListForNuma(vmNumaNodePinInfo)); + } + //The two items nodeset and mode should both exist or not + if (createNumaTune.containsKey(VdsProperties.NUMA_TUNE_NODESET)) { + createNumaTune.put(VdsProperties.NUMA_TUNE_MODE, numaTuneMode.getValue()); + } + return createNumaTune; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java index fab0aba..5801002 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java @@ -18,11 +18,14 @@ import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.LunDisk; +import org.ovirt.engine.core.common.businessentities.NumaTuneMode; import org.ovirt.engine.core.common.businessentities.PropagateErrors; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; import org.ovirt.engine.core.common.businessentities.VmDeviceId; +import org.ovirt.engine.core.common.businessentities.VmNumaNode; import org.ovirt.engine.core.common.businessentities.VmPayload; import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.network.Network; @@ -57,9 +60,11 @@ private final List<Map<String, Object>> devices = new ArrayList<Map<String, Object>>(); private List<VmDevice> managedDevices = null; private final boolean hasNonDefaultBootOrder; + private Guid vdsId; - public VmInfoBuilder(VM vm, Map createInfo) { + public VmInfoBuilder(VM vm, Guid vdsId, Map createInfo) { this.vm = vm; + this.vdsId = vdsId; this.createInfo = createInfo; hasNonDefaultBootOrder = (vm.getBootSequence() != vm.getDefaultBootSequence()); if (hasNonDefaultBootOrder) { @@ -1117,4 +1122,45 @@ addDevice(struct, vmDevice, null); } } + + protected void buildVmNumaProperties() { + final String compatibilityVersion = vm.getVdsGroupCompatibilityVersion().toString(); + addNumaSetting(compatibilityVersion); + } + + /** + * Numa will use the same compatibilityVersion as cpu pinning since + * numa may also add cpu pinning configuration and the two features + * have almost the same libvirt version support + * + * @param compatibilityVersion + */ + private void addNumaSetting(final String compatibilityVersion) { + if (Boolean.TRUE.equals(Config.<Boolean> getValue(ConfigValues.CpuPinningEnabled, + compatibilityVersion))) { + NumaTuneMode numaTune = vm.getNumaTuneMode(); + List<VmNumaNode> vmNumaNodes = DbFacade.getInstance().getVmNumaNodeDAO().getAllVmNumaNodeByVmId(vm.getId()); + List<VdsNumaNode> totalVdsNumaNodes = DbFacade.getInstance().getVdsNumaNodeDAO() + .getAllVdsNumaNodeByVdsId(vdsId); + if (numaTune != null) { + Map<String, Object> numaTuneSetting = + NumaSettingFactory.buildVmNumatuneSetting(numaTune, vmNumaNodes, totalVdsNumaNodes); + if (!numaTuneSetting.isEmpty()) { + createInfo.put(VdsProperties.NUMA_TUNE, numaTuneSetting); + } + } + List<Map<String, Object>> createVmNumaNodes = NumaSettingFactory.buildVmNumaNodeSetting(vmNumaNodes); + if (!createVmNumaNodes.isEmpty()) { + createInfo.put(VdsProperties.VM_NUMA_NODES, createVmNumaNodes); + } + if (StringUtils.isEmpty(vm.getCpuPinning())) { + Map<String, Object> cpuPinDict = + NumaSettingFactory.buildCpuPinningWithNumaSetting(vmNumaNodes, totalVdsNumaNodes); + if (!cpuPinDict.isEmpty()) { + createInfo.put(VdsProperties.cpuPinning, cpuPinDict); + } + } + } + } + } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java index f4952f8..ac80bd4 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java @@ -6,11 +6,8 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.TimeZone; import org.apache.commons.lang.StringUtils; @@ -18,13 +15,10 @@ import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DisplayType; -import org.ovirt.engine.core.common.businessentities.NumaTuneMode; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VM; -import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDeviceId; -import org.ovirt.engine.core.common.businessentities.VmNumaNode; import org.ovirt.engine.core.common.businessentities.comparators.DiskImageByDiskAliasComparator; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; @@ -40,7 +34,6 @@ import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; -import org.ovirt.engine.core.utils.NumaUtils; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; @@ -149,8 +142,6 @@ createInfo.put(VdsProperties.transparent_huge_pages, vm.isTransparentHugePages() ? "true" : "false"); - addNumaSetting(compatibilityVersion); - if (vm.getDisplayType() == DisplayType.qxl) { createInfo.put(VdsProperties.spiceFileTransferEnable, Boolean.toString(vm.isSpiceFileTransferEnabled())); @@ -186,89 +177,6 @@ } createInfo.put(VdsProperties.cpuPinning, pinDict); } - } - - /** - * Numa will use the same compatibilityVersion as cpu pinning since - * numa may also add cpu pinning configuration and the two features - * have almost the same libvirt version support - * - * @param compatibilityVersion - */ - private void addNumaSetting(final String compatibilityVersion) { - if (Boolean.TRUE.equals(Config.<Boolean> getValue(ConfigValues.CpuPinningEnabled, - compatibilityVersion))) { - NumaTuneMode numaTune = vm.getNumaTuneMode() == null ? NumaTuneMode.PREFERRED : vm.getNumaTuneMode(); - List<VmNumaNode> vmNumaNodes = DbFacade.getInstance().getVmNumaNodeDAO().getAllVmNumaNodeByVmId(vm.getId()); - List<VdsNumaNode> totalVdsNumaNodes = DbFacade.getInstance().getVdsNumaNodeDAO() - .getAllVdsNumaNodeByVdsId(vm.getRunOnVds()); - List<Integer> totalVdsNumaNodesIndexes = NumaUtils.getNodeIndexList(totalVdsNumaNodes); - Map<String, Object> createNumaTune = new HashMap<>(2); - createNumaTune.put(VdsProperties.NUMA_TUNE_MODE, numaTune.getValue()); - boolean useAllVdsNodesMem = false; - Set<Integer> vmNumaNodePinInfo = new HashSet<>(); - if (!vmNumaNodes.isEmpty()) { - List<Map<String, Object>> createVmNumaNodes = new ArrayList<>(); - for (VmNumaNode node : vmNumaNodes) { - Map<String, Object> createVmNumaNode = new HashMap<>(); - createVmNumaNode.put(VdsProperties.NUMA_NODE_CPU_LIST, NumaUtils.buildStringFromListForNuma(node.getCpuIds())); - createVmNumaNode.put(VdsProperties.VM_NUMA_NODE_MEM, String.valueOf(node.getMemTotal())); - createVmNumaNodes.add(createVmNumaNode); - if (node.getVdsNumaNodeList().isEmpty()) { - useAllVdsNodesMem = true; - } - else { - vmNumaNodePinInfo.addAll(NumaUtils.getPinnedNodeIndexList(node.getVdsNumaNodeList())); - } - } - createInfo.put(VdsProperties.VM_NUMA_NODES, createVmNumaNodes); - } - else { - useAllVdsNodesMem = true; - } - if (useAllVdsNodesMem) { - if (!totalVdsNumaNodesIndexes.isEmpty()) { - createNumaTune.put(VdsProperties.NUMA_TUNE_NODESET, - NumaUtils.buildStringFromListForNuma(totalVdsNumaNodesIndexes)); - } - } - else { - if (!vmNumaNodePinInfo.isEmpty()) { - createNumaTune.put(VdsProperties.NUMA_TUNE_NODESET, - NumaUtils.buildStringFromListForNuma(vmNumaNodePinInfo)); - } - } - createInfo.put(VdsProperties.NUMA_TUNE, createNumaTune); - if (StringUtils.isEmpty(vm.getCpuPinning())) { - Map<String, Object> cpuPinDict = addCpuPinningForNumaSetting(vmNumaNodes, totalVdsNumaNodes); - if (!cpuPinDict.isEmpty()) { - createInfo.put(VdsProperties.cpuPinning, cpuPinDict); - } - } - } - } - - private Map<String, Object> addCpuPinningForNumaSetting(List<VmNumaNode> vmNodes, List<VdsNumaNode> vdsNodes) { - Map<Integer, List<Integer>> vdsNumaNodeCpus = new HashMap<>(); - Map<String, Object> cpuPinDict = new HashMap<>(); - for (VdsNumaNode node : vdsNodes) { - vdsNumaNodeCpus.put(node.getIndex(), node.getCpuIds()); - } - for (VmNumaNode node : vmNodes) { - List<Integer> pinnedNodeIndexes = NumaUtils.getPinnedNodeIndexList(node.getVdsNumaNodeList()); - if (!pinnedNodeIndexes.isEmpty()) { - Set <Integer> totalPinnedVdsCpus = new LinkedHashSet<>(); - for (Integer vCpu : node.getCpuIds()) { - for (Integer pinnedVdsNode : pinnedNodeIndexes) { - if (vdsNumaNodeCpus.containsKey(pinnedVdsNode)) { - totalPinnedVdsCpus.addAll(vdsNumaNodeCpus.get(pinnedVdsNode)); - } - } - cpuPinDict.put(String.valueOf(vCpu), NumaUtils.buildStringFromListForNuma(totalPinnedVdsCpus)); - } - } - } - return cpuPinDict; } protected void buildVmNetworkCluster() { @@ -429,6 +337,8 @@ protected abstract void buildVmVirtioSerial(); + protected abstract void buildVmNumaProperties(); + protected static enum VNIC_PROFILE_PROPERTIES { PORT_MIRRORING("Port Mirroring"), CUSTOM_PROPERTIES("Custom Properties"), @@ -451,4 +361,5 @@ } return vdsGroup; } + } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java index 28a3a66..96b3baa 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java @@ -269,4 +269,9 @@ protected void buildVmVirtioSerial() { // Not supported in old code } + + @Override + protected void buildVmNumaProperties() { + // Not supported in old code + } } diff --git a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactoryTest.java b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactoryTest.java new file mode 100644 index 0000000..2cbe249 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NumaSettingFactoryTest.java @@ -0,0 +1,131 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.NumaNodeStatistics; +import org.ovirt.engine.core.common.businessentities.NumaTuneMode; +import org.ovirt.engine.core.common.businessentities.VdsNumaNode; +import org.ovirt.engine.core.common.businessentities.VmNumaNode; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.compat.Guid; + +public class NumaSettingFactoryTest { + + private static NumaTuneMode numaTuneMode; + private static List<VdsNumaNode> vdsNumaNodes; + private static List<VmNumaNode> vmNumaNodes; + + @BeforeClass + public static void setUp() throws Exception { + numaTuneMode = NumaTuneMode.INTERLEAVE; + vdsNumaNodes = createTestVdsNumaNodes(); + vmNumaNodes = createTestVmNumaNodes(); + } + + @Test + public void testBuildVmNumaNodeSetting() throws Exception { + List<Map<String, Object>> vmNumaNodesSetting = + NumaSettingFactory.buildVmNumaNodeSetting(vmNumaNodes); + assertEquals(2, vmNumaNodesSetting.size()); + assertTrue(vmNumaNodesSetting.get(0).containsKey(VdsProperties.NUMA_NODE_CPU_LIST)); + assertEquals("0,1,2,3", vmNumaNodesSetting.get(0).get(VdsProperties.NUMA_NODE_CPU_LIST)); + assertTrue(vmNumaNodesSetting.get(1).containsKey(VdsProperties.VM_NUMA_NODE_MEM)); + assertEquals("1024", vmNumaNodesSetting.get(1).get(VdsProperties.VM_NUMA_NODE_MEM)); + } + + @Test + public void testBuildCpuPinningWithNumaSetting() throws Exception { + Map<String, Object> cpuPinning = + NumaSettingFactory.buildCpuPinningWithNumaSetting(vmNumaNodes, vdsNumaNodes); + assertEquals(8, cpuPinning.size()); + assertTrue(cpuPinning.containsKey("3")); + assertEquals("0,1,2,3", cpuPinning.get("3")); + assertTrue(cpuPinning.containsKey("7")); + assertEquals("4,5,6,7", cpuPinning.get("7")); + } + + @Test + public void testBuildVmNumatuneSetting() throws Exception { + Map<String, Object> numaTune = + NumaSettingFactory.buildVmNumatuneSetting(numaTuneMode, vmNumaNodes, vdsNumaNodes); + assertEquals(2, numaTune.size()); + assertTrue(numaTune.containsKey(VdsProperties.NUMA_TUNE_MODE)); + assertEquals(NumaTuneMode.INTERLEAVE.getValue(), numaTune.get(VdsProperties.NUMA_TUNE_MODE)); + assertTrue(numaTune.containsKey(VdsProperties.NUMA_TUNE_NODESET)); + assertEquals("0,1", numaTune.get(VdsProperties.NUMA_TUNE_NODESET)); + } + + private static List<VmNumaNode> createTestVmNumaNodes() { + + List<VmNumaNode> newVmNodes = new ArrayList<>(); + VmNumaNode newVmNumaNode = new VmNumaNode(); + newVmNumaNode.setCpuIds(generateCpuList(0, 4)); + newVmNumaNode.setId(Guid.newGuid()); + newVmNumaNode.setIndex(0); + newVmNumaNode.setMemTotal(1024); + newVmNumaNode.getVdsNumaNodeList().add(new Pair<>(Guid.newGuid(), new Pair<>(true, 0))); + newVmNodes.add(newVmNumaNode); + + newVmNumaNode = new VmNumaNode(); + newVmNumaNode.setCpuIds(generateCpuList(4, 4)); + newVmNumaNode.setId(Guid.newGuid()); + newVmNumaNode.setIndex(1); + newVmNumaNode.setMemTotal(1024); + newVmNumaNode.getVdsNumaNodeList().add(new Pair<>(Guid.newGuid(), new Pair<>(true, 1))); + newVmNodes.add(newVmNumaNode); + + return newVmNodes; + } + + private static List<VdsNumaNode> createTestVdsNumaNodes() { + + NumaNodeStatistics newNodeStatistics = new NumaNodeStatistics(); + newNodeStatistics.setCpuUsagePercent(20); + newNodeStatistics.setMemUsagePercent(50); + + List<VdsNumaNode> newVdsNodes = new ArrayList<>(); + + VdsNumaNode newVdsNumaNode= new VdsNumaNode(); + newVdsNumaNode.setCpuIds(generateCpuList(0, 4)); + newVdsNumaNode.setId(Guid.newGuid()); + newVdsNumaNode.setIndex(0); + newVdsNumaNode.setNumaNodeDistances(generateDistance(2, 0)); + newVdsNumaNode.setNumaNodeStatistics(newNodeStatistics); + newVdsNodes.add(newVdsNumaNode); + + newVdsNumaNode= new VdsNumaNode(); + newVdsNumaNode.setCpuIds(generateCpuList(4, 4)); + newVdsNumaNode.setId(Guid.newGuid()); + newVdsNumaNode.setIndex(1); + newVdsNumaNode.setNumaNodeDistances(generateDistance(2, 1)); + newVdsNumaNode.setNumaNodeStatistics(newNodeStatistics); + newVdsNodes.add(newVdsNumaNode); + + return newVdsNodes; + } + + private static List<Integer> generateCpuList(int fromIndex, int count) { + List<Integer> cpuList = new ArrayList<>(count); + for (int i = fromIndex; i < (fromIndex + count); i++) { + cpuList.add(i); + } + return cpuList; + } + + private static Map<Integer, Integer> generateDistance(int nodeCount, int selfNodeIndex) { + Map<Integer, Integer> distance = new HashMap<>(nodeCount); + for (int i = 0; i < nodeCount; i++) { + distance.put(i, (Math.abs(selfNodeIndex - i) + 1) * 10); + } + return distance; + } + +} -- To view, visit http://gerrit.ovirt.org/33183 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I19be54812d0ebbb54145f33e6b036af84ff1d8ae Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> Gerrit-Reviewer: Xiaolei Shi <xiao-lei....@hp.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches