Repository: cloudstack
Updated Branches:
  refs/heads/master fca41bf52 -> f80310081


CLOUDSTACK-6969. Data Volume Shrink operation failing with "Unexpected 
Exception".
For ResizeVolume API command -
1. If hypervisor resource throws an exception, handle the NPE thrown by the job 
framework.
2. Improve user error message in case of RuntimeException by throwing the 
exception instead of 'Unexpected Exception'.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f8031008
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f8031008
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f8031008

Branch: refs/heads/master
Commit: f8031008139978abb6831a1d7cb240c993fbf8f5
Parents: fca41bf
Author: Likitha Shetty <likitha.she...@citrix.com>
Authored: Fri Aug 1 15:49:42 2014 +0530
Committer: Likitha Shetty <likitha.she...@citrix.com>
Committed: Fri Aug 1 16:23:47 2014 +0530

----------------------------------------------------------------------
 .../kvm/resource/LibvirtComputingResource.java       |  2 +-
 .../hypervisor/vmware/resource/VmwareResource.java   |  5 +++--
 .../src/com/cloud/storage/VolumeApiServiceImpl.java  | 15 +++++++++------
 3 files changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f8031008/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index f84af6b..f6fe75c 100755
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -1899,7 +1899,7 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
             s_logger.debug("after resize, size reports as " + finalSize + ", 
requested " + newSize);
             return new ResizeVolumeAnswer(cmd, true, "success", finalSize);
         } catch (CloudRuntimeException e) {
-            String error = "failed to resize volume: " + e;
+            String error = "Failed to resize volume: " + e.getMessage();
             s_logger.debug(error);
             return new ResizeVolumeAnswer(cmd, false, error);
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f8031008/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index c6258a2..8a2488d 100755
--- 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -564,7 +564,8 @@ public class VmwareResource implements StoragePoolResource, 
ServerResource, Vmwa
             VirtualDisk disk = vdisk.first();
             long oldSize = disk.getCapacityInKB();
             if (newSize < oldSize) {
-                throw new Exception("VMware doesn't support shrinking volume 
from larger size: " + oldSize + " MB to a smaller size: " + newSize + " MB");
+                throw new Exception("VMware doesn't support shrinking volume 
from larger size: " + oldSize/(1024*1024) + " GB to a smaller size: "
+                        + newSize/(1024*1024) + " GB");
             } else if (newSize == oldSize) {
                 return new ResizeVolumeAnswer(cmd, true, "success", newSize * 
1024);
             }
@@ -582,7 +583,7 @@ public class VmwareResource implements StoragePoolResource, 
ServerResource, Vmwa
             return new ResizeVolumeAnswer(cmd, true, "success", newSize * 
1024);
         } catch (Exception e) {
             s_logger.error("Unable to resize volume", e);
-            String error = "failed to resize volume:" + e;
+            String error = "Failed to resize volume: " + e.getMessage();
             return new ResizeVolumeAnswer(cmd, false, error);
         }
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f8031008/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 7ec4798..5a83ac9 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -925,6 +925,9 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
                     if (jobResult instanceof ConcurrentOperationException) {
                         throw (ConcurrentOperationException)jobResult;
                     }
+                    else if (jobResult instanceof RuntimeException) {
+                        throw (RuntimeException)jobResult;
+                    }
                     else if (jobResult instanceof Throwable) {
                         throw new RuntimeException("Unexpected exception", 
(Throwable)jobResult);
                     }
@@ -1000,7 +1003,11 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
             VolumeApiResult result = future.get();
             if (result.isFailed()) {
                 s_logger.warn("Failed to resize the volume " + volume);
-                return null;
+                String details = "";
+                if (result.getResult() != null && 
!result.getResult().isEmpty()) {
+                    details = result.getResult();
+                }
+                throw new CloudRuntimeException(details);
             }
 
             volume = _volsDao.findById(volume.getId());
@@ -1029,16 +1036,12 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
             } else {
                 
_resourceLimitMgr.decrementResourceCount(volume.getAccountId(), 
ResourceType.primary_storage, volume.isDisplayVolume(), new Long(currentSize - 
newSize));
             }
-            return volume;
         } catch (InterruptedException e) {
             s_logger.warn("failed get resize volume result", e);
         } catch (ExecutionException e) {
             s_logger.warn("failed get resize volume result", e);
-        } catch (Exception e) {
-            s_logger.warn("failed get resize volume result", e);
         }
-
-        return null;
+        return volume;
     }
 
     @Override

Reply via email to