Xiaolei Shi has uploaded a new change for review.

Change subject: core: Collect vm numa node runtime information
......................................................................

core: Collect vm numa node runtime information

Collect vm numa node runtime pinning to which host numa nodes data.

Change-Id: I9d2c1dd03e0cc2f7d0ed9593e6ff889712894ac7
Bug-Url: https://bugzilla.redhat.com/1100202
Signed-off-by: Bruce Shi <xiao-lei....@hp.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsNumaNodeDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNumaNodeDAOTest.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
M packaging/dbscripts/numa_sp.sql
9 files changed, 224 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/96/28096/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java
index f747804..a7bb703 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.common.businessentities;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import 
org.ovirt.engine.core.common.businessentities.comparators.BusinessEntityGuidComparator;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
@@ -13,6 +14,8 @@
     private Double cpu_sysField;
     // NOT PERSISTED
     private VmBalloonInfo vmBalloonInfo;
+    // NOT PERSISTED
+    private List<VmNumaNode> vNumaNodeStatisticsList;
 
     public VmStatistics() {
         cpu_sysField = 0.0;
@@ -20,6 +23,7 @@
         elapsed_timeField = 0.0;
         roundedElapsedTimeField = 0.0;
         vm_guidField = Guid.Empty;
+        vNumaNodeStatisticsList = new ArrayList<VmNumaNode>();
     }
 
     @Override
@@ -37,6 +41,7 @@
         result = prime * result + ((migrationProgressPercent == null) ? 0 : 
migrationProgressPercent.hashCode());
         result = prime * result + ((disksUsage == null) ? 0 : 
disksUsage.hashCode());
         result = prime * result + ((vm_guidField == null) ? 0 : 
vm_guidField.hashCode());
+        result = prime * result + ((vNumaNodeStatisticsList == null) ? 0 : 
vNumaNodeStatisticsList.hashCode());
         return result;
     }
 
@@ -62,7 +67,8 @@
                 && ObjectUtils.objectsEqual(migrationProgressPercent, 
other.migrationProgressPercent)
                 && ObjectUtils.objectsEqual(usage_network_percentField, 
other.usage_network_percentField)
                 && ObjectUtils.objectsEqual(disksUsage, other.disksUsage)
-                && ObjectUtils.objectsEqual(vm_guidField, other.vm_guidField));
+                && ObjectUtils.objectsEqual(vm_guidField, other.vm_guidField)
+                && ObjectUtils.objectsEqual(vNumaNodeStatisticsList, 
other.vNumaNodeStatisticsList));
     }
 
     public Double getcpu_sys() {
@@ -209,4 +215,12 @@
     public void setVmBalloonInfo(VmBalloonInfo vmBalloonInfo) {
         this.vmBalloonInfo = vmBalloonInfo;
     }
+
+    public List<VmNumaNode> getvNumaNodeStatisticsList() {
+        return vNumaNodeStatisticsList;
+    }
+
+    public void setvNumaNodeStatisticsList(List<VmNumaNode> 
vNumaNodeStatisticsList) {
+        this.vNumaNodeStatisticsList = vNumaNodeStatisticsList;
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsNumaNodeDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsNumaNodeDAODbFacadeImpl.java
index 617a885..bd999ff 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsNumaNodeDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsNumaNodeDAODbFacadeImpl.java
@@ -153,7 +153,7 @@
                 .addValue("cpu_core_id", cpuId);
     }
 
-    private MapSqlParameterSource createVnodeToPnodeParametersMapper(
+    protected MapSqlParameterSource createVnodeToPnodeParametersMapper(
             Pair<Guid, Pair<Boolean, Integer>> pNode, Guid vNodeId) {
         return getCustomMapSqlParameterSource()
                 .addValue("id", Guid.newGuid())
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAO.java
index 4dffbf9..3505562 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAO.java
@@ -49,4 +49,13 @@
      */
     List<Pair<Guid, Integer>> getPinnedNumaNodeIndex(Guid vmId);
 
+    /**
+     * Update vm numa node runtime pinning data of the given list of numa 
nodes using a more
+     * efficient method to update all of them at once, rather than each at a 
time.
+     *
+     * @param vmNumaNodes
+     *            the vm numa nodes to be updated
+     */
+    void massUpdateVmNumaNodeRuntimePinning(List<VmNumaNode> vmNumaNodes);
+
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAODbFacadeImpl.java
index cb3d5ee..3b951a7 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNumaNodeDAODbFacadeImpl.java
@@ -232,4 +232,18 @@
                 vNodePinToPnodeRowMapper, parameterSource);
     }
 
+    @Override
+    public void massUpdateVmNumaNodeRuntimePinning(List<VmNumaNode> 
vmNumaNodes) {
+        List<MapSqlParameterSource> vNodeToPnodeDeletions = new ArrayList<>();
+        List<MapSqlParameterSource> vNodeToPnodeInsertions = new ArrayList<>();
+        for (VmNumaNode node : vmNumaNodes) {
+            
vNodeToPnodeDeletions.add(getCustomMapSqlParameterSource().addValue("vm_numa_node_id",
 node.getId()));
+            for (Pair<Guid, Pair<Boolean, Integer>> pair : 
node.getVdsNumaNodeList()) {
+                
vNodeToPnodeInsertions.add(createVnodeToPnodeParametersMapper(pair, 
node.getId()));
+            }
+        }
+        
getCallsHandler().executeStoredProcAsBatch("DeleteUnpinnedNumaNodeMapByVmNumaNodeId",
 vNodeToPnodeDeletions);
+        getCallsHandler().executeStoredProcAsBatch("InsertNumaNodeMap", 
vNodeToPnodeInsertions);
+    }
+
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNumaNodeDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNumaNodeDAOTest.java
index f524604..4256294 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNumaNodeDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNumaNodeDAOTest.java
@@ -267,6 +267,88 @@
         assertEquals(0, result.size());
     }
 
+    @Test
+    public void testMassUpdateVmNumaNodeRuntimePinning() {
+        List<VmNumaNode> result = 
vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID);
+        assertNotNull(result);
+        assertEquals(0, result.size());
+
+        Guid vdsNumaNode1 = new Guid("3c2b81e6-5080-4ad1-86a1-cf513b15b515");
+        Guid vdsNumaNode2 = new Guid("3c2b81e6-5080-4ad1-86a1-cf513b15b516");
+        Guid vmNumaNode1 = Guid.newGuid();
+        Guid vmNumaNode2 = Guid.newGuid();
+
+        List<VdsNumaNode> newVmNode = new ArrayList<>();
+        VmNumaNode newVmNumaNode = new VmNumaNode();
+        newVmNumaNode.setCpuIds(generateCpuList(0, 4));
+        newVmNumaNode.setId(vmNumaNode1);
+        newVmNumaNode.setIndex(0);
+        newVmNumaNode.setNumaNodeDistances(generateDistance(2, 0));
+        newVmNumaNode.setNumaNodeStatistics(newNodeStatistics);
+        newVmNumaNode.getVdsNumaNodeList().add(new Pair<>(vdsNumaNode1, new 
Pair<>(false, 0)));
+        newVmNode.add(newVmNumaNode);
+
+        newVmNumaNode = new VmNumaNode();
+        newVmNumaNode.setCpuIds(generateCpuList(4, 4));
+        newVmNumaNode.setId(vmNumaNode2);
+        newVmNumaNode.setIndex(1);
+        newVmNumaNode.setNumaNodeDistances(generateDistance(2, 1));
+        newVmNumaNode.setNumaNodeStatistics(newNodeStatistics);
+        newVmNumaNode.getVdsNumaNodeList().add(new Pair<>(vdsNumaNode2, new 
Pair<>(false, 1)));
+        newVmNode.add(newVmNumaNode);
+
+        vmNumaNodeDao.massSaveNumaNode(newVmNode, null, 
ANOTHER_EXISTING_VM_ID);
+        result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID);
+        assertNotNull(result);
+        assertEquals(2, result.size());
+
+        Map<Guid, VmNumaNode> nodes = new HashMap<>(2);
+        nodes.put(result.get(0).getId(), result.get(0));
+        nodes.put(result.get(1).getId(), result.get(1));
+
+        nodes.get(vmNumaNode1).getVdsNumaNodeList().clear();
+        nodes.get(vmNumaNode1).getVdsNumaNodeList().add(new 
Pair<>(vdsNumaNode2, new Pair<>(false, 1)));
+
+        nodes.get(vmNumaNode2).getVdsNumaNodeList().clear();
+        nodes.get(vmNumaNode2).getVdsNumaNodeList().add(new 
Pair<>(vdsNumaNode1, new Pair<>(false, 0)));
+
+        List<VmNumaNode> updateNodes = new ArrayList<>();
+        updateNodes.add(nodes.get(vmNumaNode1));
+        updateNodes.add(nodes.get(vmNumaNode2));
+
+        vmNumaNodeDao.massUpdateVmNumaNodeRuntimePinning(updateNodes);
+
+        result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID);
+        assertNotNull(result);
+        assertEquals(2, result.size());
+
+        nodes.clear();
+        nodes.put(result.get(0).getId(), result.get(0));
+        nodes.put(result.get(1).getId(), result.get(1));
+
+        assertTrue(nodes.containsKey(vmNumaNode1));
+        assertTrue(nodes.containsKey(vmNumaNode2));
+
+        assertEquals(1, nodes.get(vmNumaNode1).getVdsNumaNodeList().size());
+        assertEquals(false, 
nodes.get(vmNumaNode1).getVdsNumaNodeList().get(0).getSecond().getFirst());
+        assertEquals(vdsNumaNode2, 
nodes.get(vmNumaNode1).getVdsNumaNodeList().get(0).getFirst());
+        assertEquals(1, 
nodes.get(vmNumaNode1).getVdsNumaNodeList().get(0).getSecond().getSecond().intValue());
+
+        assertEquals(1, nodes.get(vmNumaNode2).getVdsNumaNodeList().size());
+        assertEquals(false, 
nodes.get(vmNumaNode2).getVdsNumaNodeList().get(0).getSecond().getFirst());
+        assertEquals(vdsNumaNode1, 
nodes.get(vmNumaNode2).getVdsNumaNodeList().get(0).getFirst());
+        assertEquals(0, 
nodes.get(vmNumaNode2).getVdsNumaNodeList().get(0).getSecond().getSecond().intValue());
+
+        List<Guid> vmNodeList = new ArrayList<Guid>();
+        vmNodeList.add(vmNumaNode1);
+        vmNodeList.add(vmNumaNode2);
+        vmNumaNodeDao.massRemoveNumaNodeByNumaNodeId(vmNodeList);
+
+        result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID);
+        assertNotNull(result);
+        assertEquals(0, result.size());
+    }
+
     private List<Integer> generateCpuList(int fromIndex, int count) {
         List<Integer> cpuList = new ArrayList<>(count);
         for (int i = fromIndex; i < (fromIndex + count); i++) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
index 5a7f128..5ad3d4a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
@@ -47,6 +47,7 @@
 import org.ovirt.engine.core.common.businessentities.VmExitReason;
 import org.ovirt.engine.core.common.businessentities.VmExitStatus;
 import org.ovirt.engine.core.common.businessentities.VmGuestAgentInterface;
+import org.ovirt.engine.core.common.businessentities.VmNumaNode;
 import org.ovirt.engine.core.common.businessentities.VmPauseStatus;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmStatistics;
@@ -75,6 +76,7 @@
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.utils.NetworkUtils;
+import org.ovirt.engine.core.utils.NumaUtils;
 import org.ovirt.engine.core.utils.ObjectIdentityChecker;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
@@ -194,7 +196,27 @@
         getDbFacade().getLunDao().updateAllInBatch(vmLunDisksToSave);
         saveVmDevicesToDb();
         saveVmGuestAgentNetworkDevices();
+        saveVmNumaNodeRuntimeData();
         getVdsEventListener().addExternallyManagedVms(_externalVmsToAdd);
+    }
+
+    private void saveVmNumaNodeRuntimeData() {
+        if (!_vmStatisticsToSave.isEmpty()) {
+            final List<VmNumaNode> vmNumaNodesToUpdate = new ArrayList<>();
+            for(VmStatistics vmStats : _vmStatisticsToSave.values()) {
+                
vmNumaNodesToUpdate.addAll(vmStats.getvNumaNodeStatisticsList());
+            }
+            if (!vmNumaNodesToUpdate.isEmpty()) {
+                
TransactionSupport.executeInScope(TransactionScopeOption.Required,
+                        new TransactionMethod<Void>() {
+                            @Override
+                            public Void runInTransaction() {
+                                
getDbFacade().getVmNumaNodeDAO().massUpdateVmNumaNodeRuntimePinning(vmNumaNodesToUpdate);
+                                return null;
+                            }
+                        });
+            }
+        }
     }
 
     private void saveVmGuestAgentNetworkDevices() {
@@ -1960,6 +1982,7 @@
         if (_vdsManager.getRefreshStatistics()) {
             VmStatistics vmStatistics = 
_runningVms.get(vmToUpdate.getId()).getVmStatistics();
             vmToUpdate.updateRunTimeStatisticsData(vmStatistics, vmToUpdate);
+            updateVmNumaNodeRuntimeInfo(vmStatistics, vmToUpdate);
             addVmStatisticsToList(vmToUpdate.getStatisticsData());
             updateInterfaceStatistics(vmToUpdate, vmStatistics);
 
@@ -1978,6 +2001,44 @@
         }
     }
 
+    private void updateVmNumaNodeRuntimeInfo(VmStatistics statistics, VM vm) {
+        if (vm.getRunOnVds() == null) {
+            return;
+        }
+        List<VdsNumaNode> runOnVdsAllNumaNodes = 
getDbFacade().getVdsNumaNodeDAO().getAllVdsNumaNodeByVdsId(vm.getRunOnVds());
+        List<VmNumaNode> vmAllNumaNodes = 
getDbFacade().getVmNumaNodeDAO().getAllVmNumaNodeByVmId(vm.getId());
+        Map<Integer, VdsNumaNode> runOnVdsAllNumaNodesMap = new HashMap<>();
+        Map<Integer, VmNumaNode> vmAllNumaNodesMap = new HashMap<>();
+        for (VdsNumaNode vdsNumaNode : runOnVdsAllNumaNodes) {
+            runOnVdsAllNumaNodesMap.put(vdsNumaNode.getIndex(), vdsNumaNode);
+        }
+        for (VmNumaNode vmNumaNode : vmAllNumaNodes) {
+            vmAllNumaNodesMap.put(vmNumaNode.getIndex(), vmNumaNode);
+        }
+        List<VmNumaNode> vmNumaNodesNeedUpdate = new ArrayList<>();
+        for (VmNumaNode vNode : statistics.getvNumaNodeStatisticsList()) {
+            VmNumaNode dbVmNumaNode = vmAllNumaNodesMap.get(vNode.getIndex());
+            if (dbVmNumaNode != null) {
+                vNode.setId(dbVmNumaNode.getId());
+                List<Integer> pinnedNodes = 
NumaUtils.getPinnedNodeIndexList(dbVmNumaNode.getVdsNumaNodeList());
+                List<Pair<Guid, Pair<Boolean, Integer>>> runTimePinList = new 
ArrayList<>();
+                for (Pair<Guid, Pair<Boolean, Integer>> pair : 
vNode.getVdsNumaNodeList()){
+                    if ((!pinnedNodes.contains(pair.getSecond().getSecond())) 
&&
+                            
(runOnVdsAllNumaNodesMap.containsKey(pair.getSecond().getSecond()))) {
+                        
pair.setFirst(runOnVdsAllNumaNodesMap.get(pair.getSecond().getSecond()).getId());
+                        pair.getSecond().setFirst(false);
+                        runTimePinList.add(pair);
+                    }
+                }
+                vNode.setVdsNumaNodeList(runTimePinList);
+                if (!vNode.getVdsNumaNodeList().isEmpty()) {
+                    vmNumaNodesNeedUpdate.add(vNode);
+                }
+            }
+        }
+        
vm.getStatisticsData().getvNumaNodeStatisticsList().addAll(vmNumaNodesNeedUpdate);
+    }
+
     private void updateInterfaceStatistics(VM vm, VmStatistics statistics) {
         if (statistics.getInterfaceStatistics() == null) {
             return;
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
index 3a2950e..6d7e9e0 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
@@ -40,6 +40,7 @@
 import org.ovirt.engine.core.common.businessentities.VmExitReason;
 import org.ovirt.engine.core.common.businessentities.VmExitStatus;
 import org.ovirt.engine.core.common.businessentities.VmGuestAgentInterface;
+import org.ovirt.engine.core.common.businessentities.VmNumaNode;
 import org.ovirt.engine.core.common.businessentities.VmPauseStatus;
 import org.ovirt.engine.core.common.businessentities.VmStatistics;
 import org.ovirt.engine.core.common.businessentities.network.InterfaceStatus;
@@ -52,6 +53,7 @@
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.utils.EnumUtils;
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.utils.SizeConverter;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.RpmVersion;
@@ -362,6 +364,11 @@
         // ------------- vm migration statistics -----------------------
         Integer migrationProgress = AssignIntValue(xmlRpcStruct, 
VdsProperties.vm_migration_progress_percent);
         vm.setMigrationProgressPercent(migrationProgress != null ? 
migrationProgress : 0);
+
+        // ------------- vm numa nodes runtime info -------------------------
+        if 
(xmlRpcStruct.containsKey(VdsProperties.VM_NUMA_NODES_RUNTIME_INFO)) {
+            updateVmNumaNodesRuntimeInfo(vm, xmlRpcStruct);
+        }
     }
 
     private static VmBalloonInfo getBalloonInfo(Map<String, Object> 
xmlRpcStruct) {
@@ -1593,6 +1600,25 @@
 
     }
 
+    /**
+     * Build through the received vm NUMA nodes runtime information
+     * @param vm
+     * @param xmlRpcStruct
+     */
+    private static void updateVmNumaNodesRuntimeInfo(VmStatistics vm, 
Map<String, Object> xmlRpcStruct) {
+        Map<String, Object[]> vNodesRunInfo = (Map<String, 
Object[]>)xmlRpcStruct.get(
+                VdsProperties.VM_NUMA_NODES_RUNTIME_INFO);
+        for (Map.Entry<String, Object[]> item : vNodesRunInfo.entrySet()) {
+            VmNumaNode vNode = new VmNumaNode();
+            vNode.setIndex(Integer.valueOf(item.getKey()));
+            for (Object pNodeIndex : item.getValue()) {
+                vNode.getVdsNumaNodeList().add(new Pair<>(
+                        Guid.Empty, new Pair<>(false, (Integer)pNodeIndex)));
+            }
+            vm.getvNumaNodeStatisticsList().add(vNode);
+        }
+    }
+
     private static List<String> extracStringtList(Map<String, Object> 
xmlRpcStruct, String propertyName) {
         if (!xmlRpcStruct.containsKey(propertyName)){
             return null;
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
index e469c36..ed3b1d1 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
@@ -101,6 +101,7 @@
     public static final String VM_NUMA_NODE_MEM = "memory";
     public static final String NUMA_TUNE = "numaTune";
     public static final String VM_NUMA_NODES = "guestNumaNodes";
+    public static final String VM_NUMA_NODES_RUNTIME_INFO = "vNodeRuntimeInfo";
 
     // Network related properties
     public static final String NETWORK = "network";
diff --git a/packaging/dbscripts/numa_sp.sql b/packaging/dbscripts/numa_sp.sql
index 152c070..0e4ad88 100644
--- a/packaging/dbscripts/numa_sp.sql
+++ b/packaging/dbscripts/numa_sp.sql
@@ -267,6 +267,21 @@
 
 
 
+Create or replace FUNCTION 
DeleteUnpinnedNumaNodeMapByVmNumaNodeId(v_vm_numa_node_id UUID)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+   BEGIN
+      DELETE FROM vm_vds_numa_node_map
+      WHERE vm_numa_node_id = v_vm_numa_node_id AND is_pinned = FALSE;
+   END;
+
+   RETURN;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
 ----------------------------------------------------------------
 -- [numa_node_cpus_view] View
 --


-- 
To view, visit http://gerrit.ovirt.org/28096
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9d2c1dd03e0cc2f7d0ed9593e6ff889712894ac7
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Xiaolei Shi <xiao-lei....@hp.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to