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
