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
