Francesco Romani has uploaded a new change for review. Change subject: WIP: core: bulk queries for VMConsoleProxyServlet #2 ......................................................................
WIP: core: bulk queries for VMConsoleProxyServlet #2 WORK IN PROGRESS Introduce new entity, VMConsole, to represent the console endpoint to connect using virtio serial console Add bulk queries to retrieve all of them for the consumption from VMConsoleProxyServlet. Change-Id: I905b88a1bec0883a6826b913d81bc21520bf406f Signed-off-by: Francesco Romani <[email protected]> --- A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.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/VmConsoleDAO.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java M packaging/dbscripts/create_views.sql A packaging/dbscripts/vm_consoles_sp.sql 6 files changed, 187 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/40699/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java new file mode 100644 index 0000000..6a0e6ff --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java @@ -0,0 +1,61 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.common.utils.ObjectUtils; +import org.ovirt.engine.core.compat.Guid; + + +public class VmConsole extends IVdcQueryable { + private static final long serialVersionUID = -2753306386502558044L; // FIXME + + private Guid vm_guid; + + private String vm_name; + + private String address; + + private String name; + + public void setVmGuid(Guid vm_guid) { this.vm_guid = vm_guid; } + + public Guid getVmGuid() { return vm_guid; } + + public void setAddress(String address) { this.address = address; } + + public String getAddress() { return address; } + + public void setVmName(String vm_name) { this.vm_name = vm_name; } + + public String getVmName() { return vm_name; } + + public void setName(String name) { this.name = name; } + + public String getName() { return name; } + + public VmConsole() { + vm_guid = Guid.Empty; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + VmConsole other = (VmConsole) obj; + return ObjectUtils.objectsEqual(vm_guid, other.vm_guid) && + ObjectUtils.objectsEqual(vm_name, other.vm_name) && + ObjectUtils.objectsEqual(address, other.address) && + ObjectUtils.objectsEqual(name, other.name); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = prime; + result = prime * result + ((vm_guid == null) ? 0 : vm_guid.hashCode()); + result = prime * result + ((vm_name == null) ? 0 : vm_name.hashCode()); + result = prime * result + ((address == null) ? 0 : address.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + +} 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 53a876a..5675a8e 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 @@ -39,6 +39,7 @@ import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.businessentities.VdsStatistics; +import org.ovirt.engine.core.common.businessentities.VmConsole; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.businessentities.VmIcon; @@ -125,6 +126,7 @@ import org.ovirt.engine.core.dao.VdsStatisticsDAO; import org.ovirt.engine.core.dao.VmAndTemplatesGenerationsDAO; import org.ovirt.engine.core.dao.VmDAO; +import org.ovirt.engine.core.dao.VmConsoleDAO; import org.ovirt.engine.core.dao.VmDeviceDAO; import org.ovirt.engine.core.dao.VmDynamicDAO; import org.ovirt.engine.core.dao.VmGuestAgentInterfaceDao; @@ -238,6 +240,7 @@ put(UserProfile.class, UserProfileDAO.class); put(VmIcon.class, VmIconDao.class); put(VmIconDefault.class, VmIconDefaultDao.class); + put(VmConsole.class, VmConsoleDAO.class); } }; @@ -440,6 +443,15 @@ } /** + * Returns the singleton instance of {@link VmConsoleDAO}. + * + * @return the dao + */ + public VmConsoleDAO getVmConsoleDao() { + return getDao(VmConsoleDAO.class); + } + + /** * Returns the singleton instance of {@link VdsDAO}. * * @return the dao diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java new file mode 100644 index 0000000..e0fcb3f --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java @@ -0,0 +1,29 @@ +package org.ovirt.engine.core.dao; + +import org.ovirt.engine.core.common.businessentities.VmConsole; +import org.ovirt.engine.core.compat.Guid; + +import java.util.List; + +public interface VmConsoleDAO extends DAO { + /** + * Retrieves the VM console with the specified name. + * + * @param userGuid + * guid of the user performing the query + * @param name + * the name + * @return the VM console, or <code>null</code> if the name was invalid + */ + VmConsole get(Guid userGuid, String name); + + /** + * Retrieves all vm consoles. + * + * @param userGuid + * guid of the user performing the query + * + * @return the collection of all vm consoles + */ + List<VmConsole> getAllForUser(Guid userGuid); +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java new file mode 100644 index 0000000..54e428c --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java @@ -0,0 +1,50 @@ +package org.ovirt.engine.core.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +import javax.inject.Named; +import javax.inject.Singleton; + +import org.ovirt.engine.core.common.businessentities.VmConsole; +import org.ovirt.engine.core.compat.Guid; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; + +@Named +@Singleton +public class VmConsoleDAODbFacadeImpl extends BaseDAODbFacade implements VmConsoleDAO { + + private static class VmConsoleRowMapper implements RowMapper<VmConsole> { + + public static final VmConsoleRowMapper instance = new VmConsoleRowMapper(); + + @Override + public VmConsole mapRow(ResultSet rs, int rowNum) throws SQLException { + VmConsole console = new VmConsole(); + console.setVmGuid(getGuidDefaultEmpty(rs, "vm_guid")); + console.setVmName(rs.getString("vm_name")); + console.setAddress(rs.getString("address")); + console.setName(rs.getString("name")); + return console; + } + } + + @Override + public VmConsole get(Guid userGuid, String name) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("user_id", userGuid) + .addValue("name", name); + + return getCallsHandler().executeRead("GetVmConsoleForUserByName", VmConsoleRowMapper.instance, parameterSource); + } + + @Override + public List<VmConsole> getAllForUser(Guid userGuid) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("user_id", userGuid); + + return getCallsHandler().executeReadList("GetAllVmConsolesForUser", VmConsoleRowMapper.instance, parameterSource); + } +} diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index 3ec0a6f..aa9e16b 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -3257,3 +3257,7 @@ FROM user_profiles INNER JOIN users ON user_profiles.user_id = users.user_id; +CREATE OR REPLACE VIEW vm_consoles AS +SELECT vms.vm_guid, vms.vm_name, vds_interface.addr AS address, '' AS console_name +FROM vms +INNER JOIN vds_interface ON vms.run_on_vds = vds_interface.vds_id; diff --git a/packaging/dbscripts/vm_consoles_sp.sql b/packaging/dbscripts/vm_consoles_sp.sql new file mode 100644 index 0000000..b2f6889 --- /dev/null +++ b/packaging/dbscripts/vm_consoles_sp.sql @@ -0,0 +1,31 @@ + +---------------------------------------------------------------- +-- [vm_consoles] Table +-- + + +Create or replace FUNCTION GetVmConsoleForUserByName(v_user_id UUID, v_name VARCHAR(50)) +RETURNS SETOF vm_consoles STABLE +AS $procedure$ +BEGIN + RETURN QUERY + SELECT vm_consoles.* + FROM vm_consoles + inner join permissions on vm_consoles.vm_guid = permissions.object_id + WHERE permissions.ad_element_id = v_user_id + AND vm_consoles.name = v_name +END; $procedure$ +LANGUAGE plpgsql; + + + +Create or replace FUNCTION GetAllVmConsolesForUser(v_user_id UUID) RETURNS SETOF vm_consoles STABLE + AS $procedure$ +BEGIN + RETURN QUERY + SELECT vm_consoles.* + FROM vm_consoles + inner join permissions on vm_consoles.vm_guid = permissions.object_id + WHERE permissions.ad_element_id = v_user_id; +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit https://gerrit.ovirt.org/40699 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I905b88a1bec0883a6826b913d81bc21520bf406f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Francesco Romani <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
