Repository: cloudstack Updated Branches: refs/heads/master fed5422c1 -> 94969b065
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/94969b06 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/94969b06 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/94969b06 Branch: refs/heads/master Commit: 94969b06544b785e5f765f0f8810bfef5c8890b6 Parents: fed5422 Author: Min Chen <[email protected]> Authored: Thu Oct 23 14:08:49 2014 -0700 Committer: Min Chen <[email protected]> Committed: Thu Oct 23 14:28:23 2014 -0700 ---------------------------------------------------------------------- .../src/com/cloud/vm/VirtualMachineManagerImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/94969b06/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 b73d129..ebb030e 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -631,6 +631,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;
