mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 11:52:28 +01:00
Restore to old HA logic, but suppress VM state change on resource state report to avoid interferring HA.
This commit is contained in:
parent
4312d88462
commit
6ad245e675
@ -100,6 +100,8 @@ public interface HighAvailabilityManager extends Manager {
|
||||
|
||||
void cancelScheduledMigrations(HostVO host);
|
||||
|
||||
boolean hasPendingHaWork(long vmId);
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user