You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by nv...@apache.org on 2020/07/18 17:13:16 UTC
[cloudstack] branch 4.13 updated: Fix snapshots garbage collection
(#4188)
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 <ni...@gmail.com>
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());