Updated Branches:
  refs/heads/object_store c74969fcb -> fe3b01ece

Update DataObjectInStore interface and unify implementation of
ImageDataFactory, VolumeDataFactory and SnapshotDataFactory
implementations.

Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fe3b01ec
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fe3b01ec
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fe3b01ec

Branch: refs/heads/object_store
Commit: fe3b01ece1efd193ecc74dc31b1f6a469a7b451c
Parents: c74969f
Author: Min Chen <[email protected]>
Authored: Wed Apr 17 11:40:57 2013 -0700
Committer: Min Chen <[email protected]>
Committed: Wed Apr 17 11:40:57 2013 -0700

----------------------------------------------------------------------
 core/src/com/cloud/storage/VMTemplateHostVO.java   |   73 +++++----
 .../com/cloud/storage/VMTemplateStoragePoolVO.java |   58 ++++---
 core/src/com/cloud/storage/VolumeHostVO.java       |  119 ++++++++-------
 .../subsystem/api/storage/DataObjectInStore.java   |    2 +
 .../storage/datastore/db/SnapshotDataStoreDao.java |    8 +
 .../storage/datastore/db/SnapshotDataStoreVO.java  |    7 +
 .../storage/datastore/db/TemplateDataStoreVO.java  |    8 +
 .../storage/datastore/db/VolumeDataStoreDao.java   |    6 +-
 .../storage/datastore/db/VolumeDataStoreVO.java    |    7 +
 .../storage/image/ImageDataFactoryImpl.java        |   14 +-
 .../storage/snapshot/SnapshotDataFactoryImpl.java  |   18 +-
 .../datastore/ObjectInDataStoreManagerImpl.java    |   31 ++---
 .../cloudstack/storage/db/ObjectInDataStoreVO.java |   48 +++---
 .../storage/image/db/SnapshotDataStoreDaoImpl.java |   50 ++++++
 .../storage/image/db/VolumeDataStoreDaoImpl.java   |   21 +++-
 .../storage/volume/VolumeDataFactoryImpl.java      |   18 ++-
 .../storage/volume/VolumeServiceImpl.java          |    2 +-
 17 files changed, 313 insertions(+), 177 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/core/src/com/cloud/storage/VMTemplateHostVO.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/storage/VMTemplateHostVO.java 
b/core/src/com/cloud/storage/VMTemplateHostVO.java
index b8dfc41..8b25759 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();
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java 
b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java
index 9b76176..638ddd0 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();
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/core/src/com/cloud/storage/VolumeHostVO.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/storage/VolumeHostVO.java 
b/core/src/com/cloud/storage/VolumeHostVO.java
index 40bae49..63b1091 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();
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java
----------------------------------------------------------------------
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 32ea996..ded2640 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<ObjectInDataStoreStateMachine.State> {
     public String getInstallPath();
     public void setInstallPath(String path);
+    public long getObjectId();
+    public long getDataStoreId();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
----------------------------------------------------------------------
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 271ff41..b4e5022 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<SnapshotDataStoreVO, Lo
     public List<SnapshotDataStoreVO> 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<SnapshotDataStoreVO> listDestroyed(long storeId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/api/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java
----------------------------------------------------------------------
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 c257fb5..e4c4942 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<ObjectInDataStoreStateMa
                return installPath;
        }
 
+    @Override
        public long getDataStoreId() {
                return dataStoreId;
        }
@@ -239,4 +240,10 @@ public class SnapshotDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
         return this.state;
     }
 
+    @Override
+    public long getObjectId() {
+        return this.getSnapshotId();
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
 
b/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
index d7c8443..f1ca62b 100755
--- 
a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
+++ 
b/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
@@ -113,6 +113,7 @@ public class TemplateDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
        }
 
 
+       @Override
        public long getDataStoreId() {
                return dataStoreId;
        }
@@ -313,4 +314,11 @@ public class TemplateDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
         return updated;
     }
 
+
+    @Override
+    public long getObjectId() {
+        return this.getTemplateId();
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
 
b/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
index fb5bcc5..16877b8 100644
--- 
a/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
+++ 
b/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
@@ -32,7 +32,11 @@ public interface VolumeDataStoreDao extends 
GenericDao<VolumeDataStoreVO, Long>,
 
     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<VolumeDataStoreVO> listDestroyed(long storeId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
----------------------------------------------------------------------
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 a7134ea..d589b5c 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<ObjectInDataStoreStateMach
                return installPath;
        }
 
+    @Override
        public long getDataStoreId() {
                return dataStoreId;
        }
@@ -345,4 +346,10 @@ public class VolumeDataStoreVO implements 
StateObject<ObjectInDataStoreStateMach
         return this.state;
     }
 
+    @Override
+    public long getObjectId() {
+        return this.getVolumeId();
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/image/src/org/apache/cloudstack/storage/image/ImageDataFactoryImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/image/src/org/apache/cloudstack/storage/image/ImageDataFactoryImpl.java
 
b/engine/storage/image/src/org/apache/cloudstack/storage/image/ImageDataFactoryImpl.java
index d2c2520..2c091cc 100644
--- 
a/engine/storage/image/src/org/apache/cloudstack/storage/image/ImageDataFactoryImpl.java
+++ 
b/engine/storage/image/src/org/apache/cloudstack/storage/image/ImageDataFactoryImpl.java
@@ -21,13 +21,10 @@ package org.apache.cloudstack.storage.image;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
-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.ImageDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
-import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.image.store.TemplateObject;
@@ -47,8 +44,6 @@ public class ImageDataFactoryImpl implements ImageDataFactory 
{
     @Inject
     VMTemplateDao imageDataDao;
     @Inject
-    ObjectInDataStoreManager objMap;
-    @Inject
     DataStoreManager storeMgr;
     @Inject
     VMTemplatePoolDao templatePoolDao;
@@ -61,6 +56,7 @@ public class ImageDataFactoryImpl implements ImageDataFactory 
{
             TemplateObject tmpl =  TemplateObject.getTemplate(templ, null);
             return tmpl;
         }
+        // verify if the given input parameters are consistent with our db 
data.
         boolean found = false;
         if (store.getRole() == DataStoreRole.Primary) {
             VMTemplateStoragePoolVO templatePoolVO = 
templatePoolDao.findByPoolTemplate(store.getId(), templateId);
@@ -68,8 +64,8 @@ public class ImageDataFactoryImpl implements ImageDataFactory 
{
                 found = true;
             }
         } else {
-            DataObjectInStore obj = objMap.findObject(templ.getId(), 
DataObjectType.TEMPLATE, store.getId(), store.getRole());
-            if (obj != null) {
+            TemplateDataStoreVO templateStoreVO = 
templateStoreDao.findByStoreTemplate(store.getId(), templateId);
+            if (templateStoreVO != null) {
                 found = true;
             }
         }
@@ -82,8 +78,9 @@ public class ImageDataFactoryImpl implements ImageDataFactory 
{
         return tmpl;
     }
 
+    // NOTE that this method can only be used for get template information 
stored in secondary storage
     //TODO: this method is problematic, since one template can be stored in 
multiple image stores.
-    // need to see if we can get rid of this method or change to plural format.
+    // need to see if we can get rid of this method or change to plural 
format, or restrict to 1:1 mapping
     @Override
     public TemplateInfo getTemplate(long templateId) {
         VMTemplateVO templ = imageDataDao.findById(templateId);
@@ -94,6 +91,7 @@ public class ImageDataFactoryImpl implements ImageDataFactory 
{
         }
         return this.getTemplate(templateId, store);
     }
+
     @Override
     public TemplateInfo getTemplate(DataObject obj, DataStore store) {
         return this.getTemplate(obj.getId(), store);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
 
b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
index ff96a19..a647715 100644
--- 
a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
+++ 
b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
@@ -21,15 +21,14 @@ package org.apache.cloudstack.storage.snapshot;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
-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.SnapshotDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 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.SnapshotDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
 import org.springframework.stereotype.Component;
 
 import com.cloud.storage.DataStoreRole;
@@ -43,7 +42,7 @@ public class SnapshotDataFactoryImpl implements 
SnapshotDataFactory {
     @Inject
     SnapshotDao snapshotDao;
     @Inject
-    ObjectInDataStoreManager objMap;
+    SnapshotDataStoreDao snapshotStoreDao;
     @Inject
     DataStoreManager storeMgr;
     @Inject
@@ -51,19 +50,20 @@ public class SnapshotDataFactoryImpl implements 
SnapshotDataFactory {
     @Override
     public SnapshotInfo getSnapshot(long snapshotId, DataStore store) {
         SnapshotVO snapshot = snapshotDao.findByIdIncludingRemoved(snapshotId);
-        DataObjectInStore obj = objMap.findObject(snapshot.getId(), 
DataObjectType.SNAPSHOT, store.getId(), store.getRole());
-        if (obj == null) {
-            return null;
-        }
         SnapshotObject so =  SnapshotObject.getSnapshotObject(snapshot, store);
         return so;
     }
+
     @Override
     public SnapshotInfo getSnapshot(long snapshotId) {
        SnapshotVO snapshot = snapshotDao.findByIdIncludingRemoved(snapshotId);
        SnapshotObject so = null;
        if (snapshot.getState() == Snapshot.State.BackedUp) {
-               DataStore store = objMap.findStore(snapshot.getId(), 
DataObjectType.SNAPSHOT, DataStoreRole.Image);
+           DataStore store = null;
+           SnapshotDataStoreVO snapshotStore = 
snapshotStoreDao.findBySnapshot(snapshotId);
+           if ( snapshotStore != null ){
+               store = 
this.storeMgr.getDataStore(snapshotStore.getDataStoreId(), DataStoreRole.Image);
+           }
                so =  SnapshotObject.getSnapshotObject(snapshot, store);
        } else {
                VolumeInfo volume = 
this.volumeFactory.getVolume(snapshot.getVolumeId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
index 69db872..6e12678 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
@@ -218,20 +218,11 @@ public class ObjectInDataStoreManagerImpl implements 
ObjectInDataStoreManager {
         if (role == DataStoreRole.Image) {
             switch (type){
             case TEMPLATE:
-                SearchCriteria<TemplateDataStoreVO> 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<SnapshotDataStoreVO> 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<VolumeDataStoreVO> 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<ObjectInDataStoreVO, ObjectInDataStoreVO> 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;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
----------------------------------------------------------------------
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 fb8c93c..44b9174 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<ObjectInDataStoreStateMa
 
     @Column(name = "datastore_id")
     private long dataStoreId;
-    
+
     @Column(name = "datastore_role")
     @Enumerated(EnumType.STRING)
     private DataStoreRole dataStoreRole;
 
     @Column(name = "object_id")
     long objectId;
-    
+
     @Column(name = "object_type")
     @Enumerated(EnumType.STRING)
     DataObjectType objectType;
@@ -76,13 +76,13 @@ public class ObjectInDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
 
     @Column(name = "local_path")
     String localDownloadPath;
-    
+
     @Column (name="url")
     private String downloadUrl;
-    
+
     @Column(name="format")
     private Storage.ImageFormat format;
-    
+
     @Column(name="checksum")
     private String checksum;
 
@@ -97,46 +97,47 @@ public class ObjectInDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
 
     @Column(name = "size")
     Long size;
-    
+
     @Column(name = "state")
     @Enumerated(EnumType.STRING)
     ObjectInDataStoreStateMachine.State state;
 
     @Column(name="update_count", updatable = true, nullable=false)
     protected long updatedCount;
-    
+
     @Column(name = "updated")
     @Temporal(value = TemporalType.TIMESTAMP)
     Date updated;
-    
+
     public ObjectInDataStoreVO() {
         this.state = ObjectInDataStoreStateMachine.State.Allocated;
     }
-    
+
     public long getId() {
         return this.id;
     }
-    
+
     public DataStoreRole getDataStoreRole() {
         return this.dataStoreRole;
     }
-    
+
     public void setDataStoreRole(DataStoreRole role) {
         this.dataStoreRole = role;
     }
-    
+
+    @Override
     public long getObjectId() {
         return this.objectId;
     }
-    
+
     public void setObjectId(long id) {
         this.objectId = id;
     }
-    
+
     public DataObjectType getObjectType() {
         return this.objectType;
     }
-    
+
     public void setObjectType(DataObjectType type) {
         this.objectType = type;
     }
@@ -145,27 +146,27 @@ public class ObjectInDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
     public ObjectInDataStoreStateMachine.State getState() {
         return this.state;
     }
-    
+
     public void setInstallPath(String path) {
         this.installPath = path;
     }
-    
+
     public String getInstallPath() {
         return this.installPath;
     }
-    
+
     public void setSize(Long size) {
         this.size = size;
     }
-    
+
     public Long getSize() {
         return this.size;
     }
-    
+
     public long getUpdatedCount() {
         return this.updatedCount;
     }
-    
+
     public void incrUpdatedCount() {
         this.updatedCount++;
     }
@@ -173,15 +174,16 @@ public class ObjectInDataStoreVO implements 
StateObject<ObjectInDataStoreStateMa
     public void decrUpdatedCount() {
         this.updatedCount--;
     }
-    
+
     public Date getUpdated() {
         return updated;
     }
-    
+
     public void setUpdated(Date updated) {
         this.updated = updated;
     }
 
+    @Override
        public long getDataStoreId() {
                return dataStoreId;
        }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
index c9ade1a..92e7d28 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
@@ -26,6 +26,7 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreState
 import 
org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -42,6 +43,8 @@ public class SnapshotDataStoreDaoImpl extends 
GenericDaoBase<SnapshotDataStoreVO
     private static final Logger s_logger = 
Logger.getLogger(SnapshotDataStoreDaoImpl.class);
     private SearchBuilder<SnapshotDataStoreVO> updateStateSearch;
     private SearchBuilder<SnapshotDataStoreVO> storeSearch;
+    private SearchBuilder<SnapshotDataStoreVO> snapshotSearch;
+    private SearchBuilder<SnapshotDataStoreVO> storeSnapshotSearch;
 
     @Override
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
@@ -57,6 +60,18 @@ public class SnapshotDataStoreDaoImpl extends 
GenericDaoBase<SnapshotDataStoreVO
         updateStateSearch.and("state", updateStateSearch.entity().getState(), 
Op.EQ);
         updateStateSearch.and("updatedCount", 
updateStateSearch.entity().getUpdatedCount(), Op.EQ);
         updateStateSearch.done();
+
+        snapshotSearch = createSearchBuilder();
+        snapshotSearch.and("snapshot_id", 
snapshotSearch.entity().getSnapshotId(), SearchCriteria.Op.EQ);
+        snapshotSearch.and("destroyed", 
snapshotSearch.entity().getDestroyed(), SearchCriteria.Op.EQ);
+        snapshotSearch.done();
+
+        storeSnapshotSearch = createSearchBuilder();
+        storeSnapshotSearch.and("snapshot_id", 
storeSnapshotSearch.entity().getSnapshotId(), SearchCriteria.Op.EQ);
+        storeSnapshotSearch.and("store_id", 
storeSnapshotSearch.entity().getDataStoreId(), SearchCriteria.Op.EQ);
+        storeSnapshotSearch.and("destroyed", 
storeSnapshotSearch.entity().getDestroyed(), SearchCriteria.Op.EQ);
+        storeSnapshotSearch.done();
+
         return true;
     }
 
@@ -116,6 +131,41 @@ public class SnapshotDataStoreDaoImpl extends 
GenericDaoBase<SnapshotDataStoreVO
         txn.commit();
     }
 
+    @Override
+    public SnapshotDataStoreVO findByStoreSnapshot(long storeId, long 
snapshotId) {
+        SearchCriteria<SnapshotDataStoreVO> 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<SnapshotDataStoreVO> 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<SnapshotDataStoreVO> sc = snapshotSearch.create();
+        sc.setParameters("snapshot_id", snapshotId);
+        sc.setParameters("destroyed", false);
+        return findOneIncludingRemovedBy(sc);
+    }
+
+    @Override
+    public List<SnapshotDataStoreVO> listDestroyed(long id) {
+        SearchCriteria<SnapshotDataStoreVO> sc = storeSearch.create();
+        sc.setParameters("store_id", id);
+        sc.setParameters("destroyed", true);
+        return listIncludingRemovedBy(sc);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
----------------------------------------------------------------------
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 dc6c235..c144b36 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<VolumeDataStoreVO, Lo
 
 
     @Override
-    public VolumeDataStoreVO findByVolumeId(long volumeId) {
+    public VolumeDataStoreVO findByVolume(long volumeId) {
         SearchCriteria<VolumeDataStoreVO> sc = volumeSearch.create();
         sc.setParameters("volume_id", volumeId);
         sc.setParameters("destroyed", false);
         return findOneBy(sc);
     }
+
     @Override
     public VolumeDataStoreVO findByStoreVolume(long storeId, long volumeId) {
         SearchCriteria<VolumeDataStoreVO> sc = storeVolumeSearch.create();
@@ -148,5 +149,23 @@ public class VolumeDataStoreDaoImpl extends 
GenericDaoBase<VolumeDataStoreVO, Lo
         return findOneBy(sc);
     }
 
+    @Override
+    public VolumeDataStoreVO findByStoreVolume(long storeId, long volumeId, 
boolean lock) {
+        SearchCriteria<VolumeDataStoreVO> 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<VolumeDataStoreVO> listDestroyed(long id) {
+        SearchCriteria<VolumeDataStoreVO> sc = storeSearch.create();
+        sc.setParameters("store_id", id);
+        sc.setParameters("destroyed", true);
+        return listIncludingRemovedBy(sc);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java
----------------------------------------------------------------------
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 2929d38..e7a42de 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);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fe3b01ec/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
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 2232095..d4087ed 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));

Reply via email to