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 {
|
||||
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.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.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.AgentReportStopped, State.Stopped);
|
||||
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(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.Error, 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.AgentReportStopped, State.Stopped);
|
||||
|
||||
@ -1748,6 +1748,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
throw (ResourceAllocationException)th;
|
||||
}
|
||||
throw new CloudRuntimeException("Unable to create vm", th);
|
||||
}finally{
|
||||
updateVmStateForFailedVmCreation(vmId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2953,8 +2955,19 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
|
||||
s_logger.error("Unable to create vm", 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DB
|
||||
@Override
|
||||
@ -3116,6 +3129,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
_accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes);
|
||||
s_logger.error("Unable to create vm", th);
|
||||
throw new CloudRuntimeException("Unable to create vm", th);
|
||||
}finally{
|
||||
updateVmStateForFailedVmCreation(vmId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3741,8 +3756,13 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
|
||||
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);
|
||||
if (_itMgr.allocate(vm, template, offering, rootDiskOffering, dataDiskOfferings, networks, null, plan, owner) == null) {
|
||||
return null;
|
||||
|
||||
try{
|
||||
if (_itMgr.allocate(vm, template, offering, rootDiskOffering, dataDiskOfferings, networks, null, plan, owner) == null) {
|
||||
return null;
|
||||
}
|
||||
}finally{
|
||||
updateVmStateForFailedVmCreation(id);
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user