Manual snapshots won't have an async job id, the job id gets set when the recurring snapshots get scheduled for execution. If the policy id is MANUAL, don't search for a job id.

This commit is contained in:
Kris McQueen 2010-10-06 18:24:19 -07:00
parent 9c593352d0
commit 5fa6ff7fe4

View File

@ -26,6 +26,7 @@ import java.util.List;
import javax.ejb.Local;
import com.cloud.storage.Snapshot;
import com.cloud.storage.SnapshotScheduleVO;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
@ -86,12 +87,18 @@ public class SnapshotScheduleDaoImpl extends GenericDaoBase<SnapshotScheduleVO,
public SnapshotScheduleVO getCurrentSchedule(Long volumeId, Long policyId, boolean executing) {
assert volumeId != null;
SearchCriteria<SnapshotScheduleVO> sc = createSearchCriteria();
SearchCriteria.Op op = executing ? SearchCriteria.Op.NNULL : SearchCriteria.Op.NULL;
sc.addAnd("volumeId", SearchCriteria.Op.EQ, volumeId);
if (policyId != null) {
sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId);
if (policyId != Snapshot.MANUAL_POLICY_ID) {
// manual policies aren't scheduled by the snapshot poller, so don't look for the jobId here
sc.addAnd("asyncJobId", op);
}
} else {
sc.addAnd("asyncJobId", op);
}
SearchCriteria.Op op = executing ? SearchCriteria.Op.NNULL : SearchCriteria.Op.NULL;
sc.addAnd("asyncJobId", op);
List<SnapshotScheduleVO> snapshotSchedules = listBy(sc);
// This will return only one schedule because of a DB uniqueness constraint.
assert (snapshotSchedules.size() <= 1);