You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2014/01/09 23:33:56 UTC
[08/13] git commit: updated refs/heads/master to 1e2e1ea
Fix auto-merge caused issues
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ac0faeb0
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ac0faeb0
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ac0faeb0
Branch: refs/heads/master
Commit: ac0faeb0917bf6872070f2b455f4338d586f4044
Parents: 0587382
Author: Kelven Yang <ke...@gmail.com>
Authored: Thu Jan 9 11:33:47 2014 -0800
Committer: Kelven Yang <ke...@gmail.com>
Committed: Thu Jan 9 14:29:12 2014 -0800
----------------------------------------------------------------------
.../src/com/cloud/vm/VmWorkJobHandlerProxy.java | 36 +++++++++++++-------
.../com/cloud/storage/VolumeApiServiceImpl.java | 1 +
2 files changed, 25 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ac0faeb0/engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java b/engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java
index 6550281..ce10a83 100644
--- a/engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java
+++ b/engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java
@@ -16,6 +16,7 @@
// under the License.
package com.cloud.vm;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@@ -98,24 +99,35 @@ public class VmWorkJobHandlerProxy implements VmWorkJobHandler {
Method method = getHandlerMethod(work.getClass());
if (method != null) {
- if (s_logger.isDebugEnabled())
- s_logger.debug("Execute VM work job: " + work.getClass().getName() + _gsonLogger.toJson(work));
- Object obj = method.invoke(_target, work);
+ try {
+ if (s_logger.isDebugEnabled())
+ s_logger.debug("Execute VM work job: " + work.getClass().getName() + _gsonLogger.toJson(work));
- if (s_logger.isDebugEnabled())
- s_logger.debug("Done executing VM work job: " + work.getClass().getName() + _gsonLogger.toJson(work));
+ Object obj = method.invoke(_target, work);
- assert (obj instanceof Pair);
- return (Pair<JobInfo.Status, String>)obj;
+ if (s_logger.isDebugEnabled())
+ s_logger.debug("Done executing VM work job: " + work.getClass().getName() + _gsonLogger.toJson(work));
+
+ assert (obj instanceof Pair);
+ return (Pair<JobInfo.Status, String>)obj;
+ } catch (InvocationTargetException e) {
+ s_logger.error("Invocation exception, caused by: " + e.getCause());
+
+ // legacy CloudStack code relies on checked exception for error handling
+ // we need to re-throw the real exception here
+ if (e.getCause() != null && e.getCause() instanceof Exception) {
+ s_logger.info("Rethrow exception " + e.getCause());
+ throw (Exception)e.getCause();
+ }
+
+ throw e;
+ }
} else {
s_logger.error("Unable to find handler for VM work job: " + work.getClass().getName() + _gsonLogger.toJson(work));
- RuntimeException e = new RuntimeException("Unsupported VM work job: " + work.getClass().getName() + _gsonLogger.toJson(work));
- String exceptionJson = JobSerializerHelper.toSerializedString(e);
-
- s_logger.error("Serialize exception object into json: " + exceptionJson);
- return new Pair<JobInfo.Status, String>(JobInfo.Status.FAILED, exceptionJson);
+ RuntimeException ex = new RuntimeException("Unable to find handler for VM work job: " + work.getClass().getName());
+ return new Pair<JobInfo.Status, String>(JobInfo.Status.FAILED, JobSerializerHelper.toObjectSerializedString(ex));
}
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ac0faeb0/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index e7d5164..179a10c 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -165,6 +165,7 @@ import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VmWork;
import com.cloud.vm.VmWorkConstants;
import com.cloud.vm.VmWorkJobHandler;
+import com.cloud.vm.VmWorkJobHandlerProxy;
import com.cloud.vm.VmWorkSerializer;
import com.cloud.vm.dao.ConsoleProxyDao;
import com.cloud.vm.dao.DomainRouterDao;