Jiří Moskovčák has uploaded a new change for review.

Change subject: engine: clear the pending memory when destroying paused VM
......................................................................

engine: clear the pending memory when destroying paused VM

Change-Id: I1de34ac8b0b6e48d360161d8f0ff8d1fe4f6fd04
Bug-Url: https://bugzilla.redhat.com/1049318
Signed-off-by: Jiri Moskovcak <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
3 files changed, 42 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/25271/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
index ace2708..9bbc394 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
@@ -6,7 +6,6 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.lang.StringUtils;
@@ -24,7 +23,6 @@
 import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
-import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.config.Config;
@@ -39,12 +37,10 @@
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
-import org.ovirt.engine.core.dao.VdsDynamicDAO;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
-import org.ovirt.engine.core.vdsbroker.VdsMonitor;
 
 /**
  * Base class for asynchronous running process handling
@@ -295,23 +291,6 @@
         return true;
     }
 
-    protected void decreasePendingVms(Guid vdsId) {
-        VM vm = getVm();
-        decreasePendingVms(vdsId, vm.getNumOfCpus(), vm.getMinAllocatedMem(), 
vm.getName());
-    }
-
-    private void decreasePendingVms(Guid vdsId, int numOfCpus, int 
minAllocatedMem, String vmName) {
-        getVdsDynamicDao().updatePartialVdsDynamicCalc(vdsId, 0, -numOfCpus, 
-minAllocatedMem, 0, 0);
-        getBlockingQueue(vdsId).offer(Boolean.TRUE);
-
-        log.debugFormat("Decreasing vds {0} pending vcpu count by {1} and vmem 
size by {2} (Vm: {3})",
-                vdsId, numOfCpus, minAllocatedMem, vmName);
-    }
-
-    protected VdsDynamicDAO getVdsDynamicDao() {
-        return DbFacade.getInstance().getVdsDynamicDao();
-    }
-
     /**
      * throttle bulk run of VMs by waiting for the update of run-time to kick 
in and fire <br>
      * the DecreasePendingVms event.
@@ -335,20 +314,6 @@
         } catch (InterruptedException e) {
             // ignore
         }
-    }
-
-    private BlockingQueue<Boolean> getBlockingQueue(Guid vdsId) {
-        return getMonitor(vdsId).getQueue();
-    }
-
-    /**
-     * get the monitor object of this host. VDSs have monitors exposed by 
their {@link org.ovirt.engine.core.vdsbroker.VdsManager}
-     *
-     * @param vdsId
-     * @return {@link org.ovirt.engine.core.vdsbroker.VdsMonitor} for 
signaling on thread actions
-     */
-    private VdsMonitor getMonitor(Guid vdsId) {
-        return 
ResourceManager.getInstance().GetVdsManager(vdsId).getVdsMonitor();
     }
 
     /**
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java
index dc03f20..e62ef07 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java
@@ -22,6 +22,7 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
+import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.common.utils.Pair;
@@ -81,6 +82,11 @@
                                     getVmId(), true, false, 0));
         }
 
+        if (getVm().getStatus() == VMStatus.Paused) {
+            VmStatic vmStatic = getVm().getStaticData();
+            decreasePendingVms(getVm().getRunOnVds(), vmStatic.getNumOfCpus(),
+                    vmStatic.getMinAllocatedMem(), vmStatic.getName());
+        }
         setActionReturnValue(Backend
                 .getInstance()
                 .getResourceManager()
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
index f0b77c8..4a95493 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.BlockingQueue;
 
 import org.ovirt.engine.core.bll.network.MacPoolManager;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
@@ -33,10 +34,12 @@
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.DiskDao;
 import org.ovirt.engine.core.dao.DiskImageDAO;
 import org.ovirt.engine.core.dao.ImageDao;
 import org.ovirt.engine.core.dao.TagDAO;
+import org.ovirt.engine.core.dao.VdsDynamicDAO;
 import org.ovirt.engine.core.dao.VmDeviceDAO;
 import org.ovirt.engine.core.dao.VmDynamicDAO;
 import org.ovirt.engine.core.dao.network.VmNicDao;
@@ -45,6 +48,8 @@
 import org.ovirt.engine.core.utils.customprop.VmPropertiesUtils;
 import org.ovirt.engine.core.utils.linq.LinqUtils;
 import org.ovirt.engine.core.utils.linq.Predicate;
+import org.ovirt.engine.core.vdsbroker.ResourceManager;
+import org.ovirt.engine.core.vdsbroker.VdsMonitor;
 import org.springframework.util.CollectionUtils;
 
 public abstract class VmCommand<T extends VmOperationParameterBase> extends 
CommandBase<T> {
@@ -541,4 +546,35 @@
         }
         return true;
     }
+
+    protected void decreasePendingVms(Guid vdsId) {
+        VM vm = getVm();
+        decreasePendingVms(vdsId, vm.getNumOfCpus(), vm.getMinAllocatedMem(), 
vm.getName());
+    }
+
+    protected void decreasePendingVms(Guid vdsId, int numOfCpus, int 
minAllocatedMem, String vmName) {
+        getVdsDynamicDao().updatePartialVdsDynamicCalc(vdsId, 0, -numOfCpus, 
-minAllocatedMem, 0, 0);
+        getBlockingQueue(vdsId).offer(Boolean.TRUE);
+
+        log.debugFormat("Decreasing vds {0} pending vcpu count by {1} and vmem 
size by {2} (Vm: {3})",
+                vdsId, numOfCpus, minAllocatedMem, vmName);
+    }
+
+    protected VdsDynamicDAO getVdsDynamicDao() {
+        return DbFacade.getInstance().getVdsDynamicDao();
+    }
+
+    protected BlockingQueue<Boolean> getBlockingQueue(Guid vdsId) {
+        return getMonitor(vdsId).getQueue();
+    }
+
+    /**
+     * get the monitor object of this host. VDSs have monitors exposed by 
their {@link org.ovirt.engine.core.vdsbroker.VdsManager}
+     *
+     * @param vdsId
+     * @return {@link org.ovirt.engine.core.vdsbroker.VdsMonitor} for 
signaling on thread actions
+     */
+    private VdsMonitor getMonitor(Guid vdsId) {
+        return 
ResourceManager.getInstance().GetVdsManager(vdsId).getVdsMonitor();
+    }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1de34ac8b0b6e48d360161d8f0ff8d1fe4f6fd04
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Jiří Moskovčák <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to