Updated Branches: refs/heads/master 7d342e695 -> a49da6bee
CLOUDSTACK-3510 Persist the download url in the db for volume download. Signed off by : nitin mehta<nitin.me...@citrix.com> Conflicts: server/src/com/cloud/storage/VolumeManagerImpl.java Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d64c318f Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d64c318f Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d64c318f Branch: refs/heads/master Commit: d64c318f5765f430e0e7982163d9527e8a2bfd08 Parents: 7d342e6 Author: Edison Su <sudi...@gmail.com> Authored: Mon Jul 29 11:47:43 2013 -0700 Committer: Edison Su <sudi...@gmail.com> Committed: Mon Jul 29 11:50:15 2013 -0700 ---------------------------------------------------------------------- .../storage/datastore/db/VolumeDataStoreVO.java | 10 +++++++++ .../com/cloud/storage/VolumeManagerImpl.java | 22 +++++++++++++++++--- setup/db/db/schema-410to420.sql | 1 + 3 files changed, 30 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d64c318f/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java index a5d0830..0d19d4e 100755 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java @@ -97,6 +97,9 @@ public class VolumeDataStoreVO implements StateObject<ObjectInDataStoreStateMach @Column(name = "url") private String downloadUrl; + @Column(name = "download_url") + private String extractUrl; + @Column(name = "destroyed") boolean destroyed = false; @@ -345,4 +348,11 @@ public class VolumeDataStoreVO implements StateObject<ObjectInDataStoreStateMach this.refCnt--; } + public String getExtractUrl() { + return extractUrl; + } + + public void setExtractUrl(String extractUrl) { + this.extractUrl = extractUrl; + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d64c318f/server/src/com/cloud/storage/VolumeManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java index 2a97b0b..6c14a19 100644 --- a/server/src/com/cloud/storage/VolumeManagerImpl.java +++ b/server/src/com/cloud/storage/VolumeManagerImpl.java @@ -31,6 +31,11 @@ import java.util.concurrent.ExecutionException; import javax.inject.Inject; import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + + import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; @@ -40,6 +45,7 @@ import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UpdateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; + import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; @@ -56,6 +62,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; + import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult; import org.apache.cloudstack.framework.async.AsyncCallFuture; import org.apache.cloudstack.storage.command.AttachAnswer; @@ -71,8 +78,6 @@ import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity; import org.apache.commons.lang.StringUtils; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; @@ -2784,6 +2789,12 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { extractMode = mode.equals(Upload.Mode.FTP_UPLOAD.toString()) ? Upload.Mode.FTP_UPLOAD : Upload.Mode.HTTP_DOWNLOAD; } + // Check if the url already exists + VolumeDataStoreVO volumeStoreRef = _volumeStoreDao.findByVolume(volumeId); + if(volumeStoreRef != null && volumeStoreRef.getExtractUrl() != null){ + return volumeStoreRef.getExtractUrl(); + } + // Clean up code to remove all those previous uploadVO and uploadMonitor code. Previous code is trying to fake an async operation purely in // db table with uploadVO and async_job entry, but internal implementation is actually synchronous. StoragePool srcPool = (StoragePool) dataStoreMgr.getPrimaryDataStore(volume.getPoolId()); @@ -2828,7 +2839,12 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { s_logger.debug("Storage unavailable"); } } - return secStore.createEntityExtractUrl(vol.getPath(), vol.getFormat()); + String extractUrl = secStore.createEntityExtractUrl(vol.getPath(), vol.getFormat()); + volumeStoreRef = _volumeStoreDao.findByVolume(volumeId); + volumeStoreRef.setExtractUrl(extractUrl); + _volumeStoreDao.update(volumeStoreRef.getId(), volumeStoreRef); + + return extractUrl; } private String getFormatForPool(StoragePool pool) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d64c318f/setup/db/db/schema-410to420.sql ---------------------------------------------------------------------- diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql index 3ed2fd2..f392603 100644 --- a/setup/db/db/schema-410to420.sql +++ b/setup/db/db/schema-410to420.sql @@ -226,6 +226,7 @@ CREATE TABLE `cloud`.`volume_store_ref` ( `local_path` varchar(255), `install_path` varchar(255), `url` varchar(255), + `download_url` varchar(255), `state` varchar(255) NOT NULL, `destroyed` tinyint(1) COMMENT 'indicates whether the volume_host entry was destroyed by the user or not', `update_count` bigint unsigned,