Gilad Chaplik has uploaded a new change for review. Change subject: core: update CPU QoS policy for running VMs ......................................................................
core: update CPU QoS policy for running VMs If a VM succeed to run and has CPU QoS attached, update the vm policy. Change-Id: Ia762ef4fc26cbfa913c077d34da51a9fa44946e8 Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDaoDbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/CpuQosDaoTest.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java M packaging/dbscripts/qos_sp.sql 8 files changed, 71 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/31830/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java index 197c557..43286b8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java @@ -49,6 +49,7 @@ import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus; +import org.ovirt.engine.core.common.businessentities.qos.CpuQos; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.eventqueue.Event; @@ -60,6 +61,7 @@ import org.ovirt.engine.core.common.vdscommands.DisconnectStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.SetVmTicketVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.StartSpiceVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.UpdateVmPolicyVDSParams; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.TransactionScopeOption; @@ -78,6 +80,7 @@ import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; import org.ovirt.engine.core.vdsbroker.MonitoringStrategyFactory; +import org.ovirt.engine.core.vdsbroker.ResourceManager; import org.ovirt.engine.core.vdsbroker.irsbroker.IrsBrokerCommand; @Stateless(name = "VdsEventListener") @@ -491,6 +494,25 @@ SchedulingManager.getInstance().updateHostSchedulingStats(vds); } + @Override + public void updateSlaPolicies(final List<Guid> vmIds, final Guid vdsId) { + if (vmIds.isEmpty()) { + return; + } + ThreadPoolUtil.execute(new Runnable() { + @Override + public void run() { + for (Guid vmId : vmIds) { + CpuQos qos = DbFacade.getInstance().getCpuQosDao().getCpuQosByVmId(vmId); + if (qos != null && qos.getCpuLimit() != null) { + ResourceManager.getInstance().runVdsCommand(VDSCommandType.UpdateVmPolicy, + new UpdateVmPolicyVDSParams(vdsId, vmId, qos.getCpuLimit().intValue())); + } + } + } + }); + } + private static final Log log = LogFactory.getLog(VdsEventListener.class); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java index 30237f9..ef1c795 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java @@ -69,4 +69,12 @@ void updateSchedulingStats(VDS vds); // BLL void syncLunsInfoForBlockStorageDomain(final Guid storageDomainId, final Guid vdsId); + + /** + * Updates VMs QoS + * + * @param vmIds + * @param vdsId + */ + void updateSlaPolicies(List<Guid> vmIds, Guid vdsId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDao.java index 88e633a..a7c0a2d 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDao.java @@ -1,7 +1,10 @@ package org.ovirt.engine.core.dao.qos; import org.ovirt.engine.core.common.businessentities.qos.CpuQos; +import org.ovirt.engine.core.compat.Guid; public interface CpuQosDao extends QosDao<CpuQos> { + CpuQos getCpuQosByVmId(Guid vmId); + } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDaoDbFacadeImpl.java index 34d54dd..ec4eb8f 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/CpuQosDaoDbFacadeImpl.java @@ -5,6 +5,7 @@ import org.ovirt.engine.core.common.businessentities.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.QosType; +import org.ovirt.engine.core.compat.Guid; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @@ -22,6 +23,15 @@ } @Override + public CpuQos getCpuQosByVmId(Guid vmId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("vm_id", vmId); + return getCallsHandler().executeRead("GetQosByVmId", + createEntityRowMapper(), + parameterSource); + } + + @Override protected RowMapper<CpuQos> createEntityRowMapper() { return CpuDaoDbFacadaeImplMapper.MAPPER; } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java index 580bf3c..190c327 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java @@ -168,7 +168,7 @@ * <li>Vds group: rhel6.iscsi (b399944a-81ab-4ec5-8266-e19ba7c3c9d1)</li> * <li>Based on template: 1 (1b85420c-b84c-4f29-997e-0eb674b40b79)</li></ul> */ - protected static final Guid VM_RHEL5_POOL_50 = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4354"); + public static final Guid VM_RHEL5_POOL_50 = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4354"); public static final String VM_RHEL5_POOL_50_NAME = "rhel5-pool-50"; /** diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/CpuQosDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/CpuQosDaoTest.java index 09a4584..1f0eb14 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/CpuQosDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/CpuQosDaoTest.java @@ -82,4 +82,16 @@ assertEquals(3, allForCpuPoolId.size()); } + @Test + public void getQosByVmId() { + CpuQos cpuQos = dao.getCpuQosByVmId(FixturesTool.VM_RHEL5_POOL_50); + assertNotNull(cpuQos); + assertEquals(FixturesTool.QOS_ID_4, cpuQos.getId()); + } + + @Test + public void getNoQosByVmId() { + CpuQos cpuQos = dao.getCpuQosByVmId(FixturesTool.VM_RHEL5_POOL_57); + assertNull(cpuQos); + } } 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 5b2f8eb..24732f7 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 @@ -571,6 +571,7 @@ for (Guid vm_guid : _succededToRunVms) { _vdsManager.succededToRunVm(vm_guid); } + getVdsEventListener().updateSlaPolicies(_succededToRunVms, _vds.getId()); // Refrain from auto-start HA VM during its re-run attempts. _autoVmsToRun.removeAll(_vmsToRerun); diff --git a/packaging/dbscripts/qos_sp.sql b/packaging/dbscripts/qos_sp.sql index 2f761c5..8efac0c 100644 --- a/packaging/dbscripts/qos_sp.sql +++ b/packaging/dbscripts/qos_sp.sql @@ -120,3 +120,17 @@ END; $procedure$ LANGUAGE plpgsql; + +Create or replace FUNCTION GetQosByVmId(v_vm_id UUID) RETURNS SETOF qos STABLE + AS $procedure$ +BEGIN +RETURN QUERY SELECT qos.* + FROM qos + JOIN cpu_profiles ON qos.id = cpu_profiles.qos_id + JOIN vds_groups ON vds_groups.vds_group_id = cpu_profiles.cluster_id + JOIN vm_static ON vm_static.vm_guid = v_vm_id + WHERE vm_static.vds_group_id = vds_groups.vds_group_id + AND vm_static.cpu_profile_id = cpu_profiles.id; +END; $procedure$ +LANGUAGE plpgsql; + -- To view, visit http://gerrit.ovirt.org/31830 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia762ef4fc26cbfa913c077d34da51a9fa44946e8 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches