Gilad Chaplik has uploaded a new change for review.

Change subject: core, db: Introduce BaseProfile and DiskProfile
......................................................................

core, db: Introduce BaseProfile and DiskProfile

DB and DAL changes: DiskProfileDao to extend ProfileBaseDao

For more information see: http://www.ovirt.org/Features/aggregate_QoS,
http://www.ovirt.org/Features/blkio-support#Profiles

Change-Id: I229af59277b5055453188f002f19046cdd51d63b
Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfileBaseDaoFacadeImpl.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfilesDao.java
M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
A 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M packaging/dbscripts/create_functions.sql
A packaging/dbscripts/disk_profiles_sp.sql
A packaging/dbscripts/upgrade/03_05_0950_add_disk_profiles_table.sql
14 files changed, 463 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/08/31808/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
index 25f009f..81d2148 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
@@ -34,7 +34,9 @@
     PROVIDER(24, "Provider"),
     GlusterService(25, "GlusterService"),
     ExternalTask(26, "ExternalTask"),
-    VnicProfile(27, "Vnic Profile");
+    VnicProfile(27, "Vnic Profile"),
+    DiskProfile(29, "Disk Profile");
+
 
     private int value;
     private String vdcObjectTranslationVal;
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
index 4ae2eac..9f00a0d 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
@@ -137,6 +137,7 @@
 import org.ovirt.engine.core.dao.network.VmNicDao;
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
 import org.ovirt.engine.core.dao.network.VnicProfileViewDao;
+import org.ovirt.engine.core.dao.profiles.DiskProfileDao;
 import org.ovirt.engine.core.dao.provider.ProviderDao;
 import org.ovirt.engine.core.dao.qos.StorageQosDao;
 import org.ovirt.engine.core.dao.scheduling.AffinityGroupDao;
@@ -1104,4 +1105,13 @@
     public VmNumaNodeDAO getVmNumaNodeDAO() {
         return getDao(VmNumaNodeDAO.class);
     }
+
+    /**
+     * Returns the singleton instance of {@link DiskProfileDao}.
+     *
+     * @return the dao instance
+     */
+    public DiskProfileDao getDiskProfileDao() {
+        return getDao(DiskProfileDao.class);
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java
new file mode 100644
index 0000000..05816e7
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.core.dao.profiles;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.GenericDao;
+
+public interface DiskProfileDao extends ProfilesDao<DiskProfile>, 
GenericDao<DiskProfile, Guid> {
+
+    /**
+     * Retrieves all disk profiles associated with the given storage domain id.
+     *
+     * @param storageDomainId
+     *            the storage domain's ID
+     * @return the list of disk profiles
+     */
+    List<DiskProfile> getAllForStorageDomain(Guid storageDomainId);
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java
new file mode 100644
index 0000000..43b8784
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java
@@ -0,0 +1,48 @@
+package org.ovirt.engine.core.dao.profiles;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
+import org.ovirt.engine.core.compat.Guid;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+public class DiskProfileDaoDbFacadeImpl extends 
ProfileBaseDaoFacadeImpl<DiskProfile> implements DiskProfileDao {
+    private static final DiskProfileDaoDbFacadaeImplMapper MAPPER = new 
DiskProfileDaoDbFacadaeImplMapper();
+
+    public DiskProfileDaoDbFacadeImpl() {
+        super("DiskProfile");
+    }
+
+    @Override
+    public List<DiskProfile> getAllForStorageDomain(Guid storageDomainId) {
+        return 
getCallsHandler().executeReadList("GetDiskProfilesByStorageDomainId",
+                createEntityRowMapper(),
+                getCustomMapSqlParameterSource().addValue("storage_domain_id", 
storageDomainId));
+    }
+
+    @Override
+    protected RowMapper<DiskProfile> createEntityRowMapper() {
+        return MAPPER;
+    }
+
+    @Override
+    protected MapSqlParameterSource createFullParametersMapper(DiskProfile 
obj) {
+        MapSqlParameterSource map = super.createFullParametersMapper(obj);
+        map.addValue("storage_domain_id", obj.getStorageDomainId());
+        return map;
+    }
+
+    protected static class DiskProfileDaoDbFacadaeImplMapper extends 
ProfileBaseDaoFacadaeImplMapper<DiskProfile> {
+
+        @Override
+        protected DiskProfile createProfileEntity(ResultSet rs) throws 
SQLException {
+            DiskProfile diskProfile = new DiskProfile();
+            diskProfile.setStorageDomainId(getGuid(rs, "storage_domain_id"));
+            return diskProfile;
+        }
+
+    }
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfileBaseDaoFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfileBaseDaoFacadeImpl.java
new file mode 100644
index 0000000..53de2a1
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfileBaseDaoFacadeImpl.java
@@ -0,0 +1,54 @@
+package org.ovirt.engine.core.dao.profiles;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.ovirt.engine.core.common.businessentities.profiles.ProfileBase;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+public abstract class ProfileBaseDaoFacadeImpl<T extends ProfileBase> extends 
DefaultGenericDaoDbFacade<T, Guid> implements ProfilesDao<T> {
+    protected final RowMapper<T> mapper = createEntityRowMapper();
+
+    public ProfileBaseDaoFacadeImpl(String entityStoredProcedureName) {
+        super(entityStoredProcedureName);
+    }
+
+    @Override
+    protected MapSqlParameterSource createFullParametersMapper(T obj) {
+        MapSqlParameterSource map = createIdParameterMapper(
+                obj.getId())
+                .addValue("name", obj.getName())
+                .addValue("qos_id", obj.getQosId())
+                .addValue("description", obj.getDescription());
+        return map;
+    }
+
+    @Override
+    protected MapSqlParameterSource createIdParameterMapper(Guid guid) {
+        return getCustomMapSqlParameterSource()
+                .addValue("id", guid);
+    }
+
+    protected static abstract class ProfileBaseDaoFacadaeImplMapper<M extends 
ProfileBase> implements RowMapper<M> {
+        @Override
+        public M mapRow(ResultSet rs, int rowNum) throws SQLException {
+            M entity = createProfileEntity(rs);
+            entity.setId(getGuid(rs, "id"));
+            entity.setName(rs.getString("name"));
+            entity.setDescription(rs.getString("description"));
+            entity.setQosId(getGuid(rs, "qos_id"));
+            return entity;
+        }
+
+        /**
+         * @param rs
+         * @return entity of derived mapper class
+         * @throws SQLException
+         */
+        protected abstract M createProfileEntity(ResultSet rs) throws 
SQLException;
+
+    }
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfilesDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfilesDao.java
new file mode 100644
index 0000000..de9737c
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/ProfilesDao.java
@@ -0,0 +1,10 @@
+package org.ovirt.engine.core.dao.profiles;
+
+import org.ovirt.engine.core.common.businessentities.profiles.ProfileBase;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.GenericDao;
+
+public interface ProfilesDao<T extends ProfileBase> extends GenericDao<T, 
Guid> {
+
+}
+
diff --git 
a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties 
b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
index e1a52d2..cabe170 100644
--- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
+++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
@@ -83,3 +83,4 @@
 
UnregisteredOVFDataDAO=org.ovirt.engine.core.dao.UnregisteredOVFDataDAODbFacadeImpl
 ExternalVariableDao=org.ovirt.engine.core.dao.ExternalVariableDaoDbFacadeImpl
 VdsKdumpStatusDao=org.ovirt.engine.core.dao.VdsKdumpStatusDaoDbFacadeImpl
+DiskProfileDao=org.ovirt.engine.core.dao.profiles.DiskProfileDaoDbFacadeImpl
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java
index 5ec90b2..97f099e 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbFacadeDAOTest.java
@@ -34,6 +34,7 @@
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@@ -318,4 +319,11 @@
         
assertTrue(name.equals(dbFacade.getEntityNameByIdAndType(FixturesTool.VM_NETWORK_INTERFACE_PROFILE,
 VdcObjectType.VnicProfile)));
     }
 
+    @Test
+    public void testGetEntityNameByIdAndTypeForDiskProfile() {
+        DiskProfile diskProfile = 
dbFacade.getDiskProfileDao().get(FixturesTool.DISK_PROFILE_1);
+        assertNotNull(diskProfile);
+        String name = diskProfile.getName();
+        
assertTrue(name.equals(dbFacade.getEntityNameByIdAndType(FixturesTool.DISK_PROFILE_1,
 VdcObjectType.DiskProfile)));
+    }
 }
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 fb06a08..3905cdd 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
@@ -76,7 +76,7 @@
     /**
      * Predefined scale storage domain.
      */
-    protected static final Guid STORAGE_DOAMIN_SCALE_SD5 = new 
Guid("72e3a666-89e1-4005-a7ca-f7548004a9ab");
+    public static final Guid STORAGE_DOAMIN_SCALE_SD5 = new 
Guid("72e3a666-89e1-4005-a7ca-f7548004a9ab");
 
     /**
      * Predefined scale storage domain.
@@ -624,4 +624,6 @@
      */
     public static final int NUMBER_OF_VMS_IN_VDS_GROUP_RHEL6_NFS_CLUSTER = 0;
     public static final int NUMBER_OF_VMS_IN_VDS_GROUP_RHEL6_ISCSI = 7;
+
+    public static final Guid DISK_PROFILE_1 = new 
Guid("fd81f1e1-785b-4579-ab75-1419ebb87052");
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java
new file mode 100644
index 0000000..2231a20
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java
@@ -0,0 +1,129 @@
+package org.ovirt.engine.core.dao.profiles;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.BaseDAOTestCase;
+import org.ovirt.engine.core.dao.FixturesTool;
+
+public class DiskProfileDaoTest extends BaseDAOTestCase {
+
+    private DiskProfile diskProfile;
+    private DiskProfileDao dao;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        dao = dbFacade.getDiskProfileDao();
+        diskProfile = new DiskProfile();
+        diskProfile.setId(Guid.newGuid());
+        diskProfile.setName("new_profile");
+        diskProfile.setStorageDomainId(FixturesTool.STORAGE_DOAMIN_SCALE_SD5);
+        diskProfile.setQosId(FixturesTool.QOS_ID_1);
+    }
+
+    /**
+     * Ensures null is returned.
+     */
+    @Test
+    public void testGetWithNonExistingId() {
+        DiskProfile result = dao.get(Guid.newGuid());
+
+        assertNull(result);
+    }
+
+    /**
+     * Ensures that the interface profile is returned.
+     */
+    @Test
+    public void testGet() {
+        DiskProfile result = dao.get(FixturesTool.DISK_PROFILE_1);
+
+        assertNotNull(result);
+        assertEquals(FixturesTool.DISK_PROFILE_1, result.getId());
+    }
+
+    /**
+     * Ensures that an empty collection is returned.
+     */
+    @Test
+    public void testGetAllForStorageEmpty() {
+        List<DiskProfile> result = dao.getAllForStorageDomain(Guid.newGuid());
+
+        assertNotNull(result);
+        assertTrue(result.isEmpty());
+    }
+
+    /**
+     * Ensures that profiles are returned.
+     */
+    @Test
+    public void testGetAllForStorageDomainFull() {
+        List<DiskProfile> result = 
dao.getAllForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5);
+
+        assertNotNull(result);
+        assertEquals(2, result.size());
+        for (DiskProfile diskProfile : result) {
+            assertEquals(FixturesTool.STORAGE_DOAMIN_SCALE_SD5, 
diskProfile.getStorageDomainId());
+        }
+    }
+
+    @Test
+    public void testGetAll() {
+        List<DiskProfile> result = dao.getAll();
+
+        assertNotNull(result);
+        assertEquals(5, result.size());
+    }
+
+    /**
+     * Ensures that the save is working correctly
+     */
+    @Test
+    public void testSave() {
+        assertNull(dao.get(diskProfile.getId()));
+        dao.save(diskProfile);
+        DiskProfile result = dao.get(diskProfile.getId());
+        assertNotNull(result);
+        assertEquals(diskProfile, result);
+    }
+
+    /**
+     * Ensures that the update is working correctly
+     */
+    @Test
+    public void testUpdate() {
+        DiskProfile profile = dao.get(FixturesTool.DISK_PROFILE_1);
+        assertNotNull(profile);
+        assertFalse(FixturesTool.QOS_ID_2.equals(profile.getQosId()));
+        profile.setQosId(FixturesTool.QOS_ID_2);
+        profile.setDescription("Kramer goes to a fantasy camp? His whole life 
is a fantasy camp. "
+                + "People should plunk down $2000 to live like him for a week. 
Sleep, do nothing, "
+                + "fall ass-backwards into money, mooch food off your 
neighbors and have sex without dating... THAT'S a fantasy camp.");
+        dao.update(profile);
+        DiskProfile result = dao.get(profile.getId());
+        assertNotNull(result);
+        assertEquals(profile, result);
+    }
+
+    /**
+     * Ensures that the remove is working correctly
+     */
+    @Test
+    public void testRemove() {
+        dao.save(diskProfile);
+        DiskProfile result = dao.get(diskProfile.getId());
+        assertNotNull(result);
+        dao.remove(diskProfile.getId());
+        assertNull(dao.get(diskProfile.getId()));
+    }
+}
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 0e3d742..c421cb6 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -5022,6 +5022,46 @@
         </row>
     </table>
 
+    <table name="disk_profiles">
+        <column>id</column>
+        <column>name</column>
+        <column>storage_domain_id</column>
+        <column>qos_id</column>
+        <column>description</column>
+        <row>
+            <value>fd81f1e1-785b-4579-ab75-1419ebb87052</value>
+            <value>engine_profile</value>
+            <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value>
+            <value>ae956031-6be2-43d6-bb90-5191c9253314</value>
+            <value>disk profile description</value>
+        </row>
+        <row>
+            <value>a667da39-27b0-47ec-a5fa-d4293a62b222</value>
+            <value>engine_profile_pm</value>
+            <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value>
+            <value>ae956031-6be2-43d6-bb90-5191c9253315</value>
+            <null />
+        </row>
+        <row>
+            <value>d0f2ca62-f564-447c-aa55-ce2aa12ea798</value>
+            <value>engine2_profile</value>
+            <value>17e7489d-d490-4681-a322-073ca19bd33d</value>
+            <null />
+        </row>
+        <row>
+            <value>471b199e-9454-47a1-85dd-4461f665abc5</value>
+            <value>engine3_profile</value>
+            <value>c2211b56-8869-41cd-84e1-78d7cb96f31d</value>
+            <null />
+        </row>
+        <row>
+            <value>2b75e023-a1fb-4dcb-9738-0ec7fe2d51c6</value>
+            <value>engine4_profile</value>
+            <value>c2211b56-8869-41cd-84e1-78d7cb96f31d</value>
+            <value>ae956031-6be2-43d6-bb90-5191c9253314</value>
+        </row>
+    </table>
+
     <table name="image_storage_domain_map">
         <column>image_id</column>
         <column>storage_domain_id</column>
diff --git a/packaging/dbscripts/create_functions.sql 
b/packaging/dbscripts/create_functions.sql
index 9ccb3a0..88ac01f 100644
--- a/packaging/dbscripts/create_functions.sql
+++ b/packaging/dbscripts/create_functions.sql
@@ -148,7 +148,8 @@
                GlusterVolume = 18,
         Disk = 19,
         Network = 20,
-        VNICProfile = 27
+        VNICProfile = 27,
+        DiskProfile = 29
 */
 DECLARE
        v_entity_type int4 := v_object_type;
@@ -160,6 +161,7 @@
     v_vm_id uuid;
     v_storage_pool_id uuid;
     v_profile_network_id uuid;
+    v_disk_profile_storage_id uuid;
 
 BEGIN
 
@@ -324,6 +326,26 @@
             SELECT v_storage_pool_id AS id
             UNION
             SELECT v_profile_network_id AS id
+            UNION
+            SELECT v_entity_id AS id;
+
+        WHEN v_entity_type = 29 THEN -- DiskProfile
+
+        SELECT INTO v_disk_profile_storage_id
+                    disk_profiles.storage_domain_id
+        FROM disk_profiles
+        WHERE disk_profiles.id = v_entity_id;
+        SELECT INTO v_storage_pool_id
+                    storage_pool_iso_map.storage_pool_id
+        FROM storage_pool_iso_map
+        WHERE storage_pool_iso_map.storage_id = v_disk_profile_storage_id;
+
+        RETURN QUERY
+            SELECT system_root_id AS id
+            UNION
+            SELECT v_storage_pool_id AS id
+            UNION
+            SELECT v_disk_profile_storage_id AS id
             UNION
             SELECT v_entity_id AS id;
 
@@ -550,7 +572,8 @@
         GlusterVolume = 18,
         Disk = 19,
         Network = 20,
-        VNICProfile = 27
+        VNICProfile = 27,
+        DiskProfile = 29
 */
 DECLARE
     v_entity_type int4 := v_object_type;
@@ -595,6 +618,8 @@
         result := ( SELECT service_name FROM gluster_services where id = 
v_entity_id );
     WHEN v_entity_type = 27 THEN
         result := ( SELECT name FROM vnic_profiles where id = v_entity_id );
+    WHEN v_entity_type = 29 THEN
+        result := ( SELECT name FROM disk_profiles where id = v_entity_id );
     ELSE
         result := 'Unknown type ' ||  v_entity_type;
     END CASE;
diff --git a/packaging/dbscripts/disk_profiles_sp.sql 
b/packaging/dbscripts/disk_profiles_sp.sql
new file mode 100644
index 0000000..7730750
--- /dev/null
+++ b/packaging/dbscripts/disk_profiles_sp.sql
@@ -0,0 +1,92 @@
+----------------------------------------------------------------------
+--  Disk Profiles
+----------------------------------------------------------------------
+
+Create or replace FUNCTION GetDiskProfileByDiskProfileId(v_id UUID)
+RETURNS SETOF disk_profiles STABLE
+   AS $procedure$
+BEGIN
+
+   RETURN QUERY SELECT *
+   FROM disk_profiles
+   WHERE id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION InsertDiskProfile(v_id UUID,
+  v_name VARCHAR(50),
+  v_storage_domain_id UUID,
+  v_qos_id UUID,
+  v_description TEXT)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+
+   INSERT INTO disk_profiles(id, name, storage_domain_id, qos_id, description)
+       VALUES(v_id, v_name, v_storage_domain_id, v_qos_id, v_description);
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION UpdateDiskProfile(v_id UUID,
+  v_name VARCHAR(50),
+  v_storage_domain_id UUID,
+  v_qos_id UUID,
+  v_description TEXT)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+
+   UPDATE disk_profiles
+   SET id = v_id, name = v_name, storage_domain_id = v_storage_domain_id, 
qos_id = v_qos_id,
+       description = v_description, _update_date = LOCALTIMESTAMP
+   WHERE id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION DeleteDiskProfile(v_id UUID)
+RETURNS VOID
+   AS $procedure$
+   DECLARE
+   v_val UUID;
+BEGIN
+
+    DELETE FROM disk_profiles
+    WHERE id = v_id;
+
+    -- Delete the disk profiles permissions
+    DELETE FROM permissions WHERE object_id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetAllFromDiskProfiles()
+RETURNS SETOF disk_profiles STABLE
+   AS $procedure$
+BEGIN
+
+   RETURN QUERY SELECT *
+   FROM disk_profiles;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION 
GetDiskProfilesByStorageDomainId(v_storage_domain_id UUID)
+RETURNS SETOF disk_profiles STABLE
+   AS $procedure$
+BEGIN
+
+   RETURN QUERY SELECT *
+   FROM disk_profiles
+   WHERE storage_domain_id = v_storage_domain_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
diff --git a/packaging/dbscripts/upgrade/03_05_0950_add_disk_profiles_table.sql 
b/packaging/dbscripts/upgrade/03_05_0950_add_disk_profiles_table.sql
new file mode 100644
index 0000000..12f24bb
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_05_0950_add_disk_profiles_table.sql
@@ -0,0 +1,19 @@
+---------------------------------------------------------------------
+--  table disk_profiles
+---------------------------------------------------------------------
+CREATE TABLE disk_profiles
+(
+  id UUID PRIMARY KEY,
+  name VARCHAR(50) NOT NULL,
+  storage_domain_id UUID NOT NULL,
+  qos_id UUID,
+  description TEXT,
+  _create_date TIMESTAMP WITH TIME ZONE default LOCALTIMESTAMP,
+  _update_date TIMESTAMP WITH TIME ZONE,
+  FOREIGN KEY (storage_domain_id) REFERENCES storage_domain_static(id) ON 
DELETE CASCADE,
+  FOREIGN KEY (qos_id) REFERENCES qos(id) ON DELETE SET NULL
+) WITH OIDS;
+
+DROP INDEX IF EXISTS IDX_disk_profiles_storage_domain_id;
+CREATE INDEX IDX_disk_profiles_storage_domain_id ON 
disk_profiles(storage_domain_id);
+


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I229af59277b5055453188f002f19046cdd51d63b
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