CLOUDSTACK-3510

Persist the download url in the db for volume download.
Signed off by : nitin mehta<nitin.mehta@citrix.com>
This commit is contained in:
Nitin Mehta 2013-07-22 17:57:27 +05:30
parent fb75f51755
commit c09d76077e
3 changed files with 24 additions and 15 deletions

View File

@ -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;
}
}

View File

@ -31,6 +31,7 @@ import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.engine.subsystem.api.storage.*;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@ -45,20 +46,6 @@ import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
import com.cloud.storage.dao.*;
import org.apache.cloudstack.api.command.user.volume.*;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo;
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;
@ -2767,6 +2754,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) this.dataStoreMgr.getPrimaryDataStore(volume.getPoolId());
@ -2811,7 +2804,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) {

View File

@ -222,6 +222,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,