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

Reply via email to