This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch 4.13
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.13 by this push:
     new f843c53  Fix snapshots garbage collection (#4188)
f843c53 is described below

commit f843c537f06cd19995ffd55b34bc693c890b61a5
Author: Nicolas Vazquez <[email protected]>
AuthorDate: Sat Jul 18 14:12:53 2020 -0300

    Fix snapshots garbage collection (#4188)
    
    * Cleanup orphan entries from snapshot store ref for primary storage
    
    * Add debug message
---
 .../cloudstack/storage/datastore/db/SnapshotDataStoreDao.java    | 2 ++
 .../cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java    | 9 +++++++++
 server/src/main/java/com/cloud/storage/StorageManagerImpl.java   | 5 ++++-
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
 
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
index 819cb7b..91ea07c 100644
--- 
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
+++ 
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
@@ -71,4 +71,6 @@ StateDao<ObjectInDataStoreStateMachine.State, 
ObjectInDataStoreStateMachine.Even
     List<SnapshotDataStoreVO> listAllByVolumeAndDataStore(long volumeId, 
DataStoreRole role);
 
     List<SnapshotDataStoreVO> 
listByState(ObjectInDataStoreStateMachine.State... states);
+
+    SnapshotDataStoreVO findDestroyedReferenceBySnapshot(long snapshotId, 
DataStoreRole role);
 }
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
index c7358d1..151b9ba 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
@@ -461,6 +461,15 @@ public class SnapshotDataStoreDaoImpl extends 
GenericDaoBase<SnapshotDataStoreVO
         return listBy(sc, null);
     }
 
+    @Override
+    public SnapshotDataStoreVO findDestroyedReferenceBySnapshot(long 
snapshotId, DataStoreRole role) {
+        SearchCriteria<SnapshotDataStoreVO> sc = snapshotSearch.create();
+        sc.setParameters("snapshot_id", snapshotId);
+        sc.setParameters("store_role", role);
+        sc.setParameters("state", State.Destroyed);
+        return findOneBy(sc);
+    }
+
     private boolean isSnapshotChainingRequired(long volumeId) {
 
         
hypervisorsSupportingSnapshotsChaining.add(Hypervisor.HypervisorType.XenServer);
diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java 
b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
index 79343ab..3c4f007 100644
--- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
@@ -1393,8 +1393,11 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                         }
 
                         
_snapshotDao.remove(destroyedSnapshotStoreVO.getSnapshotId());
-                        SnapshotDataStoreVO snapshotOnPrimary = 
_snapshotStoreDao.findBySnapshot(destroyedSnapshotStoreVO.getSnapshotId(), 
DataStoreRole.Primary);
+                        SnapshotDataStoreVO snapshotOnPrimary = 
_snapshotStoreDao.findDestroyedReferenceBySnapshot(destroyedSnapshotStoreVO.getSnapshotId(),
 DataStoreRole.Primary);
                         if (snapshotOnPrimary != null) {
+                            if (s_logger.isDebugEnabled()) {
+                                s_logger.debug("Deleting snapshot on primary 
store reference DB entry: " + snapshotOnPrimary);
+                            }
                             
_snapshotStoreDao.remove(snapshotOnPrimary.getId());
                         }
                         
_snapshotStoreDao.remove(destroyedSnapshotStoreVO.getId());

Reply via email to