Martin Betak has uploaded a new change for review.

Change subject: dal: Add HostDev passthrough support #2
......................................................................

dal: Add HostDev passthrough support #2

Added HostDevice and related VmDevice stored procedures and corresponding
DbFacadeImpl methods.

Change-Id: I000c54776b4c3f8dc78608481b5700a895c3d478
Signed-off-by: Martin Betak <[email protected]>
---
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
M packaging/dbscripts/host_device_sp.sql
M packaging/dbscripts/vm_device_sp.sql
6 files changed, 143 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/80/38480/1

diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDao.java
index e845c6c..aaa2c374 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDao.java
@@ -10,5 +10,13 @@
 
     List<HostDevice> getHostDevicesByHostId(Guid hostId);
 
+    List<HostDevice> getHostDevicesByHostIdAndIommuGroup(Guid hostId, int 
iommuGroup);
+
     HostDevice getHostDeviceByHostIdAndDeviceName(Guid hostId, String 
deviceName);
+
+    boolean checkVmHostDeviceAvailability(Guid vmId, Guid hostId);
+
+    void markHostDevicesUsedByVmId(Guid vmId);
+
+    void freeHostDevicesUsedByVmId(Guid vmId);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDaoDbFacadeImpl.java
index 9c52ce3..20a1eaa 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/HostDeviceDaoDbFacadeImpl.java
@@ -52,10 +52,36 @@
     }
 
     @Override
+    public List<HostDevice> getHostDevicesByHostIdAndIommuGroup(Guid hostId, 
int iommuGroup) {
+        return 
getCallsHandler().executeReadList("GetHostDevicesByHostIdAndIommuGroup",
+                createEntityRowMapper(),
+                getCustomMapSqlParameterSource().addValue("host_id", 
hostId).addValue("iommu_group", iommuGroup));
+    }
+
+    @Override
     public HostDevice getHostDeviceByHostIdAndDeviceName(Guid hostId, String 
deviceName) {
         return get(new HostDeviceId(hostId, deviceName));
     }
 
+    @Override
+    public boolean checkVmHostDeviceAvailability(Guid vmId, Guid hostId) {
+        return getCallsHandler().executeRead("CheckVmHostDeviceAvailability",
+                createBooleanMapper(),
+                getCustomMapSqlParameterSource().addValue("vm_id", 
vmId).addValue("host_id", hostId));
+    }
+
+    @Override
+    public void markHostDevicesUsedByVmId(Guid vmId) {
+        getCallsHandler().executeModification("MarkHostDevicesUsedByVmId",
+                getCustomMapSqlParameterSource().addValue("vm_id", vmId));
+    }
+
+    @Override
+    public void freeHostDevicesUsedByVmId(Guid vmId) {
+        getCallsHandler().executeModification("FreeHostDevicesUsedByVmId",
+                getCustomMapSqlParameterSource().addValue("vm_id", vmId));
+    }
+
     private static class HostDeviceRowMapper implements RowMapper<HostDevice> {
 
         public static final HostDeviceRowMapper instance = new 
HostDeviceRowMapper();
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
index ef90a84..21de8cf 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
@@ -31,12 +31,18 @@
             Guid userID,
             boolean isFiltered);
 
+    List<VmDevice> getVmDeviceByType(VmDeviceGeneralType type);
+
     List<VmDevice> getUnmanagedDevicesByVmId(Guid vmId);
+
+    boolean existsVmDeviceByVmIdAndType(Guid vmId, VmDeviceGeneralType type);
 
     boolean isMemBalloonEnabled(Guid vmId);
 
     void removeAll(List<VmDeviceId> removedDeviceIds);
 
+    void removeVmDevicesByVmIdAndType(Guid vmId, VmDeviceGeneralType type);
+
     void saveAll(List<VmDevice> newVmDevices);
 
     /**
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
index 31c09d7..703a0ff 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
@@ -110,11 +110,26 @@
     }
 
     @Override
+    public List<VmDevice> getVmDeviceByType(VmDeviceGeneralType type) {
+        return getCallsHandler().executeReadList("GetVmDeviceByType",
+                createEntityRowMapper(),
+                getCustomMapSqlParameterSource().addValue("type", 
type.getValue()));
+    }
+
+    @Override
     public List<VmDevice> getUnmanagedDevicesByVmId(Guid vmId) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
                 .addValue("vm_id", vmId);
         return getCallsHandler().executeReadList("GetVmUnmanagedDevicesByVmId",
                 createEntityRowMapper(), parameterSource);
+    }
+
+    @Override
+    public boolean existsVmDeviceByVmIdAndType(Guid vmId, VmDeviceGeneralType 
type) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("vm_id", vmId).addValue("type", type.getValue());
+        return getCallsHandler().executeRead("ExistsVmDeviceByVmIdAndType",
+                createBooleanMapper(), parameterSource);
     }
 
     @Override
@@ -174,6 +189,13 @@
     }
 
     @Override
+    public void removeVmDevicesByVmIdAndType(Guid vmId, VmDeviceGeneralType 
type) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("vm_id", vmId).addValue("type", type.getValue());
+        getCallsHandler().executeModification("DeleteVmDevicesByVmIdAndType", 
parameterSource);
+    }
+
+    @Override
     public void saveAll(List<VmDevice> newVmDevices) {
         for (VmDevice vmDevice : newVmDevices) {
             save(vmDevice);
diff --git a/packaging/dbscripts/host_device_sp.sql 
b/packaging/dbscripts/host_device_sp.sql
index 8fbd6d0..a13c8b8 100644
--- a/packaging/dbscripts/host_device_sp.sql
+++ b/packaging/dbscripts/host_device_sp.sql
@@ -102,6 +102,17 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+CREATE OR REPLACE FUNCTION GetHostDevicesByHostIdAndIommuGroup(v_host_id UUID, 
v_iommu_group INTEGER)
+RETURNS SETOF host_device STABLE
+AS $procedure$
+BEGIN
+  RETURN QUERY
+  SELECT  *
+  FROM    host_device
+  WHERE   host_id = v_host_id AND iommu_group = v_iommu_group;
+END; $procedure$
+LANGUAGE plpgsql;
+
 CREATE OR REPLACE FUNCTION GetHostDeviceByHostIdAndDeviceName(v_host_id UUID, 
v_device_name VARCHAR(255))
 RETURNS SETOF host_device STABLE
 AS $procedure$
@@ -121,4 +132,42 @@
   SELECT  *
   FROM    host_device;
 END; $procedure$
-LANGUAGE plpgsql;
\ No newline at end of file
+LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION CheckVmHostDeviceAvailability(v_vm_id UUID, 
v_host_id UUID)
+RETURNS BOOLEAN STABLE
+AS $procedure$
+BEGIN
+  RETURN NOT EXISTS(
+    SELECT 1
+    FROM vm_device
+    WHERE vm_id = v_vm_id AND
+          device IN (SELECT device_name
+                     FROM host_device
+                     WHERE host_id = v_host_id AND vm_id NOT IN (NULL, 
v_vm_id))); -- device free or already belonging to the vm
+END; $procedure$
+LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION MarkHostDevicesUsedByVmId(v_vm_id UUID)
+RETURNS VOID
+AS $procedure$
+BEGIN
+  UPDATE host_device
+  SET vm_id = v_vm_id
+  WHERE device_name IN (SELECT device
+                        FROM vm_device
+                        WHERE vm_id = v_vm_id AND type = 'hostdev');
+END; $procedure$
+LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION FreeHostDevicesUsedByVmId(v_vm_id UUID)
+RETURNS VOID
+AS $procedure$
+BEGIN
+  UPDATE host_device
+  SET vm_id = NULL
+  WHERE device_name IN (SELECT device
+                        FROM vm_device
+                        WHERE vm_id = v_vm_id AND type = 'hostdev');
+END; $procedure$
+LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/vm_device_sp.sql 
b/packaging/dbscripts/vm_device_sp.sql
index 19212f9..6da25f0 100644
--- a/packaging/dbscripts/vm_device_sp.sql
+++ b/packaging/dbscripts/vm_device_sp.sql
@@ -150,6 +150,16 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+CREATE OR REPLACE FUNCTION DeleteVmDevicesByVmIdAndType(v_vm_id UUID, v_type 
VARCHAR(30))
+RETURNS VOID
+AS $procedure$
+BEGIN
+    DELETE
+    FROM   vm_device
+    WHERE  vm_id = v_vm_id AND type = v_type;
+END; $procedure$
+LANGUAGE plpgsql;
+
 Create or replace FUNCTION GetAllFromVmDevice() RETURNS SETOF vm_device_view 
STABLE
 AS $procedure$
 BEGIN
@@ -244,3 +254,24 @@
 $BODY$
 LANGUAGE 'plpgsql';
 
+CREATE OR REPLACE FUNCTION ExistsVmDeviceByVmIdAndType(v_vm_id UUID, v_type 
VARCHAR(30))
+RETURNS BOOLEAN STABLE
+AS $procedure$
+BEGIN
+  RETURN EXISTS(
+    SELECT 1
+    FROM vm_device
+    WHERE vm_id = v_vm_id AND type = v_type);
+END; $procedure$
+LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION GetVmDeviceByType(v_type VARCHAR(30))
+RETURNS SETOF vm_device_view STABLE
+AS $procedure$
+BEGIN
+    RETURN QUERY
+    SELECT *
+    FROM   vm_device_view
+    WHERE  type = v_type;
+END; $procedure$
+LANGUAGE plpgsql;
\ No newline at end of file


-- 
To view, visit https://gerrit.ovirt.org/38480
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I000c54776b4c3f8dc78608481b5700a895c3d478
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Betak <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to