mirror of https://github.com/apache/cloudstack.git
When VM start fails at host for admin, report error (#208)
* When VM start fails at host for admin, report error Signed-off-by: Marcus Sorensen <mls@apple.com> * Report ResourceUnavailableExceptions that result in InsufficientCapacityException to admin * Update error message to be more straightforward Signed-off-by: Marcus Sorensen <mls@apple.com> Co-authored-by: Marcus Sorensen <mls@apple.com>
This commit is contained in:
parent
89dfb54929
commit
8885d252f0
|
|
@ -788,6 +788,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||
} catch (final ConcurrentOperationException e) {
|
||||
throw new CloudRuntimeException("Unable to start a VM due to concurrent operation", e).add(VirtualMachine.class, vmUuid);
|
||||
} catch (final InsufficientCapacityException e) {
|
||||
final CallContext cctxt = CallContext.current();
|
||||
final Account account = cctxt.getCallingAccount();
|
||||
if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) {
|
||||
throw new CloudRuntimeException("Unable to start a VM due to insufficient capacity: " + e.getMessage(), e).add(VirtualMachine.class, vmUuid);
|
||||
}
|
||||
throw new CloudRuntimeException("Unable to start a VM due to insufficient capacity", e).add(VirtualMachine.class, vmUuid);
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
if (e.getScope() != null && e.getScope().equals(VirtualRouter.class)){
|
||||
|
|
@ -1069,6 +1074,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||
resourceCountIncrement(owner.getAccountId(),new Long(offering.getCpu()), new Long(offering.getRamSize()));
|
||||
}
|
||||
|
||||
String adminError = null;
|
||||
boolean canRetry = true;
|
||||
ExcludeList avoids = null;
|
||||
try {
|
||||
|
|
@ -1163,6 +1169,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||
reuseVolume = false;
|
||||
continue;
|
||||
}
|
||||
if (account.getType() == Account.ACCOUNT_TYPE_ADMIN && adminError != null) {
|
||||
String message = String.format("Unable to create a deployment for %s. Previous error: %s", vmProfile, adminError);
|
||||
throw new InsufficientServerCapacityException(message, DataCenter.class, plan.getDataCenterId(), areAffinityGroupsAssociated(vmProfile));
|
||||
}
|
||||
throw new InsufficientServerCapacityException("Unable to create a deployment for " + vmProfile, DataCenter.class, plan.getDataCenterId(),
|
||||
areAffinityGroupsAssociated(vmProfile));
|
||||
}
|
||||
|
|
@ -1327,7 +1337,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||
throw new ExecutionException("Unable to start VM:"+vm.getUuid()+" due to error in finalizeStart, not retrying");
|
||||
}
|
||||
}
|
||||
s_logger.info("Unable to start VM on " + dest.getHost() + " due to " + (startAnswer == null ? " no start answer" : startAnswer.getDetails()));
|
||||
adminError = startAnswer == null ? " no start answer" : startAnswer.getDetails();
|
||||
s_logger.info("Unable to start VM on " + dest.getHost() + " due to " + adminError);
|
||||
|
||||
if (startAnswer != null && startAnswer.getContextParam("stopRetry") != null) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -1341,6 +1353,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||
throw new AgentUnavailableException("Unable to start " + vm.getHostName(), destHostId, e);
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
s_logger.info("Unable to contact resource.", e);
|
||||
adminError = e.getMessage();
|
||||
if (!avoids.add(e)) {
|
||||
if (e.getScope() == Volume.class || e.getScope() == Nic.class) {
|
||||
throw e;
|
||||
|
|
@ -1400,6 +1413,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||
}
|
||||
|
||||
if (startedVm == null) {
|
||||
if (account.getType() == Account.ACCOUNT_TYPE_ADMIN && adminError != null) {
|
||||
throw new CloudRuntimeException("Unable to start instance '" + vm.getHostName() + "' (" + vm.getUuid() + "): " + adminError);
|
||||
}
|
||||
throw new CloudRuntimeException("Unable to start instance '" + vm.getHostName() + "' (" + vm.getUuid() + "), see management server log for details");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue