Greg Padgett has uploaded a new change for review. Change subject: [WIP] core, db: add vm_jobs table, DAO, and VDS object ......................................................................
[WIP] core, db: add vm_jobs table, DAO, and VDS object Add vm_jobs table and DAO for supporting Live Merge. Change-Id: I07734d4c4026062db7a505c1212553abf0b203ac Bug-Url: https://bugzilla.redhat.com/?????? Signed-off-by: Adam Litke <ali...@redhat.com> Signed-off-by: Greg Padgett <gpadg...@redhat.com> --- A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJob.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJob.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.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/VmJobDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml A packaging/dbscripts/upgrade/03_05_0330_create_vm_jobs_table.sql M packaging/dbscripts/vms_sp.sql 13 files changed, 591 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/04/26904/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJob.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJob.java new file mode 100644 index 0000000..3cea173 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJob.java @@ -0,0 +1,94 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.common.utils.ObjectUtils; +import org.ovirt.engine.core.compat.Guid; + +public class VmBlockJob extends VmJob { + + private static final long serialVersionUID = -7009231492231684166L; + + private VmBlockJobType blockJobType; + private Long bandwidth; + private Long cursorCur; + private Long cursorEnd; + private Guid imageGroupId; + + public VmBlockJob() { + super(); + blockJobType = VmBlockJobType.UNKNOWN; + bandwidth = cursorCur = cursorEnd = 0L; + imageGroupId = Guid.Empty; + } + + public VmBlockJobType getBlockJobType() { + return blockJobType; + } + + public void setBlockJobType(VmBlockJobType blockJobType) { + this.blockJobType = blockJobType; + } + + public Long getBandwidth() { + return bandwidth; + } + + public void setBandwidth(Long bandwidth) { + this.bandwidth = bandwidth; + } + + public Long getCursorCur() { + return cursorCur; + } + + public void setCursorCur(Long cursorCur) { + this.cursorCur = cursorCur; + } + + public Long getCursorEnd() { + return cursorEnd; + } + + public void setCursorEnd(Long cursorEnd) { + this.cursorEnd = cursorEnd; + } + + public Guid getImageGroupId() { + return imageGroupId; + } + + public void setImageGroupId(Guid imageGroupId) { + this.imageGroupId = imageGroupId; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + VmBlockJob other = (VmBlockJob) obj; + return (super.equals(other) + && ObjectUtils.objectsEqual(bandwidth, other.bandwidth) + && blockJobType == other.blockJobType + && ObjectUtils.objectsEqual(cursorCur, other.cursorCur) + && ObjectUtils.objectsEqual(cursorEnd, other.cursorEnd) + && ObjectUtils.objectsEqual(imageGroupId, other.imageGroupId)); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (blockJobType == null ? 0 : blockJobType.hashCode()); + result = prime * result + (bandwidth == null ? 0 : bandwidth.hashCode()); + result = prime * result + (cursorCur == null ? 0 : cursorCur.hashCode()); + result = prime * result + (cursorEnd == null ? 0 : cursorEnd.hashCode()); + result = prime * result + (imageGroupId == null ? 0 : imageGroupId.hashCode()); + return result; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java new file mode 100644 index 0000000..f42d8b5 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBlockJobType.java @@ -0,0 +1,46 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.util.HashMap; + +public enum VmBlockJobType implements Identifiable { + UNKNOWN(0), + COPY(1), + REBASE(2), + COMMIT(3); + + private final int blockJobType; + private static final java.util.HashMap<Integer, VmBlockJobType> mappings = + new HashMap<Integer, VmBlockJobType>(); + + static { + for (VmBlockJobType component : values()) { + mappings.put(component.getValue(), component); + } + } + + public static VmBlockJobType getByName(String name) { + if (name == null || name.length() == 0) { + return null; + } else { + for (VmBlockJobType vmBlockJobType : VmBlockJobType.values()) { + if (vmBlockJobType.name().equalsIgnoreCase(name)) { + return vmBlockJobType; + } + } + } + return null; + } + + public static VmBlockJobType forValue(int value) { + return mappings.get(value); + } + + private VmBlockJobType(int blockJobType) { + this.blockJobType = blockJobType; + } + + @Override + public int getValue() { + return blockJobType; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJob.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJob.java new file mode 100644 index 0000000..68e0e49 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJob.java @@ -0,0 +1,81 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.common.utils.ObjectUtils; +import org.ovirt.engine.core.compat.Guid; + +public class VmJob implements BusinessEntity<Guid> { + + private static final long serialVersionUID = -1748312497527481706L; + private Guid id; + private Guid vmId; + //private VmJobState jobState; + private VmJobType jobType; + + public VmJob() { + id = Guid.Empty; + vmId = Guid.Empty; + //jobState = VmJobState.UNKNOWN; + } + + @Override + public Guid getId() { + return id; + } + + @Override + public void setId(Guid id) { + this.id = id; + } + + public Object getVmId() { + return vmId; + } + + public void setVmId(Guid id) { + this.vmId = id; + } +/* + // TODO GP job state references + public VmJobState getJobState() { + return jobState; + } + + public void setJobState(VmJobState jobState) { + this.jobState = jobState; + } +*/ + public VmJobType getJobType() { + return jobType; + } + + public void setJobType(VmJobType jobType) { + this.jobType = jobType; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + VmJob other = (VmJob) obj; + return (ObjectUtils.objectsEqual(id, other.id) + && ObjectUtils.objectsEqual(vmId, other.vmId) + && jobType == other.jobType); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (id == null ? 0 : id.hashCode()); + result = prime * result + (vmId == null ? 0 : vmId.hashCode()); + result = prime * result + (jobType == null ? 0 : jobType.hashCode()); + return result; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java new file mode 100644 index 0000000..3afe1c7 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobState.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.util.HashMap; + +public enum VmJobState implements Identifiable { + UNKNOWN(0), + NORMAL(1); + + private final int jobState; + private static final java.util.HashMap<Integer, VmJobState> mappings = + new HashMap<Integer, VmJobState>(); + + static { + for (VmJobState component : values()) { + mappings.put(component.getValue(), component); + } + } + + public static VmJobState getByName(String name) { + if (name == null || name.length() == 0) { + return null; + } else { + for (VmJobState vmJobState : VmJobState.values()) { + if (vmJobState.name().equalsIgnoreCase(name)) { + return vmJobState; + } + } + } + return null; + } + + public static VmJobState forValue(int value) { + return mappings.get(value); + } + + private VmJobState(int jobState) { + this.jobState = jobState; + } + + @Override + public int getValue() { + return jobState; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java new file mode 100644 index 0000000..8640da0 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmJobType.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.util.HashMap; + +public enum VmJobType implements Identifiable { + UNKNOWN(0), + BLOCK(1); + + private final int jobType; + private static final java.util.HashMap<Integer, VmJobType> mappings = + new HashMap<Integer, VmJobType>(); + + static { + for (VmJobType component : values()) { + mappings.put(component.getValue(), component); + } + } + + public static VmJobType getByName(String name) { + if (name == null || name.length() == 0) { + return null; + } else { + for (VmJobType vmJobType : VmJobType.values()) { + if (vmJobType.name().equalsIgnoreCase(name)) { + return vmJobType; + } + } + } + return null; + } + + public static VmJobType forValue(int value) { + return mappings.get(value); + } + + private VmJobType(int jobType) { + this.jobType = jobType; + } + + @Override + public int getValue() { + return jobType; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java index 14425d1..8e984ad 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatistics.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.common.businessentities; import java.util.ArrayList; +import java.util.List; import org.ovirt.engine.core.common.businessentities.comparators.BusinessEntityGuidComparator; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; @@ -11,6 +12,7 @@ private static final long serialVersionUID = -7480866662740734452L; private Double cpu_sysField; + private List<VmJob> vmJobs; // NOT PERSISTED private VmBalloonInfo vmBalloonInfo; @@ -190,6 +192,14 @@ return BusinessEntityGuidComparator.<VmStatistics>newInstance().compare(this, o); } + public List<VmJob> getVmJobs() { + return vmJobs; + } + + public void setVmJobs(List<VmJob> vmJobs) { + this.vmJobs = vmJobs; + } + public VmBalloonInfo getVmBalloonInfo() { return vmBalloonInfo; } @@ -197,4 +207,5 @@ public void setVmBalloonInfo(VmBalloonInfo vmBalloonInfo) { this.vmBalloonInfo = vmBalloonInfo; } + } 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 cb9baed..cb3338b 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 @@ -34,6 +34,7 @@ import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.businessentities.VmInit; +import org.ovirt.engine.core.common.businessentities.VmJob; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.businessentities.VmTemplate; @@ -101,6 +102,7 @@ import org.ovirt.engine.core.dao.VmDynamicDAO; import org.ovirt.engine.core.dao.VmGuestAgentInterfaceDao; import org.ovirt.engine.core.dao.VmInitDAO; +import org.ovirt.engine.core.dao.VmJobDao; import org.ovirt.engine.core.dao.VmPoolDAO; import org.ovirt.engine.core.dao.VmStaticDAO; import org.ovirt.engine.core.dao.VmStatisticsDAO; @@ -180,6 +182,7 @@ put(IscsiBond.class, IscsiBondDao.class); put(VmInit.class, VmInitDAO.class); put(CommandEntity.class, CommandEntityDao.class); + put(VmJob.class, VmJobDao.class); } }; @@ -799,6 +802,15 @@ } /** + * Returns the singleton instance of {@link VmJobDao}. + * + * @return the dao + */ + public VmJobDao getVmJobDao() { + return getDao(VmJobDao.class); + } + + /** * * Returns the singleton instance of {@link JobDao}. * diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDao.java new file mode 100644 index 0000000..f9a361d --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDao.java @@ -0,0 +1,31 @@ +package org.ovirt.engine.core.dao; + +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.VmJob; +import org.ovirt.engine.core.compat.Guid; + +public interface VmJobDao extends GenericDao<VmJob, Guid>, MassOperationsDao<VmJob, Guid> { + /* + * Retrieves a list of VmJobs associated with a VM + * + * @param vm + * The Vm UUID + * + * @returns A list of Vm Jobs + */ + List<VmJob> getAllForVm(Guid vm); + + /* + * Retrieves a list of VmJobs associated with a VM disk image + * + * @param vm + * The Vm UUID + * @param image + * The Image UUID + * + * @return A list of Vm Jobs + */ + List<VmJob> getAllForVmDisk(Guid vm, Guid image); + +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDaoDbFacadeImpl.java new file mode 100644 index 0000000..a5ead99 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmJobDaoDbFacadeImpl.java @@ -0,0 +1,123 @@ +package org.ovirt.engine.core.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.lang.NotImplementedException; +import org.ovirt.engine.core.common.businessentities.VmBlockJob; +import org.ovirt.engine.core.common.businessentities.VmBlockJobType; +import org.ovirt.engine.core.common.businessentities.VmJob; +import org.ovirt.engine.core.common.businessentities.VmJobState; +import org.ovirt.engine.core.common.businessentities.VmJobType; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; + +public class VmJobDaoDbFacadeImpl extends MassOperationsGenericDaoDbFacade<VmJob, Guid> implements VmJobDao { + + public VmJobDaoDbFacadeImpl() { + super("VmJobs"); + } + + @Override + public VmJob get(Guid id) { + throw new NotImplementedException(); + } + + @Override + public List<VmJob> getAll() { + throw new NotImplementedException(); + } + + @Override + public List<VmJob> getAllForVm(Guid vm) { + return getCallsHandler().executeReadList("GetVmJobsByVmId", + VmJobRowMapper.instance, + getCustomMapSqlParameterSource().addValue("vm_id", vm)); + } + + @Override + public List<VmJob> getAllForVmDisk(Guid vm, Guid image) { + return getCallsHandler().executeReadList("GetVmJobsByVmAndImage", + VmJobRowMapper.instance, + getCustomMapSqlParameterSource().addValue("vm_id", vm).addValue("image_group_id", image)); + } + + @Override + protected MapSqlParameterSource createIdParameterMapper(Guid id) { + return getCustomMapSqlParameterSource().addValue("vm_job_id", id); + } + + @Override + protected MapSqlParameterSource createFullParametersMapper(VmJob entity) { + MapSqlParameterSource mapper = createIdParameterMapper(entity.getId()); + mapper.addValue("vm_id", entity.getVmId()); + // TODO GP job state? temporary assignment here + mapper.addValue("job_state", VmJobState.NORMAL.getValue()); + //mapper.addValue("job_state", entity.getJobState().getValue()); + mapper.addValue("job_type", entity.getJobType().getValue()); + + if (entity.getJobType() == VmJobType.BLOCK) { + VmBlockJob blockJob = (VmBlockJob) entity; + mapper.addValue("block_job_type", blockJob.getBlockJobType().getValue()); + mapper.addValue("bandwidth", blockJob.getBandwidth()); + mapper.addValue("cursor_cur", blockJob.getCursorCur()); + mapper.addValue("cursor_end", blockJob.getCursorEnd()); + mapper.addValue("image_group_id", blockJob.getImageGroupId()); + } + return mapper; + } + + @Override + protected RowMapper<VmJob> createEntityRowMapper() { + return VmJobRowMapper.instance; + } + + private static class VmJobRowMapper implements RowMapper<VmJob> { + + public static VmJobRowMapper instance = new VmJobRowMapper(); + + private VmJobRowMapper() { + } + + @Override + public VmJob mapRow(ResultSet rs, int rowNum) throws SQLException { + VmJob entity; + VmJobType jobType = VmJobType.forValue(rs.getInt("job_type")); + + switch (jobType) { + case BLOCK: + VmBlockJob blockJob = new VmBlockJob(); + blockJob.setBlockJobType(VmBlockJobType.forValue(rs.getInt("block_job_type"))); + blockJob.setBandwidth(rs.getLong("bandwidth")); + blockJob.setCursorCur(rs.getLong("cursor_cur")); + blockJob.setCursorEnd(rs.getLong("cursor_end")); + blockJob.setImageGroupId(getGuidDefaultEmpty(rs, "image_group_id")); + entity = blockJob; + break; + default: + entity = new VmJob(); + break; + } + + entity.setId(getGuidDefaultEmpty(rs, "vm_job_id")); + entity.setVmId(getGuidDefaultEmpty(rs, "vm_id")); + entity.setJobType(jobType); + // TODO GP job state? + //entity.setJobState(VmJobState.forValue(rs.getInt("job_state"))); + return entity; + } + } + + @Override + public MapSqlParameterMapper<VmJob> getBatchMapper() { + return new MapSqlParameterMapper<VmJob>() { + @Override + public MapSqlParameterSource map(VmJob 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 773066f..afc46ae 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 @@ -20,6 +20,7 @@ VmStaticDAO=org.ovirt.engine.core.dao.VmStaticDAODbFacadeImpl VmStatisticsDAO=org.ovirt.engine.core.dao.VmStatisticsDaoDbFacadeImpl VmDynamicDAO=org.ovirt.engine.core.dao.VmDynamicDAODbFacadeImpl +VmJobDao=org.ovirt.engine.core.dao.VmJobDaoDbFacadeImpl TagDAO=org.ovirt.engine.core.dao.TagDAODbFacadeImpl BaseDiskDao=org.ovirt.engine.core.dao.BaseDiskDaoDbFacadeImpl DiskDao=org.ovirt.engine.core.dao.DiskDaoDbFacadeImpl diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml index 519f8aa..caae0be 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml @@ -134,6 +134,8 @@ <include name="common/businessentities/VM.java" /> <include name="common/businessentities/VmPayload.java" /> <include name="common/businessentities/VmBase.java" /> + <include name="common/businessentities/VmBlockJob.java" /> + <include name="common/businessentities/VmBlockJobType.java" /> <include name="common/businessentities/VmInit.java" /> <include name="common/businessentities/VmInitNetwork.java" /> <include name="common/businessentities/VmDynamic.java" /> @@ -142,6 +144,9 @@ <include name="common/businessentities/VmDeviceId.java" /> <include name="common/businessentities/VmExitReason.java" /> <include name="common/businessentities/VmExitStatus.java" /> + <include name="common/businessentities/VmJob.java" /> + <include name="common/businessentities/VmJobState.java" /> + <include name="common/businessentities/VmJobType.java" /> <include name="common/businessentities/VmOsType.java" /> <include name="common/businessentities/OsType.java" /> <include name="common/businessentities/VmPoolType.java" /> diff --git a/packaging/dbscripts/upgrade/03_05_0330_create_vm_jobs_table.sql b/packaging/dbscripts/upgrade/03_05_0330_create_vm_jobs_table.sql new file mode 100644 index 0000000..c3851df --- /dev/null +++ b/packaging/dbscripts/upgrade/03_05_0330_create_vm_jobs_table.sql @@ -0,0 +1,19 @@ +-- Add vmjobs table +CREATE TABLE vm_jobs +( + vm_job_id UUID NOT NULL, + vm_id UUID NOT NULL, + job_state INTEGER DEFAULT 0 NOT NULL, + job_type INTEGER NOT NULL, + block_job_type INTEGER, + bandwidth INTEGER, + cursor_cur BIGINT, + cursor_end BIGINT, + image_group_id UUID, + CONSTRAINT pk_vm_jobs PRIMARY KEY(vm_job_id) +) WITH OIDS; + +CREATE INDEX IDX_vm_jobs_vm_id ON vm_jobs(vm_id); + +ALTER TABLE ONLY vm_jobs + ADD CONSTRAINT fk_vm_jobs_vm_static FOREIGN KEY (vm_id) REFERENCES vm_static(vm_guid) ON DELETE CASCADE; diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql index b751d7a..ccc68ac 100644 --- a/packaging/dbscripts/vms_sp.sql +++ b/packaging/dbscripts/vms_sp.sql @@ -1324,3 +1324,83 @@ AND snapshot_type = 'STATELESS'))); END; $procedure$ LANGUAGE plpgsql; + + + +--------------------- +-- vm_jobs functions +--------------------- + +Create or replace FUNCTION GetVmJobsByVmId(v_vm_id uuid) RETURNS SETOF vm_jobs STABLE + AS $procedure$ +BEGIN +RETURN QUERY SELECT vm_jobs.* + FROM vm_jobs + WHERE vm_jobs.vm_id = v_vm_id; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION GetVmJobsByVmAndImage(v_vm_id uuid, v_image_group_id uuid) RETURNS SETOF vm_jobs STABLE + AS $procedure$ +BEGIN +RETURN QUERY SELECT vm_jobs.* + FROM vm_jobs + WHERE vm_jobs.vm_id = v_vm_id + AND vm_jobs.image_group_id = v_image_group_id; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION UpdateVmJobs( + v_vm_job_id UUID, + v_vm_id UUID, + v_job_state INTEGER, + v_job_type INTEGER, + v_block_job_type INTEGER, + v_bandwidth INTEGER, + v_cursor_cur BIGINT, + v_cursor_end BIGINT, + v_image_group_id UUID) +RETURNS VOID + AS $procedure$ +BEGIN + UPDATE vm_jobs + SET vm_job_id=v_vm_job_id, vm_id=v_vm_id, job_state=v_job_state, job_type=v_job_type, + block_job_type=v_block_job_type, bandwidth=v_bandwidth, cursor_cur=v_cursor_cur, + cursor_end=v_cursor_end, image_group_id=v_image_group_id + WHERE vm_job_id = v_vm_job_id; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION DeleteVmJobs(v_vm_job_id UUID) +RETURNS VOID + AS $procedure$ +BEGIN + DELETE FROM vm_jobs + WHERE vm_job_id = v_vm_job_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION InsertVmJobs( + v_vm_job_id UUID, + v_vm_id UUID, + v_job_state INTEGER, + v_job_type INTEGER, + v_block_job_type INTEGER, + v_bandwidth INTEGER, + v_cursor_cur BIGINT, + v_cursor_end BIGINT, + v_image_group_id UUID) +RETURNS VOID + AS $procedure$ +BEGIN +INSERT INTO vm_jobs(vm_job_id, vm_id, job_state, job_type, block_job_type, bandwidth, + cursor_cur, cursor_end, image_group_id) + VALUES (v_vm_job_id, v_vm_id, v_job_state, v_job_type, v_block_job_type, v_bandwidth, + v_cursor_cur, v_cursor_end, v_image_group_id); +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/26904 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I07734d4c4026062db7a505c1212553abf0b203ac Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Greg Padgett <gpadg...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches