package org.ovirt.engine.core.dao;
import java.util.Date;
import java.util.List;
import org.ovirt.engine.core.common.job.Job;
import org.ovirt.engine.core.common.job.JobExecutionStatus;
import org.ovirt.engine.core.compat.Guid;
public interface JobDao extends GenericDao<Job, Guid> {
/**
* Checks if the {@link Job} with the given id exists or not.
*
* @param id
* The job's id.
* @return Does the job exist or not.
*/
boolean exists(Guid id);
/**
* Retrieves a configured page of Jobs start from a given offset
*
* @param offset
* the offset to fetch the Jobs from
* @param pageSize
* the quantity of Jobs to fetch
* @return a collection of jobs
*/
List<Job> getJobsByOffsetAndPageSize(int offset, int pageSize);
/**
* Retrieves a list of Jobs by a given correlation-ID
*
* @param correlationId
* the correlation-ID to fetch Jobs by
* @return a collection of jobs
*/
List<Job> getJobsByCorrelationId(String correlationId);
/**
* Retrieves a list of Jobs by a given engine-session-seq-ID and job execution status
*
* @param engineSessionSeqId
* the engine-session-seq-ID to fetch Jobs by
* @param status
* the job execution status to fetch Jobs by
* @return a collection of jobs
*/
List<Job> getJobsBySessionSeqIdAndStatus(long engineSessionSeqId, JobExecutionStatus status);
/**
* Updates {@link Job} entity with the last update time of a given instance
*
* @param jobId
* the id of the job instance which should be updated
* @param lastUpdateTime
* the last date when the Job was modified
*/
void updateJobLastUpdateTime(Guid jobId, Date lastUpdateTime);
/**
* Deletes job entities which their end time is older than a given date and their status
* appears in the provided list of statuses.
*
* @param sinceDate
* the date to delete jobs older than
* @param statusesAsList
* a comma separated list of statuses {@link #ExecutionStatus}
*/
void deleteJobOlderThanDateWithStatus(Date sinceDate, List<JobExecutionStatus> statusesList);
/**
* Updates {@code Job} and {@code Step} entries with status {@code ExecutionStatus.STARTED} to
* {@code ExecutionStatus.UNKNOWN} for {@code Job} without external tasks.
*
* @param updateTime
* The update time to set for {@code Job} end time and last update time and for {@code Step} end time.
*/
void updateStartedExecutionEntitiesToUnknown(Date updateTime);
/**
* Deletes completed jobs.
* Successful jobs has {@code ExecutionStatus.FINISHED} status.
* Failed jobs has either {@code ExecutionStatus.FINISHED, ExecutionStatus.ABORTED, ExecutionStatus.UNKNOWN} status.
*
* @param succeededJobs
* the date which successful jobs with older end time will be deleted.
* @param failedJobs
* the date which failed jobs with older end time will be deleted.
*/
void deleteCompletedJobs(Date succeededJobs, Date failedJobs);
/**
* Checks if a job has step associated with VDSM task
*
* @param jobId
* The job id to search by
* @return true if the job contains a step associated with VDSM task, else false
*/
boolean checkIfJobHasTasks(Guid jobId);
void deleteRunningJobsOfTasklessCommands();
}