Ramesh N has uploaded a new change for review. Change subject: engine : Entity and DAO changes for Disk provisioning ......................................................................
engine : Entity and DAO changes for Disk provisioning Add new entity 'StorageDevice' and related DAO changes. StorageDevice represents the storage devices in the system like disks, partitions, pvs, lvs, etc. Change-Id: Ie95a12239429dd0c7f3282161221e8b8f639cee9 Signed-off-by: Ramesh Nachimuthu <[email protected]> --- A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/StorageDevice.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/gluster/StorageDeviceDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties A backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/StoageDeviceDaoTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml A packaging/dbscripts/storage_device_sp.sql A packaging/dbscripts/upgrade/03_05_1360_add_storage_device_tables.sql 9 files changed, 612 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/04/39704/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/StorageDevice.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/StorageDevice.java new file mode 100644 index 0000000..cf88451 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/StorageDevice.java @@ -0,0 +1,179 @@ +package org.ovirt.engine.core.common.businessentities.gluster; + +import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.ovirt.engine.core.common.businessentities.IVdcQueryable; +import org.ovirt.engine.core.common.utils.ObjectUtils; +import org.ovirt.engine.core.compat.Guid; + +/* + * StorageDevice represents storage devices attached the hosts. It can be a disk or partition or pvs, lvs, etc. + */ +public class StorageDevice extends IVdcQueryable implements BusinessEntity<Guid> { + + private static final long serialVersionUID = -1613957987974435240L; + + private Guid id; + private String name; + private String devUuid; + private String fsUuid; + private Guid vdsId; + private String description; + private String devType; + private String devPath; + private String fsType; + private String mountPoint; + private long size; + private boolean canCreateBrick; + + public String getName() { + return name; + } + + public String getDevPath() { + return devPath; + } + + public String getDevUuid() { + return devUuid; + } + + public String getFsUuid() { + return fsUuid; + } + + public boolean getCanCreateBrick() { + return canCreateBrick; + } + + public String getFsType() { + return fsType; + } + + public String getMountPoint() { + return mountPoint; + } + + public long getSize() { + return size; + } + + public void setName(String name) { + this.name = name; + } + + public void setDevPath(String devPath) { + this.devPath = devPath; + } + + public void setDevUuid(String devUuid) { + this.devUuid = devUuid; + } + + public void setFsUuid(String uuid) { + this.fsUuid = uuid; + } + + public void setCanCreateBrick(boolean canCreateBrick) { + this.canCreateBrick = canCreateBrick; + } + + public void setFsType(String fsType) { + this.fsType = fsType; + } + + public void setMountPoint(String mountPoint) { + this.mountPoint = mountPoint; + } + + public void setSize(long size) { + this.size = size; + } + + public String getDescription() { + return description; + } + + public void setDescription(String model) { + this.description = model; + } + + @Override + public Object getQueryableId() { + return this.getId(); + } + + @Override + public Guid getId() { + return id; + } + + @Override + public void setId(Guid id) { + this.id = id; + } + + public Guid getVdsId() { + return vdsId; + } + + public void setVdsId(Guid vdsId) { + this.vdsId = vdsId; + } + + public String getDevType() { + return devType; + } + + public void setDevType(String devType) { + this.devType = devType; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (canCreateBrick ? 0 : 1); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((devPath == null) ? 0 : devPath.hashCode()); + result = prime * result + ((devType == null) ? 0 : devType.hashCode()); + result = prime * result + ((devUuid == null) ? 0 : devUuid.hashCode()); + result = prime * result + ((fsType == null) ? 0 : fsType.hashCode()); + result = prime * result + ((fsUuid == null) ? 0 : fsUuid.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((mountPoint == null) ? 0 : mountPoint.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + (int) (size ^ (size >>> 32)); + result = prime * result + ((vdsId == null) ? 0 : vdsId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if ((obj != null) && (obj instanceof StorageDevice)) { + StorageDevice storageDevice = (StorageDevice) obj; + if (ObjectUtils.objectsEqual(getId(), storageDevice.getId()) + && canCreateBrick == storageDevice.canCreateBrick + && (ObjectUtils.objectsEqual(getDescription(), storageDevice.getDescription())) + && (ObjectUtils.objectsEqual(getDevPath(), storageDevice.getDevPath())) + && (ObjectUtils.objectsEqual(getDevType(), storageDevice.getDevType())) + && (ObjectUtils.objectsEqual(getDevUuid(), storageDevice.getDevUuid())) + && (ObjectUtils.objectsEqual(getFsType(), storageDevice.getFsType())) + && (ObjectUtils.objectsEqual(getFsUuid(), storageDevice.getFsUuid())) + && (ObjectUtils.objectsEqual(getMountPoint(), storageDevice.getMountPoint())) + && (ObjectUtils.objectsEqual(getName(), storageDevice.getName())) + && size == storageDevice.size + && (ObjectUtils.objectsEqual(getVdsId(), storageDevice.getVdsId()))) { + return true; + } + } + return false; + } + + @Override + public String toString() { + return "StorageDevice [id=" + id + ", name=" + name + ", devUuid=" + devUuid + ", fsUuid=" + fsUuid + + ", vdsId=" + vdsId + ", description=" + description + ", devType=" + devType + ", devPath=" + devPath + + ", fsType=" + fsType + ", mountPoint=" + mountPoint + ", size=" + size + ", canCreateBrick=" + + canCreateBrick + "]"; + } +} 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 28d68b1..dcd93d3 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 @@ -132,6 +132,7 @@ import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotScheduleDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotConfigDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotDao; +import org.ovirt.engine.core.dao.gluster.StorageDeviceDao; import org.ovirt.engine.core.dao.network.InterfaceDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; import org.ovirt.engine.core.dao.network.NetworkDao; @@ -974,6 +975,15 @@ } /** + * Returns the singleton instance of {@link StorageDeviceDao}. + * + * @return the dao + */ + public StorageDeviceDao getStorageDeviceDao() { + return getDao(StorageDeviceDao.class); + } + + /** * Returns the singleton instance of {@link GlusterServerDao}. * * @return the dao diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDao.java new file mode 100644 index 0000000..f4ab2d0 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDao.java @@ -0,0 +1,22 @@ +package org.ovirt.engine.core.dao.gluster; + +import java.io.Serializable; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.MassOperationsDao; +import org.ovirt.engine.core.dao.ModificationDao; + +/** + * Interface for DB operations on Storage Device Entities + */ +public interface StorageDeviceDao extends ModificationDao<StorageDevice, Guid>, MassOperationsDao<StorageDevice, Guid>, Serializable { + + StorageDevice get(Guid id); + + List<StorageDevice> getStorageDevicesInHost(Guid hostId); + + void updateIsFreeFlag(Guid deviceId, boolean isFree); + + } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDaoDbFacadeImpl.java new file mode 100644 index 0000000..76413af --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/StorageDeviceDaoDbFacadeImpl.java @@ -0,0 +1,131 @@ +package org.ovirt.engine.core.dao.gluster; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper; +import org.ovirt.engine.core.dao.MassOperationsGenericDaoDbFacade; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; + +/** + * Implementation of the DB Facade for Storage Device. + */ +public class StorageDeviceDaoDbFacadeImpl extends MassOperationsGenericDaoDbFacade<StorageDevice, Guid> implements + StorageDeviceDao { + + private static final RowMapper<StorageDevice> storageDeviceRowMapper = new StorageDeviceRowMapper(); + + private static final class StorageDeviceRowMapper implements RowMapper<StorageDevice> { + @Override + public StorageDevice mapRow(ResultSet rs, int rowNum) + throws SQLException { + StorageDevice entity = new StorageDevice(); + entity.setId(getGuidDefaultEmpty(rs, "id")); + entity.setName(rs.getString("name")); + entity.setDevUuid(rs.getString("device_uuid")); + entity.setFsUuid(rs.getString("filesystem_uuid")); + entity.setVdsId(getGuidDefaultEmpty(rs, "vds_id")); + entity.setDescription(rs.getString("description")); + entity.setDevType(rs.getString("device_type")); + entity.setDevPath(rs.getString("device_path")); + entity.setFsType(rs.getString("filesystem_type")); + entity.setMountPoint(rs.getString("mount_point")); + entity.setSize(rs.getLong("size")); + entity.setCanCreateBrick(rs.getBoolean("is_free")); + return entity; + } + } + + public StorageDeviceDaoDbFacadeImpl() { + super("StorageDevice"); + setProcedureNameForGet("GetStorageDeviceById"); + setProcedureNameForRemove("DeleteStorageDeviceById"); + } + + @Override + public StorageDevice get(Guid id) { + return getCallsHandler().executeRead("GetStorageDeviceById", storageDeviceRowMapper, + createIdParameterMapper(id)); + } + + @Override + public List<StorageDevice> getStorageDevicesInHost(Guid hostId) { + return getCallsHandler().executeReadList("GetStorageDevicesByVdsId", + storageDeviceRowMapper, + getCustomMapSqlParameterSource().addValue("vds_id", hostId)); + } + + @Override + protected MapSqlParameterSource createFullParametersMapper(StorageDevice entity) { + return getCustomMapSqlParameterSource() + .addValue("id", entity.getId()) + .addValue("name", entity.getName()) + .addValue("device_uuid", entity.getDevUuid()) + .addValue("filesystem_uuid", entity.getFsUuid()) + .addValue("vds_id", entity.getVdsId()) + .addValue("description", entity.getDescription()) + .addValue("device_type", entity.getDevType()) + .addValue("device_path", entity.getDevPath()) + .addValue("filesystem_type", entity.getFsType()) + .addValue("mount_point", entity.getMountPoint()) + .addValue("size", entity.getSize()) + .addValue("is_free", entity.getCanCreateBrick()); + } + + @Override + protected MapSqlParameterSource createIdParameterMapper(Guid id) { + return getCustomMapSqlParameterSource().addValue("id", id); + } + + @Override + protected RowMapper<StorageDevice> createEntityRowMapper() { + return storageDeviceRowMapper; + } + + @Override + public void remove(Guid id) { + getCallsHandler().executeModification("DeleteStorageDeviceById", + createIdParameterMapper(id)); + } + + @Override + public void update(StorageDevice storageDevice) { + getCallsHandler().executeModification("UpdateStorageDevice", + getCustomMapSqlParameterSource() + .addValue("id", storageDevice.getId()) + .addValue("name", storageDevice.getName()) + .addValue("device_uuid", storageDevice.getDevUuid()) + .addValue("filesystem_uuid", storageDevice.getFsUuid()) + .addValue("description", storageDevice.getDescription()) + .addValue("device_type", storageDevice.getDevType()) + .addValue("device_path", storageDevice.getDevPath()) + .addValue("filesystem_type", storageDevice.getFsType()) + .addValue("mount_point", storageDevice.getMountPoint()) + .addValue("size", storageDevice.getSize()) + .addValue("is_free", storageDevice.getCanCreateBrick())); + + } + + @Override + public void updateIsFreeFlag(Guid deviceId, boolean isFree) { + getCallsHandler().executeModification("UpdateIsFreeFlagById", + getCustomMapSqlParameterSource() + .addValue("id", deviceId) + .addValue("is_free", isFree)); + } + + @Override + public MapSqlParameterMapper<StorageDevice> getBatchMapper() { + return new MapSqlParameterMapper<StorageDevice>() { + @Override + public MapSqlParameterSource map(StorageDevice entity) { + return createFullParametersMapper(entity); + } + }; + } + +} 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 8989db5..e1fb8a1 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 @@ -91,3 +91,4 @@ VdsKdumpStatusDao=org.ovirt.engine.core.dao.VdsKdumpStatusDaoDbFacadeImpl DiskProfileDao=org.ovirt.engine.core.dao.profiles.DiskProfileDaoDbFacadeImpl CpuProfileDao=org.ovirt.engine.core.dao.profiles.CpuProfileDaoDbFacadeImpl +StorageDeviceDao=org.ovirt.engine.core.dao.gluster.StorageDeviceDaoDbFacadeImpl diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/StoageDeviceDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/StoageDeviceDaoTest.java new file mode 100644 index 0000000..5cadd58 --- /dev/null +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/StoageDeviceDaoTest.java @@ -0,0 +1,102 @@ +package org.ovirt.engine.core.dao.gluster; + +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.gluster.StorageDevice; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.BaseDAOTestCase; +import org.ovirt.engine.core.dao.FixturesTool; + +public class StoageDeviceDaoTest extends BaseDAOTestCase { + + private static final Guid NEW_STORAGE_DEVICE_ID = new Guid("00000000-0000-0000-0000-000000000003"); + private static final Guid EXISTING_STORAGE_DEVICE_ID_1 = new Guid("00000000-0000-0000-0000-000000000001"); + private static final Guid EXISTING_STORAGE_DEVICE_ID_2 = new Guid("00000000-0000-0000-0000-000000000002"); + private static final Guid NON_EXISTING_STORAGE_DEVICE_ID = new Guid("00000000-0000-0000-0000-000000000000"); + + private StorageDeviceDao dao; + + private StorageDevice getStorageDevice() { + StorageDevice storageDevice = new StorageDevice(); + storageDevice.setId(NEW_STORAGE_DEVICE_ID); + storageDevice.setCanCreateBrick(true); + storageDevice.setDescription("Test Device"); + storageDevice.setDevPath("/dev/sdc"); + storageDevice.setDevType("SCSI"); + storageDevice.setDevUuid("ocIYJv-Ej8x-vDPm-kcGr-sHqy-jjeo-Jt2hTj"); + storageDevice.setName("sdc"); + storageDevice.setSize(10000L); + storageDevice.setVdsId(FixturesTool.GLUSTER_BRICK_SERVER1); + return storageDevice; + + } + @Override + public void setUp() throws Exception { + super.setUp(); + dao = dbFacade.getStorageDeviceDao(); + } + + @Test + public void testGetById(){ + StorageDevice storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_1); + assertNotNull("Failed to retrive storage device", storageDevice); + assertEquals("Failed to retrive corrective storage device", EXISTING_STORAGE_DEVICE_ID_1, storageDevice.getId()); + + storageDevice = dao.get(NON_EXISTING_STORAGE_DEVICE_ID); + assertNull(storageDevice); + } + + @Test + public void testSave() { + StorageDevice storageDevice = getStorageDevice(); + dao.save(storageDevice); + StorageDevice storageDeviceFromDB = dao.get(storageDevice.getId()); + assertEquals("Storage device is not saved correctly", storageDevice, storageDeviceFromDB); + } + + @Test + public void testGetStorageDevicesInHost() { + List<StorageDevice> storageDevices = dao.getStorageDevicesInHost(FixturesTool.GLUSTER_BRICK_SERVER1); + assertEquals("Fails to retrive all the storage devices for host", 2, storageDevices.size()); + } + + @Test + public void testRemove() { + StorageDevice storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertNotNull("storage device doesn't exists", storageDevice); + dao.remove(EXISTING_STORAGE_DEVICE_ID_2); + storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertNull("Failed to remove storage device", storageDevice); + } + + @Test + public void testUpdateStorageDevice() { + StorageDevice storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertNotNull("storage device doesn't exists", storageDevice); + storageDevice.setSize(1234567L); + storageDevice.setMountPoint("/gluster-bricks/brick1"); + storageDevice.setFsType("xfs"); + dao.update(storageDevice); + StorageDevice storageDeviceFromDB = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertEquals("Failed to update Storage Device", storageDevice, storageDeviceFromDB); + } + + @Test + public void updateIsFreeFlag() { + StorageDevice storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertNotNull("storage device doesn't exists", storageDevice); + dao.updateIsFreeFlag(EXISTING_STORAGE_DEVICE_ID_2, false); + storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertFalse("canCreateBrick is not updated", storageDevice.getCanCreateBrick()); + dao.updateIsFreeFlag(EXISTING_STORAGE_DEVICE_ID_2, true); + storageDevice = dao.get(EXISTING_STORAGE_DEVICE_ID_2); + assertTrue("canCreateBrick is not updated", storageDevice.getCanCreateBrick()); + } +} diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index abbcfe2..0c41686 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -7364,4 +7364,52 @@ </row> </table> + <table name="storage_device"> + <column>id</column> + <column>name</column> + <column>device_uuid</column> + <column>filesystem_uuid</column> + <column>vds_id</column> + <column>description</column> + <column>device_type</column> + <column>device_path</column> + <column>filesystem_type</column> + <column>mount_point</column> + <column>size</column> + <column>is_free</column> + <column>_create_date</column> + <column>_update_date</column> + <row> + <value>00000000-0000-0000-0000-000000000001</value> + <value>sda</value> + <null/> + <null/> + <value>23f6d691-5dfb-472b-86dc-9e1d2d3c18f3</value> + <value>DELL PERC H310 (disk)</value> + <value>SCSI</value> + <value>/dev/sda</value> + <null/> + <null/> + <value>3814400</value> + <value>true</value> + <value>2015-02-10 14:49:55.806609+05:30 </value> + <value>2015-02-10 16:35:15.362494+05:30</value> + </row> + <row> + <value>00000000-0000-0000-0000-000000000002</value> + <value>sdb</value> + <null/> + <null/> + <value>23f6d691-5dfb-472b-86dc-9e1d2d3c18f3</value> + <value>DELL PERC H310 (disk)</value> + <value>SCSI</value> + <value>/dev/sdb</value> + <null/> + <null/> + <value>34400</value> + <value>true</value> + <value>2015-02-10 14:49:55.806609+05:30 </value> + <value>2015-02-10 16:35:15.362494+05:30</value> + </row> + </table> </dataset> diff --git a/packaging/dbscripts/storage_device_sp.sql b/packaging/dbscripts/storage_device_sp.sql new file mode 100644 index 0000000..4485bd8 --- /dev/null +++ b/packaging/dbscripts/storage_device_sp.sql @@ -0,0 +1,97 @@ +/* ---------------------------------------------------------------- + Stored procedures for database operations on Storage Device + related table: storage_device +----------------------------------------------------------------*/ + +Create or replace FUNCTION InsertStorageDevice(v_id UUID, + v_name VARCHAR(1000), + v_device_uuid VARCHAR(38), + v_filesystem_uuid VARCHAR(38), + v_vds_id UUID, + v_description VARCHAR(2000), + v_device_type VARCHAR(50), + v_device_path VARCHAR(4096), + v_filesystem_type VARCHAR(50), + v_mount_point VARCHAR(4096), + v_size BIGINT, + v_is_free BOOLEAN) +RETURNS VOID +AS $procedure$ +BEGIN + INSERT INTO storage_device(id, name, device_uuid, filesystem_uuid, vds_id, + description, device_type, device_path, filesystem_type, mount_point, size, is_free) + VALUES (v_id, v_name, v_device_uuid, v_filesystem_uuid, v_vds_id, v_description, v_device_type, + v_device_path, v_filesystem_type, v_mount_point, v_size, v_is_free); +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION UpdateStorageDevice(v_id UUID, + v_name VARCHAR(1000), + v_device_uuid VARCHAR(38), + v_filesystem_uuid VARCHAR(38), + v_description VARCHAR(2000), + v_device_type VARCHAR(50), + v_device_path VARCHAR(4096), + v_filesystem_type VARCHAR(50), + v_mount_point VARCHAR(4096), + v_size BIGINT, + v_is_free BOOLEAN) +RETURNS VOID +AS $procedure$ +BEGIN + UPDATE storage_device + SET name = v_name, + device_uuid = v_device_uuid, + filesystem_uuid = v_filesystem_uuid, + description = v_description, + device_type = v_device_type, + device_path = v_device_path, + filesystem_type = v_filesystem_type, + mount_point = v_mount_point, + size = v_size, + is_free = v_is_free, + _update_date = LOCALTIMESTAMP + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION GetStorageDeviceById(v_id UUID) +RETURNS SETOF storage_device STABLE +AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM storage_device + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION GetStorageDevicesByVdsId(v_vds_id UUID) +RETURNS SETOF storage_device STABLE +AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM storage_device + WHERE vds_id = v_vds_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION DeleteStorageDeviceById(v_id UUID) + RETURNS VOID + AS $procedure$ +BEGIN + DELETE FROM storage_device + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION UpdateIsFreeFlagById(v_id UUID, + v_is_free BOOLEAN) +RETURNS VOID +AS $procedure$ +BEGIN + UPDATE storage_device + SET is_free = v_is_free, + _update_date = LOCALTIMESTAMP + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; diff --git a/packaging/dbscripts/upgrade/03_05_1360_add_storage_device_tables.sql b/packaging/dbscripts/upgrade/03_05_1360_add_storage_device_tables.sql new file mode 100644 index 0000000..01dacb9 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_05_1360_add_storage_device_tables.sql @@ -0,0 +1,22 @@ +-- Add storage_device table +CREATE TABLE storage_device +( + id UUID NOT NULL, + name VARCHAR(1000) NOT NULL, + device_uuid VARCHAR(38), + filesystem_uuid VARCHAR(38), + vds_id UUID NOT NULL, + description VARCHAR(2000), + device_type VARCHAR(50), + device_path VARCHAR(4096), + filesystem_type VARCHAR(50), + mount_point VARCHAR(4096), + size BIGINT, + is_free BOOLEAN, + _create_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP, + _update_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP, + CONSTRAINT pk_storage_device PRIMARY KEY(id), + FOREIGN KEY (vds_id) REFERENCES vds_static(vds_id) ON DELETE CASCADE +) WITH OIDS; + +select fn_db_create_index('IDX_storage_device_vds_id', 'storage_device', 'vds_id', ''); -- To view, visit https://gerrit.ovirt.org/39704 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie95a12239429dd0c7f3282161221e8b8f639cee9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5-gluster Gerrit-Owner: Ramesh N <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
