diff --git a/core/src/com/cloud/storage/VMTemplateHostVO.java b/core/src/com/cloud/storage/VMTemplateHostVO.java index b8dfc41d51b..8b257598041 100755 --- a/core/src/com/cloud/storage/VMTemplateHostVO.java +++ b/core/src/com/cloud/storage/VMTemplateHostVO.java @@ -44,66 +44,66 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; - + @Column(name="host_id") private long hostId; - + @Column(name="template_id") private long templateId; - + @Column(name=GenericDaoBase.CREATED_COLUMN) private Date created = null; - + @Column(name="last_updated") @Temporal(value=TemporalType.TIMESTAMP) private Date lastUpdated = null; - + @Column (name="download_pct") private int downloadPercent; - + @Column (name="size") private long size; - + @Column (name="physical_size") private long physicalSize; - + @Column (name="download_state") @Enumerated(EnumType.STRING) private Status downloadState; - + @Column (name="local_path") private String localDownloadPath; - + @Column (name="error_str") private String errorString; - + @Column (name="job_id") - private String jobId; - + private String jobId; + @Column (name="install_path") private String installPath; - + @Column (name="url") private String downloadUrl; @Column(name="is_copy") private boolean isCopy = false; - + @Column(name="destroyed") boolean destroyed = false; - + @Column(name="update_count", updatable = true, nullable=false) protected long updatedCount; - + @Column(name = "updated") @Temporal(value = TemporalType.TIMESTAMP) Date updated; - + @Column(name = "state") @Enumerated(EnumType.STRING) ObjectInDataStoreStateMachine.State state; - - + + @Override public String getInstallPath() { return installPath; @@ -156,12 +156,12 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj public Date getLastUpdated() { return lastUpdated; } - + @Override public void setLastUpdated(Date date) { lastUpdated = date; } - + @Override public void setInstallPath(String installPath) { this.installPath = installPath; @@ -197,7 +197,7 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj } protected VMTemplateHostVO() { - + } @Override @@ -234,7 +234,7 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj public boolean equals(Object obj) { if (obj instanceof VMTemplateHostVO) { VMTemplateHostVO other = (VMTemplateHostVO)obj; - return (this.templateId==other.getTemplateId() && this.hostId==other.getHostId()); + return (this.templateId==other.getTemplateId() && this.hostId==other.getHostId()); } return false; } @@ -253,8 +253,8 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj public long getSize() { return size; } - - + + public void setPhysicalSize(long physicalSize) { this.physicalSize = physicalSize; } @@ -286,12 +286,12 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj public boolean isCopy() { return isCopy; } - + @Override public long getTemplateSize() { return -1; } - + @Override public String toString() { return new StringBuilder("TmplHost[").append(id).append("-").append(templateId).append("-").append(hostId).append(installPath).append("]").toString(); @@ -302,11 +302,11 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj // TODO Auto-generated method stub return this.state; } - + public long getUpdatedCount() { return this.updatedCount; } - + public void incrUpdatedCount() { this.updatedCount++; } @@ -314,9 +314,20 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObj public void decrUpdatedCount() { this.updatedCount--; } - + public Date getUpdated() { return updated; } + @Override + public long getObjectId() { + return this.getTemplateId(); + } + + @Override + public long getDataStoreId() { + return this.getHostId(); + } + + } diff --git a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java index 9b761764359..638ddd090a6 100644 --- a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java +++ b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java @@ -45,32 +45,32 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; - + @Column(name="pool_id") private long poolId; - + @Column(name="template_id") long templateId; - + @Column(name=GenericDaoBase.CREATED_COLUMN) Date created = null; - + @Column(name="last_updated") @Temporal(value=TemporalType.TIMESTAMP) Date lastUpdated = null; - + @Column (name="download_pct") int downloadPercent; - + @Column (name="download_state") @Enumerated(EnumType.STRING) Status downloadState; - + @Column (name="local_path") String localDownloadPath; - + @Column (name="error_str") String errorString; - + @Column (name="job_id") String jobId; - + @Column (name="install_path") String installPath; - + @Column (name="template_size") long templateSize; - + @Column (name="marked_for_gc") boolean markedForGC; @Column(name="update_count", updatable = true, nullable=false) @@ -88,7 +88,7 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, public String getInstallPath() { return installPath; } - + @Override public long getTemplateSize() { return templateSize; @@ -141,12 +141,12 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, public Date getLastUpdated() { return lastUpdated; } - + @Override public void setLastUpdated(Date date) { lastUpdated = date; } - + @Override public void setInstallPath(String installPath) { this.installPath = installPath; @@ -184,7 +184,7 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, } protected VMTemplateStoragePoolVO() { - + } @Override @@ -216,15 +216,15 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, public String getJobId() { return jobId; } - + public void setTemplateSize(long templateSize) { this.templateSize = templateSize; } - + public boolean getMarkedForGC() { return markedForGC; } - + public void setMarkedForGC(boolean markedForGC) { this.markedForGC = markedForGC; } @@ -244,7 +244,7 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, Long hid = new Long(poolId); return tid.hashCode()+hid.hashCode(); } - + @Override public String toString() { return new StringBuilder("TmplPool[").append(id).append("-").append(templateId).append("-").append("poolId").append("-").append(installPath).append("]").toString(); @@ -254,11 +254,11 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, public State getState() { return this.state; } - + public long getUpdatedCount() { return this.updatedCount; } - + public void incrUpdatedCount() { this.updatedCount++; } @@ -266,10 +266,20 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, public void decrUpdatedCount() { this.updatedCount--; } - + public Date getUpdated() { return updated; } - + + @Override + public long getObjectId() { + return this.getTemplateId(); + } + + @Override + public long getDataStoreId() { + return this.getPoolId(); + } + } diff --git a/core/src/com/cloud/storage/VolumeHostVO.java b/core/src/com/cloud/storage/VolumeHostVO.java index 40bae499122..63b1091059e 100755 --- a/core/src/com/cloud/storage/VolumeHostVO.java +++ b/core/src/com/cloud/storage/VolumeHostVO.java @@ -47,71 +47,71 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; - + @Column(name="host_id") private long hostId; - + @Column(name="volume_id") private long volumeId; - + @Column(name="zone_id") private long zoneId; - + @Column(name=GenericDaoBase.CREATED_COLUMN) private Date created = null; - + @Column(name="last_updated") @Temporal(value=TemporalType.TIMESTAMP) private Date lastUpdated = null; - + @Column (name="download_pct") private int downloadPercent; - + @Column (name="size") private long size; - + @Column (name="physical_size") private long physicalSize; - + @Column (name="download_state") @Enumerated(EnumType.STRING) private Status downloadState; - + @Column(name="checksum") private String checksum; - + @Column (name="local_path") private String localDownloadPath; - + @Column (name="error_str") private String errorString; - + @Column (name="job_id") - private String jobId; - + private String jobId; + @Column (name="install_path") private String installPath; - + @Column (name="url") private String downloadUrl; - + @Column(name="format") private Storage.ImageFormat format; - + @Column(name="destroyed") boolean destroyed = false; - + @Column(name="update_count", updatable = true, nullable=false) protected long updatedCount; - + @Column(name = "updated") @Temporal(value = TemporalType.TIMESTAMP) Date updated; - + @Column(name = "state") @Enumerated(EnumType.STRING) ObjectInDataStoreStateMachine.State state; - + public String getInstallPath() { return installPath; } @@ -124,17 +124,17 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { this.hostId = hostId; } - + public long getVolumeId() { return volumeId; } - + public void setVolumeId(long volumeId) { this.volumeId = volumeId; } - + public long getZoneId() { return zoneId; } @@ -147,42 +147,42 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { return downloadPercent; } - + public void setDownloadPercent(int downloadPercent) { this.downloadPercent = downloadPercent; } - + public void setDownloadState(Status downloadState) { this.downloadState = downloadState; } - + public long getId() { return id; } - + public Date getCreated() { return created; } - + public Date getLastUpdated() { return lastUpdated; } - - + + public void setLastUpdated(Date date) { lastUpdated = date; } - - + + public void setInstallPath(String installPath) { this.installPath = installPath; } - + public Status getDownloadState() { return downloadState; } @@ -223,49 +223,49 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { } protected VolumeHostVO() { - + } - + public void setLocalDownloadPath(String localPath) { this.localDownloadPath = localPath; } - + public String getLocalDownloadPath() { return localDownloadPath; } - + public void setErrorString(String errorString) { this.errorString = errorString; } - + public String getErrorString() { return errorString; } - + public void setJobId(String jobId) { this.jobId = jobId; } - + public String getJobId() { return jobId; } - + public boolean equals(Object obj) { if (obj instanceof VolumeHostVO) { VolumeHostVO other = (VolumeHostVO)obj; - return (this.volumeId==other.getVolumeId() && this.hostId==other.getHostId()); + return (this.volumeId==other.getVolumeId() && this.hostId==other.getHostId()); } return false; } - + public int hashCode() { Long tid = new Long(volumeId); Long hid = new Long(hostId); @@ -279,8 +279,8 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { public long getSize() { return size; } - - + + public void setPhysicalSize(long physicalSize) { this.physicalSize = physicalSize; } @@ -303,8 +303,8 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { public String getDownloadUrl() { return downloadUrl; - } - + } + public Storage.ImageFormat getFormat() { return format; } @@ -316,16 +316,16 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { public long getVolumeSize() { return -1; } - - + + public String toString() { return new StringBuilder("VolumeHost[").append(id).append("-").append(volumeId).append("-").append(hostId).append(installPath).append("]").toString(); } - + public long getUpdatedCount() { return this.updatedCount; } - + public void incrUpdatedCount() { this.updatedCount++; } @@ -333,7 +333,7 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { public void decrUpdatedCount() { this.updatedCount--; } - + public Date getUpdated() { return updated; } @@ -344,4 +344,15 @@ public class VolumeHostVO implements InternalIdentity, DataObjectInStore { return this.state; } + @Override + public long getObjectId() { + return this.getVolumeId(); + } + + @Override + public long getDataStoreId() { + return this.getHostId(); + } + + } diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java index 32ea996e638..ded2640bb82 100644 --- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java @@ -24,4 +24,6 @@ import com.cloud.utils.fsm.StateObject; public interface DataObjectInStore extends StateObject { public String getInstallPath(); public void setInstallPath(String path); + public long getObjectId(); + public long getDataStoreId(); } diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java index 271ff41f08e..b4e5022c90d 100644 --- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java +++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java @@ -31,4 +31,12 @@ public interface SnapshotDataStoreDao extends GenericDao listByStoreId(long id); public void deletePrimaryRecordsForStore(long id); + + public SnapshotDataStoreVO findByStoreSnapshot(long storeId, long snapshotId); + + public SnapshotDataStoreVO findByStoreSnapshot(long storeId, long snapshotId, boolean lock); + + public SnapshotDataStoreVO findBySnapshot(long snapshotId); + + public List listDestroyed(long storeId); } diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java index c257fb5c39c..e4c4942862f 100644 --- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java +++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java @@ -95,6 +95,7 @@ public class SnapshotDataStoreVO implements StateObject, public void deletePrimaryRecordsForStore(long id); - public VolumeDataStoreVO findByVolumeId(long volumeId); + public VolumeDataStoreVO findByVolume(long volumeId); public VolumeDataStoreVO findByStoreVolume(long storeId, long volumeId); + + public VolumeDataStoreVO findByStoreVolume(long storeId, long volumeId, boolean lock); + + public List listDestroyed(long storeId); } diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java index a7134ea374c..d589b5c8b1d 100755 --- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java +++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java @@ -117,6 +117,7 @@ public class VolumeDataStoreVO implements StateObject ts = templateDataStoreDao.createSearchCriteria(); - ts.addAnd("templateId", SearchCriteria.Op.EQ, objId); - ts.addAnd("dataStoreId", SearchCriteria.Op.EQ, dataStoreId); - vo = templateDataStoreDao.findOneBy(ts); + vo = templateDataStoreDao.findByStoreTemplate(dataStoreId, objId); case SNAPSHOT: - SearchCriteria ss = snapshotDataStoreDao.createSearchCriteria(); - ss.addAnd("snapshotId", SearchCriteria.Op.EQ, objId); - ss.addAnd("dataStoreId", SearchCriteria.Op.EQ, objId); - vo = snapshotDataStoreDao.findOneBy(ss); + vo = snapshotDataStoreDao.findByStoreSnapshot(dataStoreId, objId); case VOLUME: - SearchCriteria vs = volumeDataStoreDao.createSearchCriteria(); - vs.addAnd("volumeId", SearchCriteria.Op.EQ, objId); - vs.addAnd("dataStoreId", SearchCriteria.Op.EQ, objId); - vo = volumeDataStoreDao.findOneBy(vs); + vo = volumeDataStoreDao.findByStoreVolume(dataStoreId, objId); } } else if (type == DataObjectType.TEMPLATE && role == DataStoreRole.Primary) { vo = templatePoolDao.findByPoolTemplate(dataStoreId, objId); @@ -255,13 +246,17 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager { public DataStore findStore(long objId, DataObjectType type, DataStoreRole role) { DataStore store = null; if (role == DataStoreRole.Image) { - SearchCriteriaService sc = SearchCriteria2.create(ObjectInDataStoreVO.class); - sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role); - sc.addAnd(sc.getEntity().getObjectId(), Op.EQ, objId); - sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type); - ObjectInDataStoreVO vo = sc.find(); + DataObjectInStore vo = null; + switch (type){ + case TEMPLATE: + vo = templateDataStoreDao.findByTemplate(objId); + case SNAPSHOT: + vo = snapshotDataStoreDao.findBySnapshot(objId); + case VOLUME: + vo = volumeDataStoreDao.findByVolume(objId); + } if (vo != null) { - store = this.storeMgr.getDataStore(vo.getDataStoreId(), vo.getDataStoreRole()); + store = this.storeMgr.getDataStore(vo.getDataStoreId(), DataStoreRole.Image); } } return store; diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java index fb8c93ceedc..44b91745d61 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java +++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java @@ -48,14 +48,14 @@ public class ObjectInDataStoreVO implements StateObject updateStateSearch; private SearchBuilder storeSearch; + private SearchBuilder snapshotSearch; + private SearchBuilder storeSnapshotSearch; @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -57,6 +60,18 @@ public class SnapshotDataStoreDaoImpl extends GenericDaoBase sc = storeSnapshotSearch.create(); + sc.setParameters("store_id", storeId); + sc.setParameters("snapshot_id", snapshotId); + sc.setParameters("destroyed", false); + return findOneIncludingRemovedBy(sc); + } + @Override + public SnapshotDataStoreVO findByStoreSnapshot(long storeId, long snapshotId, boolean lock) { + SearchCriteria sc = storeSnapshotSearch.create(); + sc.setParameters("store_id", storeId); + sc.setParameters("snapshot_id", snapshotId); + sc.setParameters("destroyed", false); + if (!lock) + return findOneIncludingRemovedBy(sc); + else + return lockOneRandomRow(sc, true); + } + + @Override + public SnapshotDataStoreVO findBySnapshot(long snapshotId) { + SearchCriteria sc = snapshotSearch.create(); + sc.setParameters("snapshot_id", snapshotId); + sc.setParameters("destroyed", false); + return findOneIncludingRemovedBy(sc); + } + + @Override + public List listDestroyed(long id) { + SearchCriteria sc = storeSearch.create(); + sc.setParameters("store_id", id); + sc.setParameters("destroyed", true); + return listIncludingRemovedBy(sc); + } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java index dc6c2354952..c144b360cb1 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java @@ -133,12 +133,13 @@ public class VolumeDataStoreDaoImpl extends GenericDaoBase sc = volumeSearch.create(); sc.setParameters("volume_id", volumeId); sc.setParameters("destroyed", false); return findOneBy(sc); } + @Override public VolumeDataStoreVO findByStoreVolume(long storeId, long volumeId) { SearchCriteria sc = storeVolumeSearch.create(); @@ -148,5 +149,23 @@ public class VolumeDataStoreDaoImpl extends GenericDaoBase sc = storeVolumeSearch.create(); + sc.setParameters("store_id", storeId); + sc.setParameters("volume_id", volumeId); + sc.setParameters("destroyed", false); + if (!lock) + return findOneIncludingRemovedBy(sc); + else + return lockOneRandomRow(sc, true); + } + @Override + public List listDestroyed(long id) { + SearchCriteria sc = storeSearch.create(); + sc.setParameters("store_id", id); + sc.setParameters("destroyed", true); + return listIncludingRemovedBy(sc); + } } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java index 2929d3881e5..e7a42dea750 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java @@ -21,12 +21,12 @@ package org.apache.cloudstack.storage.volume; import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; -import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; 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.VolumeDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; -import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; +import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; import org.springframework.stereotype.Component; import com.cloud.storage.DataStoreRole; @@ -38,24 +38,28 @@ public class VolumeDataFactoryImpl implements VolumeDataFactory { @Inject VolumeDao volumeDao; @Inject - ObjectInDataStoreManager objMap; + VolumeDataStoreDao volumeStoreDao; @Inject DataStoreManager storeMgr; @Override public VolumeInfo getVolume(long volumeId, DataStore store) { VolumeVO volumeVO = volumeDao.findById(volumeId); - + VolumeObject vol = VolumeObject.getVolumeObject(store, volumeVO); - + return vol; } - + @Override public VolumeInfo getVolume(long volumeId) { VolumeVO volumeVO = volumeDao.findById(volumeId); VolumeObject vol = null; if (volumeVO.getPoolId() == null) { - DataStore store = objMap.findStore(volumeVO.getId(), DataObjectType.VOLUME, DataStoreRole.Image); + DataStore store = null; + VolumeDataStoreVO volumeStore = volumeStoreDao.findByVolume(volumeId); + if ( volumeStore != null ){ + store = this.storeMgr.getDataStore(volumeStore.getDataStoreId(), DataStoreRole.Image); + } vol = VolumeObject.getVolumeObject(store, volumeVO); } else { DataStore store = this.storeMgr.getDataStore(volumeVO.getPoolId(), DataStoreRole.Primary); diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index 22320957e63..d4087ed66f3 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -774,7 +774,7 @@ public class VolumeServiceImpl implements VolumeService { if (volInfo.getSize() > 0) { try { - String url = _volumeStoreDao.findByVolumeId(volume.getId()).getDownloadUrl(); + String url = _volumeStoreDao.findByVolume(volume.getId()).getDownloadUrl(); _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(volume.getAccountId()), com.cloud.configuration.Resource.ResourceType.secondary_storage, volInfo.getSize() - UriUtils.getRemoteSize(url));