Restore to old HA logic, but suppress VM state change on resource state report to avoid interferring HA.

This commit is contained in:
Kelven Yang 2014-03-05 17:03:02 -08:00
parent 4312d88462
commit 6ad245e675
3 changed files with 13 additions and 2 deletions

View File

@ -100,6 +100,8 @@ public interface HighAvailabilityManager extends Manager {
void cancelScheduledMigrations(HostVO host);
boolean hasPendingHaWork(long vmId);
/**
* @return
*/

View File

@ -4100,7 +4100,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
List<VmWorkJobVO> pendingWorkJobs = _workJobDao.listPendingWorkJobs(
VirtualMachine.Type.Instance, vmId);
if (pendingWorkJobs.size() == 0) {
if (pendingWorkJobs.size() == 0 || _haMgr.hasPendingHaWork(vmId)) {
// there is no pending operation job
VMInstanceVO vm = _vmDao.findById(vmId);
if (vm != null) {
@ -4125,7 +4125,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
s_logger.warn("VM " + vmId + " no longer exists when processing VM state report");
}
} else {
s_logger.info("There is pending job working on the VM. vm id: " + vmId + ", postpone power-change report by resetting power-change counters");
s_logger.info("There is pending job or HA tasks working on the VM. vm id: " + vmId + ", postpone power-change report by resetting power-change counters");
// reset VM power state tracking so that we won't lost signal when VM has
// been translated to

View File

@ -962,6 +962,9 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
if (oldState == State.Running && event == VirtualMachine.Event.FollowAgentPowerOffReport && newState == State.Stopped) {
final VMInstanceVO vm = _instanceDao.findById(vo.getId());
if (vm.isHaEnabled()) {
if (vm.getState() == State.Stopped)
s_logger.warn("Sanity check failed. postStateTransitionEvent reports transited to Stopped but VM " + vm + " is still at state " + vm.getState());
s_logger.info("Detected out-of-band stop of a HA enabled VM " + vm.getInstanceName() + ", will schedule restart");
_executor.submit(new ManagedContextRunnable() {
@Override
@ -977,4 +980,10 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
}
return true;
}
@Override
public boolean hasPendingHaWork(long vmId) {
List<HaWorkVO> haWorks = _haDao.listRunningHaWorkForVm(vmId);
return haWorks.size() > 0;
}
}