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