Repository: cloudstack Updated Branches: refs/heads/4.5 000f8b163 -> 0d6f69b53
CLOUDSTACK-7778: Start VM checkWorkItem loop should also check VM DB state before going into idle waiting to exit faster. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0d6f69b5 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0d6f69b5 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0d6f69b5 Branch: refs/heads/4.5 Commit: 0d6f69b536dc04e154678e5198cfd9c71097656e Parents: 000f8b1 Author: Min Chen <[email protected]> Authored: Thu Oct 23 14:08:49 2014 -0700 Committer: Min Chen <[email protected]> Committed: Thu Oct 23 14:38:56 2014 -0700 ---------------------------------------------------------------------- .../src/com/cloud/vm/VirtualMachineManagerImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d6f69b5/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java ---------------------------------------------------------------------- diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 0eafe13..ec4aa1d 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -629,6 +629,15 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac return true; } + // also check DB to get latest VM state to detect vm update from concurrent process before idle waiting to get an early exit + VMInstanceVO instance = _vmDao.findById(vm.getId()); + if (instance != null && instance.getState() == State.Running) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("VM is already started in DB: " + vm); + } + return true; + } + if (vo.getSecondsTaskIsInactive() > VmOpCancelInterval.value()) { s_logger.warn("The task item for vm " + vm + " has been inactive for " + vo.getSecondsTaskIsInactive()); return false;
