mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
introducing a new error state
This commit is contained in:
parent
469d4e6e65
commit
b4dd261fc2
@ -79,9 +79,10 @@ public enum State implements FiniteState<State, Event> {
|
|||||||
static {
|
static {
|
||||||
s_fsm.addTransition(null, VirtualMachine.Event.CreateRequested, State.Creating);
|
s_fsm.addTransition(null, VirtualMachine.Event.CreateRequested, State.Creating);
|
||||||
s_fsm.addTransition(State.Creating, VirtualMachine.Event.OperationSucceeded, State.Stopped);
|
s_fsm.addTransition(State.Creating, VirtualMachine.Event.OperationSucceeded, State.Stopped);
|
||||||
s_fsm.addTransition(State.Creating, VirtualMachine.Event.OperationFailed, State.Destroyed);
|
s_fsm.addTransition(State.Creating, VirtualMachine.Event.OperationFailed, State.Error);
|
||||||
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StartRequested, State.Starting);
|
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StartRequested, State.Starting);
|
||||||
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.DestroyRequested, State.Destroyed);
|
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.DestroyRequested, State.Destroyed);
|
||||||
|
s_fsm.addTransition(State.Error, VirtualMachine.Event.DestroyRequested, State.Destroyed);
|
||||||
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StopRequested, State.Stopped);
|
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StopRequested, State.Stopped);
|
||||||
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.AgentReportStopped, State.Stopped);
|
s_fsm.addTransition(State.Stopped, VirtualMachine.Event.AgentReportStopped, State.Stopped);
|
||||||
s_fsm.addTransition(State.Starting, VirtualMachine.Event.OperationRetry, State.Starting);
|
s_fsm.addTransition(State.Starting, VirtualMachine.Event.OperationRetry, State.Starting);
|
||||||
|
|||||||
@ -527,8 +527,9 @@ public class MauriceMoss implements VmManager, ClusterManagerListener {
|
|||||||
|
|
||||||
_stateMachine.addTransition(null, VirtualMachine.Event.CreateRequested, State.Creating);
|
_stateMachine.addTransition(null, VirtualMachine.Event.CreateRequested, State.Creating);
|
||||||
_stateMachine.addTransition(State.Creating, VirtualMachine.Event.OperationSucceeded, State.Stopped);
|
_stateMachine.addTransition(State.Creating, VirtualMachine.Event.OperationSucceeded, State.Stopped);
|
||||||
_stateMachine.addTransition(State.Creating, VirtualMachine.Event.OperationFailed, State.Destroyed);
|
_stateMachine.addTransition(State.Creating, VirtualMachine.Event.OperationFailed, State.Error);
|
||||||
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.StartRequested, State.Starting);
|
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.StartRequested, State.Starting);
|
||||||
|
_stateMachine.addTransition(State.Error, VirtualMachine.Event.DestroyRequested, State.Destroyed);
|
||||||
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.DestroyRequested, State.Destroyed);
|
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.DestroyRequested, State.Destroyed);
|
||||||
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.StopRequested, State.Stopped);
|
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.StopRequested, State.Stopped);
|
||||||
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.AgentReportStopped, State.Stopped);
|
_stateMachine.addTransition(State.Stopped, VirtualMachine.Event.AgentReportStopped, State.Stopped);
|
||||||
|
|||||||
@ -1748,6 +1748,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
|||||||
throw (ResourceAllocationException)th;
|
throw (ResourceAllocationException)th;
|
||||||
}
|
}
|
||||||
throw new CloudRuntimeException("Unable to create vm", th);
|
throw new CloudRuntimeException("Unable to create vm", th);
|
||||||
|
}finally{
|
||||||
|
updateVmStateForFailedVmCreation(vmId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2953,6 +2955,17 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
|||||||
|
|
||||||
s_logger.error("Unable to create vm", th);
|
s_logger.error("Unable to create vm", th);
|
||||||
throw new CloudRuntimeException("Unable to create vm: "+th.getMessage(), th);
|
throw new CloudRuntimeException("Unable to create vm: "+th.getMessage(), th);
|
||||||
|
} finally{
|
||||||
|
updateVmStateForFailedVmCreation(vmId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateVmStateForFailedVmCreation(Long vmId) {
|
||||||
|
UserVmVO vm = _vmDao.findById(vmId);
|
||||||
|
if(vm != null){
|
||||||
|
if(vm.getState().equals(State.Creating)){
|
||||||
|
_vmDao.updateIf(vm, VirtualMachine.Event.OperationFailed, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3116,6 +3129,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
|||||||
_accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes);
|
_accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes);
|
||||||
s_logger.error("Unable to create vm", th);
|
s_logger.error("Unable to create vm", th);
|
||||||
throw new CloudRuntimeException("Unable to create vm", th);
|
throw new CloudRuntimeException("Unable to create vm", th);
|
||||||
|
}finally{
|
||||||
|
updateVmStateForFailedVmCreation(vmId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3741,9 +3756,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
|||||||
|
|
||||||
UserVmVO vm = new UserVmVO(id, VirtualMachineName.getVmName(id, owner.getId(), _instance), cmd.getDisplayName(),
|
UserVmVO vm = new UserVmVO(id, VirtualMachineName.getVmName(id, owner.getId(), _instance), cmd.getDisplayName(),
|
||||||
template.getId(), template.getGuestOSId(), offering.getOfferHA(), domain.getId(), owner.getId(), offering.getId(), userData);
|
template.getId(), template.getGuestOSId(), offering.getOfferHA(), domain.getId(), owner.getId(), offering.getId(), userData);
|
||||||
|
|
||||||
|
try{
|
||||||
if (_itMgr.allocate(vm, template, offering, rootDiskOffering, dataDiskOfferings, networks, null, plan, owner) == null) {
|
if (_itMgr.allocate(vm, template, offering, rootDiskOffering, dataDiskOfferings, networks, null, plan, owner) == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
}finally{
|
||||||
|
updateVmStateForFailedVmCreation(id);
|
||||||
|
}
|
||||||
|
|
||||||
if (s_logger.isDebugEnabled()) {
|
if (s_logger.isDebugEnabled()) {
|
||||||
s_logger.debug("Successfully allocated DB entry for " + vm);
|
s_logger.debug("Successfully allocated DB entry for " + vm);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user