From 44a7eb0d141564ac6f9d827ce1f460b9cbd653c0 Mon Sep 17 00:00:00 2001 From: niteshsarda Date: Fri, 15 Dec 2017 17:18:51 +0530 Subject: [PATCH] CLOUDSTACK-10176: VM Start Api Job returns success for failed Job (#2354) ISSUE : VM start API Job returns success for failed Job STEPS TO REPRODUCE : Stop VM instance. Mark state of associate router as Stopping from DB Execute startVirtualMachine Api from rest client. VM will not start but still main job will return the status as SUCCEEDED, whereas sub-job for command VmWorkStart will return status as failed. --- .../src/com/cloud/vm/VirtualMachineManagerImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index fe7fcdfd093..74927b9d465 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -38,6 +38,7 @@ import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper; import com.cloud.agent.api.AttachOrDettachConfigDriveCommand; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.ca.CAManager; @@ -4730,8 +4731,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac orchestrateStart(vm.getUuid(), work.getParams(), work.getPlan(), _dpMgr.getDeploymentPlannerByName(work.getDeploymentPlanner())); } catch (CloudRuntimeException e){ - s_logger.info("Caught CloudRuntimeException, returning job failed"); - return new Pair(JobInfo.Status.FAILED, null); + s_logger.info("Caught CloudRuntimeException, returning job failed " + e); + CloudRuntimeException ex = new CloudRuntimeException("Unable to start VM instance"); + return new Pair(JobInfo.Status.FAILED, JobSerializerHelper.toObjectSerializedString(ex)); } return new Pair(JobInfo.Status.SUCCEEDED, null); }