From 5454525a19a82bd86073cac3a2eb454b9217ea1f Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 29 Jun 2020 03:23:46 -0300 Subject: [PATCH 1/2] Cleanup orphan entries from snapshot store ref for primary storage --- .../storage/datastore/db/SnapshotDataStoreDao.java | 2 ++ .../storage/image/db/SnapshotDataStoreDaoImpl.java | 9 +++++++++ .../main/java/com/cloud/storage/StorageManagerImpl.java | 2 +- 3 files changed, 12 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 819cb7bc6cea..91ea07c5860b 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 @@ public interface SnapshotDataStoreDao extends GenericDao listAllByVolumeAndDataStore(long volumeId, DataStoreRole role); List 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 c7358d1558b7..151b9bae8bc3 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 List listByState(ObjectInDataStoreStateMachine.State return listBy(sc, null); } + @Override + public SnapshotDataStoreVO findDestroyedReferenceBySnapshot(long snapshotId, DataStoreRole role) { + SearchCriteria 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 79343ab4725f..5ccd6e654a8c 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -1393,7 +1393,7 @@ public void cleanupSecondaryStorage(boolean recurring) { } _snapshotDao.remove(destroyedSnapshotStoreVO.getSnapshotId()); - SnapshotDataStoreVO snapshotOnPrimary = _snapshotStoreDao.findBySnapshot(destroyedSnapshotStoreVO.getSnapshotId(), DataStoreRole.Primary); + SnapshotDataStoreVO snapshotOnPrimary = _snapshotStoreDao.findDestroyedReferenceBySnapshot(destroyedSnapshotStoreVO.getSnapshotId(), DataStoreRole.Primary); if (snapshotOnPrimary != null) { _snapshotStoreDao.remove(snapshotOnPrimary.getId()); } From f04bf833f8142941725b4adc094a561347acf930 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 29 Jun 2020 13:08:31 -0300 Subject: [PATCH 2/2] Add debug message --- server/src/main/java/com/cloud/storage/StorageManagerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index 5ccd6e654a8c..3c4f0070bed5 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -1395,6 +1395,9 @@ public void cleanupSecondaryStorage(boolean recurring) { _snapshotDao.remove(destroyedSnapshotStoreVO.getSnapshotId()); 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());