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

Reply via email to