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

Reply via email to