diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java index 406b9b2d8ab..1318d9b8c76 100755 --- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -967,7 +967,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai @Override public boolean hasPendingHaWork(long vmId) { - List haWorks = _haDao.listRunningHaWorkForVm(vmId); + List haWorks = _haDao.listPendingHaWorkForVm(vmId); return haWorks.size() > 0; } } diff --git a/server/src/com/cloud/ha/dao/HighAvailabilityDao.java b/server/src/com/cloud/ha/dao/HighAvailabilityDao.java index 7f532f2ae1e..85135bb9794 100644 --- a/server/src/com/cloud/ha/dao/HighAvailabilityDao.java +++ b/server/src/com/cloud/ha/dao/HighAvailabilityDao.java @@ -81,4 +81,6 @@ public interface HighAvailabilityDao extends GenericDao { * @return List of work items */ List listRunningHaWorkForVm(long vmId); + + List listPendingHaWorkForVm(long vmId); } diff --git a/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java b/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java index c0da88396c9..d25c6a79378 100644 --- a/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java +++ b/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java @@ -49,6 +49,7 @@ public class HighAvailabilityDaoImpl extends GenericDaoBase impl private final SearchBuilder ReleaseSearch; private final SearchBuilder FutureHaWorkSearch; private final SearchBuilder RunningHaWorkSearch; + private final SearchBuilder PendingHaWorkSearch; protected HighAvailabilityDaoImpl() { super(); @@ -106,6 +107,22 @@ public class HighAvailabilityDaoImpl extends GenericDaoBase impl RunningHaWorkSearch.and("taken", RunningHaWorkSearch.entity().getDateTaken(), Op.NNULL); RunningHaWorkSearch.and("step", RunningHaWorkSearch.entity().getStep(), Op.NIN); RunningHaWorkSearch.done(); + + PendingHaWorkSearch = createSearchBuilder(); + PendingHaWorkSearch.and("instance", PendingHaWorkSearch.entity().getInstanceId(), Op.EQ); + PendingHaWorkSearch.and("type", PendingHaWorkSearch.entity().getType(), Op.EQ); + PendingHaWorkSearch.and("step", PendingHaWorkSearch.entity().getStep(), Op.NIN); + PendingHaWorkSearch.done(); + } + + @Override + public List listPendingHaWorkForVm(long vmId) { + SearchCriteria sc = PendingHaWorkSearch.create(); + sc.setParameters("instance", vmId); + sc.setParameters("type", WorkType.HA); + sc.setParameters("step", Step.Done, Step.Error, Step.Cancelled); + + return search(sc, null); } @Override