From 358c9eba05cffef8e287b95cffb55df089483386 Mon Sep 17 00:00:00 2001 From: Nitin Date: Tue, 12 Jul 2011 20:30:43 +0530 Subject: [PATCH] bug 10624: ExtractVolume - code change for multiple secondary storage. --- .../cloud/server/ManagementServerImpl.java | 19 ++++++++++++++++++- .../storage/upload/UploadMonitorImpl.java | 7 ++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 08cd136e7c9..e9571bf2fc1 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -4369,7 +4369,7 @@ public class ManagementServerImpl implements ManagementServer { throw new CloudRuntimeException(errorString); } - String volumeLocalPath = "volumes/" + volume.getId() + "/" + cvAnswer.getVolumePath() + ".vhd"; + String volumeLocalPath = "volumes/" + volume.getId() + "/" + cvAnswer.getVolumePath() + "." + getFormatForPool(srcPool); // Update the DB that volume is copied and volumePath uploadJob.setUploadState(UploadVO.Status.COPY_COMPLETE); uploadJob.setLastUpdated(new Date()); @@ -4386,6 +4386,23 @@ public class ManagementServerImpl implements ManagementServer { } } + private String getFormatForPool(StoragePoolVO pool){ + ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId()); + + if (cluster.getHypervisorType() == HypervisorType.XenServer){ + return "vhd"; + }else if (cluster.getHypervisorType() == HypervisorType.KVM){ + return "qcow2"; + }else if (cluster.getHypervisorType() == HypervisorType.VMware){ + return "ova"; + }else{ + return null; + } + + } + + + @Override public InstanceGroupVO updateVmGroup(UpdateVMGroupCmd cmd) { Account account = UserContext.current().getCaller(); diff --git a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java index d51048a1fda..320954a460e 100755 --- a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java +++ b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java @@ -229,8 +229,9 @@ public class UploadMonitorImpl implements UploadMonitor { _uploadDao.persist(uploadTemplateObj); try{ // Create Symlink at ssvm - String uuid = UUID.randomUUID().toString() + "." + template.getFormat().toString().toLowerCase(); - CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(storageServers.get(0).getParent(), vmTemplateHost.getInstallPath(), uuid); + String path = vmTemplateHost.getInstallPath(); + String uuid = UUID.randomUUID().toString() + path.substring(path.length() - 4) ; // last 4 characters of the path specify the format like .vhd + CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(storageServers.get(0).getParent(), path, uuid); long result = send(use_ssvm.getId(), cmd, null); if (result == -1){ errorString = "Unable to create a link for " +type+ " id:"+template.getId(); @@ -294,7 +295,7 @@ public class UploadMonitorImpl implements UploadMonitor { throw new CloudRuntimeException(errorString); } // Create Symlink at ssvm - String uuid = UUID.randomUUID().toString() + ".vhd"; + String uuid = UUID.randomUUID().toString() + path.substring(path.length() - 4) ; // last 4 characters of the path specify the format like .vhd HostVO secStorage = ApiDBUtils.findHostById(ApiDBUtils.findUploadById(uploadId).getHostId()); HostVO ssvm = _agentMgr.getSSAgent(secStorage); if( ssvm == null ) {