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,

Reply via email to