From 110b37a9372783872691b7ef840cffbc3eb7fe5b Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Tue, 15 Nov 2011 12:02:05 -0800 Subject: [PATCH] bug 12040: fixed the problem where if the connection is not retrievable, we cause a classcastexception Reviewed-by: Anthony --- api/src/com/cloud/agent/api/RebootAnswer.java | 4 ++++ api/src/com/cloud/agent/api/StopAnswer.java | 5 +++++ .../cloud/hypervisor/xen/resource/CitrixResourceBase.java | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/api/src/com/cloud/agent/api/RebootAnswer.java b/api/src/com/cloud/agent/api/RebootAnswer.java index a16f06f2ceb..147fa661104 100644 --- a/api/src/com/cloud/agent/api/RebootAnswer.java +++ b/api/src/com/cloud/agent/api/RebootAnswer.java @@ -45,6 +45,10 @@ public class RebootAnswer extends Answer { bytesReceived = null; } + public RebootAnswer(RebootCommand cmd, Exception e) { + super(cmd, e); + } + public void setBytesReceived(Long bytesReceived) { this.bytesReceived = bytesReceived; } diff --git a/api/src/com/cloud/agent/api/StopAnswer.java b/api/src/com/cloud/agent/api/StopAnswer.java index 9b1c71d58a6..d66b671dd2b 100755 --- a/api/src/com/cloud/agent/api/StopAnswer.java +++ b/api/src/com/cloud/agent/api/StopAnswer.java @@ -34,6 +34,11 @@ public class StopAnswer extends RebootAnswer { } + public StopAnswer(StopCommand cmd, Exception e) { + super(cmd, e); + } + + @Override public Integer getVncPort() { return vncPort; } diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 376f9120570..857b3aa484e 100755 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -3072,9 +3072,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe @Override public StopAnswer execute(StopCommand cmd) { - Connection conn = getConnection(); String vmName = cmd.getVmName(); try { + Connection conn = getConnection(); Set vms = VM.getByNameLabel(conn, vmName); // stop vm which is running on this host or is in halted state Iterator iter = vms.iterator(); @@ -3190,6 +3190,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String msg = "Stop Vm " + vmName + " fail due to " + e.getMessage(); s_logger.warn(msg, e); return new StopAnswer(cmd, msg); + } catch (Exception e) { + s_logger.warn("Unable to stop " + vmName + " due to ", e); + return new StopAnswer(cmd, e); } return new StopAnswer(cmd, "Stop VM failed"); }