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

Reply via email to