package org.ovirt.engine.ui.uicommonweb.builders.vm; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmNumaNode; import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; public class NumaUnitToVmBaseBuilder<T extends VmBase> extends BaseSyncBuilder<UnitVmModel, T> { @Override protected void build(UnitVmModel model, VmBase vm) { // Tune Mode: vm.setNumaTuneMode(model.getNumaTuneMode().getSelectedItem()); // Virtual nodes: Integer nodeCount = model.getNumaNodeCount().getEntity(); // clear NUMA nodes if (nodeCount == null || nodeCount == 0) { vm.setvNumaNodeList(null); } else { List<VmNumaNode> nodeList = null; if (model.getVmNumaNodes() != null && nodeCount == model.getVmNumaNodes().size()) { nodeList = model.getVmNumaNodes(); } else { nodeList = new ArrayList<>(nodeCount); for (int i = 0; i < nodeCount; i++) { VmNumaNode newNode = new VmNumaNode(); newNode.setIndex(i); nodeList.add(newNode); } } Integer cpuCount = 0; for (int i = 0; i < nodeList.size(); i++) { VmNumaNode vmNumaNode = nodeList.get(i); updateMemory(vmNumaNode, model.getMemSize().getEntity() / nodeCount); cpuCount = updateCpus(vmNumaNode, Integer.parseInt(model.getTotalCPUCores().getEntity()) / nodeCount, cpuCount); } vm.setvNumaNodeList(nodeList); } } private void updateMemory(VmNumaNode vmNumaNode, int memSize) { vmNumaNode.setMemTotal(memSize); } private Integer updateCpus(VmNumaNode vmNumaNode, int coresPerNode, Integer cpuCount) { List<Integer> coreList = new ArrayList<>(); for (int j = 0; j < coresPerNode; j++, cpuCount++) { coreList.add(cpuCount); } vmNumaNode.setCpuIds(coreList); return cpuCount; } }