CLOUDSTACK-5989: Trying to start a vm while 'vm snapshot' is in progress results in inconsistency The fix is to fail the start operation if a vm snapshot is in progress
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/580ebb00 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/580ebb00 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/580ebb00 Branch: refs/heads/master Commit: 580ebb0010cbebcb13fefd8bd96137b7033ef872 Parents: f2f605d Author: Koushik Das <kous...@apache.org> Authored: Thu Jan 30 18:07:24 2014 +0530 Committer: Koushik Das <kous...@apache.org> Committed: Fri Jan 31 10:39:43 2014 +0530 ---------------------------------------------------------------------- .../src/com/cloud/vm/VirtualMachineManagerImpl.java | 5 +++++ 1 file changed, 5 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/580ebb00/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 b712528..f3e3c36 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1525,6 +1525,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } protected boolean stateTransitTo(VMInstanceVO vm, VirtualMachine.Event e, Long hostId, String reservationId) throws NoTransitionException { + // if there are active vm snapshots task, state change is not allowed + if (_vmSnapshotMgr.hasActiveVMSnapshotTasks(vm.getId())) { + s_logger.error("State transit with event: " + e + " failed due to: " + vm.getInstanceName() + " has active VM snapshots tasks"); + return false; + } vm.setReservationId(reservationId); return _stateMachine.transitTo(vm, e, new Pair<Long, Long>(vm.getHostId(), hostId), _vmDao); }