Michael Kublin has uploaded a new change for review. Change subject: engine: Compare and set instead of updateVdsDynamic in VM scenarious ......................................................................
engine: Compare and set instead of updateVdsDynamic in VM scenarious The following patch should solve a following problems: 1. Deadlock between RunVmCommandBase.decreasePendingVms and VdsUpdateRuntimeInfo.AfterRefreshTreatment line with code: ResourceManager.getInstance().getEventListener().processOnVmPoweringUp(...); 2. Replace get for vds dynamic , update some values, and after that update in db by single db update. The old way creates a dirty state fot host status field, fix will reduce a noise in host life cycle scenarios 3. Performance improved: less db access, less locks acquired, no deadlocks What is not solved (problems which were before and should be solved in next patches) 1. Race between VdsManager.OnTimer() and RunVmCommandBase.decreasePendingVms() 2. RunVmDelayer.evaluated can be based on not updated data 3. Interaction of loop over ResourceManager.getInstance().getEventListener().processOnVmPoweringUp(...) inside VdsUpdateRuntimeInfo.AfterRefreshTreatment with RunVmCommands - it is a war for locks, or "code of death" for all system during RunVm scenarious Change-Id: I363afc5c3411b0c13e6d6c9ed5b16004738b6ca7 Signed-off-by: Michael Kublin <mkub...@redhat.com> --- M backend/manager/dbscripts/vds_sp.sql M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsDynamic.java D backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVdsDynamicDataVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDynamicDAOTest.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java D backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/UpdateVdsDynamicDataVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java 13 files changed, 143 insertions(+), 171 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/82/13682/1 diff --git a/backend/manager/dbscripts/vds_sp.sql b/backend/manager/dbscripts/vds_sp.sql index 80d1994..84309f0 100644 --- a/backend/manager/dbscripts/vds_sp.sql +++ b/backend/manager/dbscripts/vds_sp.sql @@ -908,6 +908,37 @@ END; $procedure$ LANGUAGE plpgsql; +Create or replace FUNCTION UpdateSmartUpdatePartialVds( + v_vds_guid UUID, + v_vmCount INTEGER, + v_pendingVcpusCount INTEGER, + v_pendingVmemSize INTEGER, + v_memCommited INTEGER, + v_vmsCoresCount INTEGER) +RETURNS VOID + AS $procedure$ +DECLARE + sign int; +BEGIN + IF (v_memCommited = 0 ) THEN + sign = 0; + ELSEIF (v_memCommited > 0) THEN + sign = 1; + ELSE + sign = -1; + END IF; + + UPDATE vds_dynamic + SET + vm_count = GREATEST(vm_count + v_vmCount, 0), + pending_vcpus_count = GREATEST(pending_vcpus_count + v_pendingVcpusCount, 0), + pending_vmem_size = GREATEST(pending_vmem_size + v_pendingVmemSize, 0), + mem_commited = GREATEST(mem_commited + sign * (abs(v_memCommited) + guest_overhead), 0), + vms_cores_count = GREATEST(vms_cores_count + v_vmsCoresCount, 0) + WHERE vds_id = v_vds_guid; +END; $procedure$ +LANGUAGE plpgsql; + Create or replace FUNCTION GetVdsByNetworkId(v_network_id UUID) RETURNS SETOF vds AS $procedure$ BEGIN 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 04a8b34..4f426db 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 @@ -33,7 +33,6 @@ import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.FailedToRunVmVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.UpdateVdsDynamicDataVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.UpdateVmDynamicDataVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.Guid; @@ -326,50 +325,15 @@ protected void decreasePendingVms(Guid vdsId) { getDecreaseLock(vdsId).lock(); try { - boolean updateDynamic = false; - VDS vds = DbFacade.getInstance().getVdsDao().get(vdsId); - if (vds == null) - return; - // VCPU - if (vds.getPendingVcpusCount() != null && !vds.getPendingVcpusCount().equals(0)) { - vds.setPendingVcpusCount(vds.getPendingVcpusCount() - getVm().getNumOfCpus()); - updateDynamic = true; - } else if (log.isDebugEnabled()) { - log.debugFormat( - "DecreasePendingVms::Decreasing vds {0} pending vcpu count failed, its already 0 or null", - vds.getName(), getVm().getName()); - } - // VMEM - if (vds.getPendingVmemSize() > 0) { - // decrease min memory assigned, because it is already taken in account when VM is up - updateDynamic = true; - if (vds.getPendingVmemSize() >= getVm().getMinAllocatedMem()) { - vds.setPendingVmemSize(vds.getPendingVmemSize() - getVm().getMinAllocatedMem()); - } else { - if (log.isDebugEnabled()) { - log.debugFormat("Pending host {0} vmem {1} is smaller than VM min allocated memory {2},Setting pending host vmem to 0.", - vds.getName(), - vds.getPendingVmemSize(), - getVm().getMinAllocatedMem()); - } - vds.setPendingVmemSize(0); - } - } else if (log.isDebugEnabled()) { - log.debugFormat( - "DecreasePendingVms::Decreasing vds {0} pending vmem size failed, its already 0 or null", - vds.getName(), getVm().getName()); - } - if (updateDynamic) { - Backend.getInstance() - .getResourceManager() - .RunVdsCommand(VDSCommandType.UpdateVdsDynamicData, - new UpdateVdsDynamicDataVDSCommandParameters(vds.getDynamicData())); - if (log.isDebugEnabled()) { - log.debugFormat("DecreasePendingVms::Decreasing vds {0} pending vcpu count, now {1}. Vm: {2}", - vds.getName(), vds.getPendingVcpusCount(), getVm().getName()); - log.debugFormat("DecreasePendingVms::Decreasing vds {0} pending vmem size, now {1}. Vm: {2}", - vds.getName(), vds.getPendingVmemSize(), getVm().getName()); - } + DbFacade.getInstance() + .getVdsDynamicDao() + .smartUpdatePartialVds(vdsId, 0, -getVm().getNumOfCpus(), -getVm().getMinAllocatedMem(), 0, 0); + + if (log.isDebugEnabled()) { + log.debugFormat("DecreasePendingVms::Decreasing vds {0} pending vcpu count, in {1}. Vm: {2}", + vdsId, getVm().getNumOfCpus(), getVm().getName()); + log.debugFormat("DecreasePendingVms::Decreasing vds {0} pending vmem size, in {1}. Vm: {2}", + vdsId, getVm().getMinAllocatedMem(), getVm().getName()); } getDecreseCondition(vdsId).signal(); } finally { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsDynamic.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsDynamic.java index 78229f4..230e7f0 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsDynamic.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VdsDynamic.java @@ -132,6 +132,9 @@ pending_vcpus_count = 0; pending_vmem_size = 0; transparentHugePagesState = VdsTransparentHugePagesState.Never; + vm_count =0; + vms_cores_count = 0; + guest_overhead = 0; } public VdsDynamic(Integer cpu_cores, Integer cpuThreads, String cpu_model, Double cpu_speed_mh, String if_total_speed, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVdsDynamicDataVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVdsDynamicDataVDSCommandParameters.java deleted file mode 100644 index b5c3f5f..0000000 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVdsDynamicDataVDSCommandParameters.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.ovirt.engine.core.common.vdscommands; - -import org.ovirt.engine.core.common.businessentities.VdsDynamic; - -public class UpdateVdsDynamicDataVDSCommandParameters extends VdsIdVDSCommandParametersBase { - private VdsDynamic privateVdsDynamic; - - public VdsDynamic getVdsDynamic() { - return privateVdsDynamic; - } - - private void setVdsDynamic(VdsDynamic value) { - privateVdsDynamic = value; - } - - public UpdateVdsDynamicDataVDSCommandParameters(VdsDynamic vdsDynamic) { - super(vdsDynamic.getId()); - setVdsDynamic(vdsDynamic); - } - - public UpdateVdsDynamicDataVDSCommandParameters() { - } - - @Override - public String toString() { - return String.format("%s, vdsDynamic=%s", super.toString(), getVdsDynamic()); - } -} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 01e8d26..c876a11 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -55,7 +55,6 @@ HSMClearTask("org.ovirt.engine.core.vdsbroker.vdsbroker"), HSMRevertTask("org.ovirt.engine.core.vdsbroker.vdsbroker"), UpdateVmDynamicData("org.ovirt.engine.core.vdsbroker"), - UpdateVdsDynamicData("org.ovirt.engine.core.vdsbroker"), CollectVdsNetworkData("org.ovirt.engine.core.vdsbroker.vdsbroker"), GetVmsInfo("org.ovirt.engine.core.vdsbroker.irsbroker"), HSMGetStorageDomainInfo("org.ovirt.engine.core.vdsbroker.vdsbroker"), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAO.java index c832746..2b1f3d8 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAO.java @@ -17,4 +17,15 @@ * @param netConfigDirty - a new value of field */ void updateNetConfigDirty(Guid id, Boolean netConfigDirty); + + /** + * The following method will add a provided values to current values in DB + * @param id - id of record to be updated + * @param vmCount - a new value will be GREATEST(vm_count + vmCount, 0) + * @param pendingVcpusCount - a new value will be GREATEST(pending_vcpus_count + pendingVcpusCount, 0) + * @param pendingVmemSize - a new value will be GREATEST(pending_vmem_size + pendingVmemSize, 0) + * @param memCommited - will decrease or increase value of mem_commited by ABS(memCommited) + guest_overhead + * @param vmsCoresCount - a new value will be GREATEST(vms_cores_count + v_vmsCoresCount, 0) + */ + void smartUpdatePartialVds(Guid id, int vmCount, int pendingVcpusCount, int pendingVmemSize, int memCommited, int vmsCoresCount); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAODbFacadeImpl.java index 2b089d9..9b6adde 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDynamicDAODbFacadeImpl.java @@ -42,13 +42,11 @@ entity.setId(Guid.createGuidFromString(rs .getString("vds_id"))); entity.setvm_active((Integer) rs.getObject("vm_active")); - entity.setvm_count((Integer) rs.getObject("vm_count")); - entity.setvms_cores_count((Integer) rs - .getObject("vms_cores_count")); + entity.setvm_count(rs.getInt("vm_count")); + entity.setvms_cores_count(rs.getInt("vms_cores_count")); entity.setvm_migrating((Integer) rs.getObject("vm_migrating")); entity.setreserved_mem((Integer) rs.getObject("reserved_mem")); - entity.setguest_overhead((Integer) rs - .getObject("guest_overhead")); + entity.setguest_overhead(rs.getInt("guest_overhead")); entity.setsoftware_version(rs.getString("software_version")); entity.setversion_name(rs.getString("version_name")); entity.setVersion(new RpmVersion(rs.getString("rpm_version"))); @@ -240,4 +238,23 @@ getCallsHandler().executeModification("UpdateVdsDynamicNetConfigDirty", parameterSource); } + + @Override + public void smartUpdatePartialVds(Guid id, + int vmCount, + int pendingVcpusCount, + int pendingVmemSize, + int memCommited, + int vmsCoresCount) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("vds_guid", id) + .addValue("vmCount", vmCount) + .addValue("pendingVcpusCount", pendingVcpusCount) + .addValue("pendingVmemSize", pendingVmemSize) + .addValue("memCommited", memCommited) + .addValue("vmsCoresCount", vmsCoresCount); + + getCallsHandler().executeModification("UpdateSmartUpdatePartialVds", parameterSource); + + } } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDynamicDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDynamicDAOTest.java index faca191..4bf343b 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDynamicDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDynamicDAOTest.java @@ -106,4 +106,34 @@ VdsDynamic after = dao.get(existingVds.getId()); assertEquals(before, after); } + + @Test + public void testSmartUpdatePartialVds() { + int vmCount = 1; + int pendingVcpusCount = 5; + int pendingVmemSize = 25; + int memCommited = 50; + int vmsCoresCount = 15; + VdsDynamic before = dao.get(existingVds.getId()); + before.setvm_count(before.getvm_count() + vmCount); + before.setpending_vcpus_count(before.getpending_vcpus_count() + pendingVcpusCount); + before.setpending_vmem_size(before.getpending_vmem_size() + pendingVmemSize); + before.setmem_commited(before.getmem_commited() + memCommited + before.getguest_overhead()); + before.setvms_cores_count(before.getvms_cores_count() + vmsCoresCount); + dao.smartUpdatePartialVds(before.getId(), + vmCount, + pendingVcpusCount, + pendingVmemSize, + memCommited, + vmsCoresCount); + VdsDynamic after = dao.get(existingVds.getId()); + assertEquals(before, after); + + vmCount = before.getvm_count() + 1; + before.setvm_count(0); + before.setmem_commited(before.getmem_commited() - memCommited - before.getguest_overhead()); + dao.smartUpdatePartialVds(before.getId(), -vmCount, 0, 0, -memCommited, 0); + after = dao.get(existingVds.getId()); + assertEquals(before, after); + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java index c412079..9de75dc 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java @@ -103,17 +103,15 @@ } private void HandleVdsInformation() { - getVds().setMemCommited(getVds().getMemCommited() + getParameters().getVm().getVmMemSizeMb()); - getVds().setMemCommited(getVds().getMemCommited() + getVds().getGuestOverhead()); - getVds().setVmCount(getVds().getVmCount() + 1); - getVds().setVmsCoresCount(getVds().getVmsCoresCount() + getParameters().getVm().getNumOfCpus()); - getVds().setPendingVcpusCount( - getVds().getPendingVcpusCount() + getParameters().getVm().getNumOfCpus()); - getVds().setPendingVmemSize( - getVds().getPendingVmemSize() + getParameters().getVm().getMinAllocatedMem()); - log.infoFormat("IncreasePendingVms::CreateVmIncreasing vds {0} pending vcpu count, now {1}. Vm: {2}", getVds() - .getName(), getVds().getPendingVcpusCount(), getParameters().getVm().getName()); - _vdsManager.UpdateDynamicData(getVds().getDynamicData()); + DbFacade.getInstance() + .getVdsDynamicDao() + .smartUpdatePartialVds(getVds().getId(), + 1, + getParameters().getVm().getNumOfCpus(), + getParameters().getVm().getMinAllocatedMem(), + getParameters().getVm().getVmMemSizeMb(), + getParameters().getVm().getNumOfCpus()); + } private boolean CanExecute() { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java index fc84f87..3ad2b42 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/DestroyVmVDSCommand.java @@ -57,10 +57,10 @@ DbFacade.getInstance().getVmNetworkStatisticsDao().update(stats); } } - getVds().setMemCommited(getVds().getMemCommited() - curVm.getVmMemSizeMb()); - getVds().setMemCommited(getVds().getMemCommited() - getVds().getGuestOverhead()); - getVds().setVmsCoresCount(getVds().getVmsCoresCount() - curVm.getNumOfCpus()); - _vdsManager.UpdateDynamicData(getVds().getDynamicData()); + DbFacade.getInstance() + .getVdsDynamicDao() + .smartUpdatePartialVds(getVdsId(), 0, 0, 0, + -curVm.getVmMemSizeMb(), -curVm.getNumOfCpus()); return null; } }); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java index 2578b5a..0947dd0 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/MigrateVDSCommand.java @@ -1,6 +1,5 @@ package org.ovirt.engine.core.vdsbroker; -import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.vdscommands.MigrateVDSCommandParameters; @@ -9,7 +8,6 @@ import org.ovirt.engine.core.dal.dbbroker.DbFacade; 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.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; import org.ovirt.engine.core.vdsbroker.vdsbroker.MigrateBrokerVDSCommand; @@ -54,7 +52,7 @@ }); if (retval == VMStatus.MigratingFrom) { - updateDestinationVdsThreaded(parameters.getDstVdsId(), vm); + updateDestinationVds(parameters.getDstVdsId(), vm); } getVDSReturnValue().setReturnValue(retval); @@ -63,53 +61,22 @@ } } - private void updateDestinationVdsThreaded(Guid dstVdsId, final VM vm) { - final VdsManager vdsManager = ResourceManager.getInstance().GetVdsManager(dstVdsId); - - if (vdsManager != null) { - ThreadPoolUtil.execute(new Runnable() { - @Override - public void run() { - updateDestinationVdsOnTimer(vdsManager, vm); - } - }); - } - } - - private void updateDestinationVdsOnTimer(final VdsManager vdsManager, final VM vm) { - synchronized (vdsManager.getLockObj()) { - VDS vds = DbFacade.getInstance().getVdsDao().get(vdsManager.getVdsId()); - try { - vds.setVmCount(vds.getVmCount() + 1); - vds.setPendingVcpusCount(vds.getPendingVcpusCount() + vm.getNumOfCpus()); - vds.setPendingVmemSize(vds.getPendingVmemSize() + vm.getMinAllocatedMem()); - if (log.isDebugEnabled()) { - log.debugFormat( - "IncreasePendingVms::MigrateVm Increasing vds {0} pending vcpu count, now {1}, and pending vmem size, now {2}. Vm: {3}", - vds.getName(), - vds.getPendingVcpusCount(), - vds.getPendingVmemSize(), - vm.getName()); - } - vdsManager.UpdateDynamicData(vds.getDynamicData()); - } catch (RuntimeException ex) { - if (vds == null) { - log.fatalFormat( - "VDS::migrate:: Could not update destination vds commited memory to db. vds {0} : was not find, error: {1}, {2}", - vdsManager.getVdsId(), - ex.toString(), - ex.getStackTrace()[0]); - } else { - log.fatalFormat( - "VDS::migrate:: Could not update destination vds commited memory to db. vds {0} : {1}, error: {2}, {3}", - vds.getId(), - vds.getName(), - ex.toString(), - ex.getStackTrace()[0]); - } + private void updateDestinationVds(final Guid dstVdsId, final VM vm) { + TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { + @Override + public Void runInTransaction() { + DbFacade.getInstance() + .getVdsDynamicDao() + .smartUpdatePartialVds(dstVdsId, 1, vm.getNumOfCpus(), vm.getMinAllocatedMem(), 0, 0); + return null; } - - } + }); + log.debugFormat( + "IncreasePendingVms::MigrateVm Increasing vds {0} pending vcpu count, in {1}, and pending vmem size, in {2}. Vm: {3}", + dstVdsId, + vm.getNumOfCpus(), + vm.getMinAllocatedMem(), + vm.getName()); } private static Log log = LogFactory.getLog(MigrateVDSCommand.class); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/UpdateVdsDynamicDataVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/UpdateVdsDynamicDataVDSCommand.java deleted file mode 100644 index c6d0da6..0000000 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/UpdateVdsDynamicDataVDSCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ovirt.engine.core.vdsbroker; - -import org.ovirt.engine.core.common.vdscommands.*; - -public class UpdateVdsDynamicDataVDSCommand<P extends UpdateVdsDynamicDataVDSCommandParameters> - extends VdsIdVDSCommandBase<P> { - public UpdateVdsDynamicDataVDSCommand(P parameters) { - super(parameters); - } - - @Override - protected void ExecuteVdsIdCommand() { - if (_vdsManager != null) { - _vdsManager.UpdateDynamicData(getParameters().getVdsDynamic()); - } else { - getVDSReturnValue().setSucceeded(false); - } - } -} 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 7f34ae1..ea519dc 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 @@ -112,7 +112,7 @@ private boolean processHardwareCapsNeeded; private boolean refreshedCapabilities = false; private static Map<Guid, Long> hostDownTimes = new HashMap<Guid, Long>(); - private int runningVmsInTransition = 0; + private boolean runningVmsInTransition; private static final Log log = LogFactory.getLog(VdsUpdateRunTimeInfo.class); @@ -367,7 +367,8 @@ for (VM vm : _vmDict.values()) { if (vm.isRunning() && vm.getStatus() != VMStatus.Up) { - runningVmsInTransition++; + runningVmsInTransition = true; + break; } } } @@ -1616,13 +1617,11 @@ } private void refreshCommitedMemory() { - Integer memCommited = _vds.getGuestOverhead() != null ? 0 : null; + Integer memCommited = _vds.getGuestOverhead(); int vmsCoresCount = 0; for (VM vm : _vmDict.values()) { - if (_vds.getGuestOverhead() != null) { - memCommited += vm.getVmMemSizeMb(); - memCommited += _vds.getGuestOverhead(); - } + memCommited += vm.getVmMemSizeMb(); + memCommited += _vds.getGuestOverhead(); vmsCoresCount += vm.getNumOfCpus(); } if (memCommited == null || !memCommited.equals(_vds.getMemCommited())) { @@ -1634,12 +1633,12 @@ _saveVdsDynamic = true; } - if (_vds.getPendingVcpusCount() != 0 && runningVmsInTransition == 0) { + if (_vds.getPendingVcpusCount() != 0 && !runningVmsInTransition) { _vds.setPendingVcpusCount(0); _saveVdsDynamic = true; } - if (_vds.getPendingVmemSize() != 0 && runningVmsInTransition == 0) { + if (_vds.getPendingVmemSize() != 0 && !runningVmsInTransition) { // set also vmem size to 0 _vds.setPendingVmemSize(0); _saveVdsDynamic = true; -- To view, visit http://gerrit.ovirt.org/13682 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I363afc5c3411b0c13e6d6c9ed5b16004738b6ca7 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Michael Kublin <mkub...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches