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;