From e851f4a93039afac57f0ff790791cd1bbed624cf Mon Sep 17 00:00:00 2001 From: Edison Su Date: Wed, 7 Aug 2013 18:25:28 -0700 Subject: [PATCH] CLOUDSTACK-4109: fix upload volume to s3 for vmware --- .../storage/motion/AncientDataMotionStrategy.java | 2 +- .../cloudstack/storage/volume/VolumeObject.java | 8 ++++++-- .../VmwareStorageSubsystemCommandHandler.java | 12 ++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java index de7900b1dd5..8537a1cea26 100644 --- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java +++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java @@ -204,7 +204,7 @@ public class AncientDataMotionStrategy implements DataMotionStrategy { } return answer; } catch (Exception e) { - s_logger.debug("copy object failed: " + e.toString()); + s_logger.debug("copy object failed: ", e); if (cacheData != null) { cacheMgr.deleteCacheObject(cacheData); } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java index 404e3b24404..5058dba2d73 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java @@ -502,7 +502,9 @@ public class VolumeObject implements VolumeInfo { this.getId()); VolumeObjectTO newVol = (VolumeObjectTO) cpyAnswer.getNewData(); volStore.setInstallPath(newVol.getPath()); - volStore.setSize(newVol.getSize()); + if (newVol.getSize() != null) { + volStore.setSize(newVol.getSize()); + } this.volumeStoreDao.update(volStore.getId(), volStore); } } @@ -595,7 +597,9 @@ public class VolumeObject implements VolumeInfo { this.getId()); VolumeObjectTO newVol = (VolumeObjectTO) cpyAnswer.getNewData(); volStore.setInstallPath(newVol.getPath()); - volStore.setSize(newVol.getSize()); + if (newVol.getSize() != null) { + volStore.setSize(newVol.getSize()); + } this.volumeStoreDao.update(volStore.getId(), volStore); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java index 13615154ff6..7d3c888fad6 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java @@ -30,6 +30,7 @@ import com.cloud.storage.DataStoreRole; import org.apache.cloudstack.storage.command.CopyCmdAnswer; import org.apache.cloudstack.storage.command.CopyCommand; import org.apache.cloudstack.storage.to.SnapshotObjectTO; +import org.apache.cloudstack.storage.to.VolumeObjectTO; import java.io.File; @@ -76,6 +77,17 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman } if (srcDataStore.getRole() == DataStoreRole.ImageCache && destDataStore.getRole() == DataStoreRole.Image) { + //need to take extra processing for vmware, such as packing to ova, before sending to S3 + if (srcData.getObjectType() == DataObjectType.VOLUME) { + NfsTO cacheStore = (NfsTO)srcDataStore; + String parentPath = storageResource.getRootDir(cacheStore.getUrl()); + VolumeObjectTO vol = (VolumeObjectTO)srcData; + String path = vol.getPath(); + int index = path.lastIndexOf(File.separator); + String name = path.substring(index + 1); + storageManager.createOva(parentPath + File.separator + path, name); + vol.setPath(path + File.separator + name + ".ova"); + } needDelegation = true; }