DaanHoogland commented on code in PR #12347:
URL: https://github.com/apache/cloudstack/pull/12347#discussion_r2651421002


##########
server/src/main/java/com/cloud/storage/StorageManagerImpl.java:
##########
@@ -2055,6 +2008,63 @@ public void cleanupStorage(boolean recurring) {
         }
     }
 
+    private void cleanupSnapshotsFromStoreRefInDestroyingState() {
+        List<SnapshotDataStoreVO> storeRefSnapshotsInDestroyingState = 
_snapshotStoreDao.listByState(ObjectInDataStoreStateMachine.State.Destroying);
+        for (SnapshotDataStoreVO snapshotDataStoreVO : 
storeRefSnapshotsInDestroyingState) {
+            SnapshotVO snapshot = 
_snapshotDao.findById(snapshotDataStoreVO.getSnapshotId());
+            if (snapshot == null) {
+                logger.warn("Did not find snapshot [ID: {}] for which store 
reference is in destroying state; therefore, it cannot be destroyed.", 
snapshotDataStoreVO.getSnapshotId());
+                continue;
+            }
+            deleteSnapshot(snapshot, snapshotDataStoreVO);
+        }
+    }
+
+    private void deleteSnapshot(SnapshotVO snapshot, SnapshotDataStoreVO 
snapshotDataStoreVO) {
+        if (snapshot == null || snapshotDataStoreVO == null) {
+            return;
+        }
+
+        try {
+            final String snapshotUuid = snapshot.getUuid();
+            final String storeRole = 
snapshotDataStoreVO.getRole().toString().toLowerCase();
+            if (logger.isDebugEnabled()) {
+                logger.debug("Snapshot [{}] is in {} state on {} data store 
ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
+            }

Review Comment:
   ```suggestion
               logger.debug("Snapshot [{}] is in {} state on {} data store ID: 
{}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
   ```



##########
server/src/main/java/com/cloud/storage/StorageManagerImpl.java:
##########
@@ -2055,6 +2008,63 @@ public void cleanupStorage(boolean recurring) {
         }
     }
 
+    private void cleanupSnapshotsFromStoreRefInDestroyingState() {
+        List<SnapshotDataStoreVO> storeRefSnapshotsInDestroyingState = 
_snapshotStoreDao.listByState(ObjectInDataStoreStateMachine.State.Destroying);
+        for (SnapshotDataStoreVO snapshotDataStoreVO : 
storeRefSnapshotsInDestroyingState) {
+            SnapshotVO snapshot = 
_snapshotDao.findById(snapshotDataStoreVO.getSnapshotId());
+            if (snapshot == null) {
+                logger.warn("Did not find snapshot [ID: {}] for which store 
reference is in destroying state; therefore, it cannot be destroyed.", 
snapshotDataStoreVO.getSnapshotId());
+                continue;
+            }
+            deleteSnapshot(snapshot, snapshotDataStoreVO);
+        }
+    }
+
+    private void deleteSnapshot(SnapshotVO snapshot, SnapshotDataStoreVO 
snapshotDataStoreVO) {
+        if (snapshot == null || snapshotDataStoreVO == null) {
+            return;
+        }
+
+        try {
+            final String snapshotUuid = snapshot.getUuid();
+            final String storeRole = 
snapshotDataStoreVO.getRole().toString().toLowerCase();
+            if (logger.isDebugEnabled()) {
+                logger.debug("Snapshot [{}] is in {} state on {} data store 
ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
+            }
+            SnapshotInfo snapshotInfo = 
snapshotFactory.getSnapshotIncludingRemoved(snapshotDataStoreVO.getSnapshotId(),
 snapshotDataStoreVO.getDataStoreId(), snapshotDataStoreVO.getRole());
+            if (snapshotInfo != null) {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Snapshot [{}] in {} state found on {} data 
store [{}], it will be deleted.", snapshotUuid, snapshotDataStoreVO.getState(), 
storeRole, snapshotInfo.getDataStore().getUuid());
+                }
+                _snapshotService.deleteSnapshot(snapshotInfo);
+            } else if (logger.isDebugEnabled()) {
+                logger.debug("Did not find snapshot [{}] in {} state on {} 
data store ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
+            }

Review Comment:
   ```suggestion
               } else {
                   logger.debug("Did not find snapshot [{}] in {} state on {} 
data store ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
               }
   ```



##########
server/src/main/java/com/cloud/storage/StorageManagerImpl.java:
##########
@@ -2055,6 +2008,63 @@ public void cleanupStorage(boolean recurring) {
         }
     }
 
+    private void cleanupSnapshotsFromStoreRefInDestroyingState() {
+        List<SnapshotDataStoreVO> storeRefSnapshotsInDestroyingState = 
_snapshotStoreDao.listByState(ObjectInDataStoreStateMachine.State.Destroying);
+        for (SnapshotDataStoreVO snapshotDataStoreVO : 
storeRefSnapshotsInDestroyingState) {
+            SnapshotVO snapshot = 
_snapshotDao.findById(snapshotDataStoreVO.getSnapshotId());
+            if (snapshot == null) {
+                logger.warn("Did not find snapshot [ID: {}] for which store 
reference is in destroying state; therefore, it cannot be destroyed.", 
snapshotDataStoreVO.getSnapshotId());
+                continue;
+            }
+            deleteSnapshot(snapshot, snapshotDataStoreVO);
+        }
+    }
+
+    private void deleteSnapshot(SnapshotVO snapshot, SnapshotDataStoreVO 
snapshotDataStoreVO) {
+        if (snapshot == null || snapshotDataStoreVO == null) {
+            return;
+        }
+
+        try {
+            final String snapshotUuid = snapshot.getUuid();
+            final String storeRole = 
snapshotDataStoreVO.getRole().toString().toLowerCase();
+            if (logger.isDebugEnabled()) {
+                logger.debug("Snapshot [{}] is in {} state on {} data store 
ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
+            }
+            SnapshotInfo snapshotInfo = 
snapshotFactory.getSnapshotIncludingRemoved(snapshotDataStoreVO.getSnapshotId(),
 snapshotDataStoreVO.getDataStoreId(), snapshotDataStoreVO.getRole());
+            if (snapshotInfo != null) {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Snapshot [{}] in {} state found on {} data 
store [{}], it will be deleted.", snapshotUuid, snapshotDataStoreVO.getState(), 
storeRole, snapshotInfo.getDataStore().getUuid());
+                }
+                _snapshotService.deleteSnapshot(snapshotInfo);
+            } else if (logger.isDebugEnabled()) {
+                logger.debug("Did not find snapshot [{}] in {} state on {} 
data store ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
+            }
+        } catch (Exception e) {
+            logger.error("Failed to delete snapshot [{}] from storage due to: 
[{}].", snapshot, e.getMessage());
+            if (logger.isDebugEnabled()) {
+                logger.debug("Failed to delete snapshot [{}] from storage.", 
snapshot, e);
+            }

Review Comment:
   ```suggestion
               logger.debug("Failed to delete snapshot [{}] from storage.", 
snapshot, e);
   ```



##########
server/src/main/java/com/cloud/storage/StorageManagerImpl.java:
##########
@@ -2055,6 +2008,63 @@ public void cleanupStorage(boolean recurring) {
         }
     }
 
+    private void cleanupSnapshotsFromStoreRefInDestroyingState() {
+        List<SnapshotDataStoreVO> storeRefSnapshotsInDestroyingState = 
_snapshotStoreDao.listByState(ObjectInDataStoreStateMachine.State.Destroying);
+        for (SnapshotDataStoreVO snapshotDataStoreVO : 
storeRefSnapshotsInDestroyingState) {
+            SnapshotVO snapshot = 
_snapshotDao.findById(snapshotDataStoreVO.getSnapshotId());
+            if (snapshot == null) {
+                logger.warn("Did not find snapshot [ID: {}] for which store 
reference is in destroying state; therefore, it cannot be destroyed.", 
snapshotDataStoreVO.getSnapshotId());
+                continue;
+            }
+            deleteSnapshot(snapshot, snapshotDataStoreVO);
+        }
+    }
+
+    private void deleteSnapshot(SnapshotVO snapshot, SnapshotDataStoreVO 
snapshotDataStoreVO) {
+        if (snapshot == null || snapshotDataStoreVO == null) {
+            return;
+        }
+
+        try {
+            final String snapshotUuid = snapshot.getUuid();
+            final String storeRole = 
snapshotDataStoreVO.getRole().toString().toLowerCase();
+            if (logger.isDebugEnabled()) {
+                logger.debug("Snapshot [{}] is in {} state on {} data store 
ID: {}.", snapshotUuid, snapshotDataStoreVO.getState(), storeRole, 
snapshotDataStoreVO.getDataStoreId());
+            }
+            SnapshotInfo snapshotInfo = 
snapshotFactory.getSnapshotIncludingRemoved(snapshotDataStoreVO.getSnapshotId(),
 snapshotDataStoreVO.getDataStoreId(), snapshotDataStoreVO.getRole());
+            if (snapshotInfo != null) {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Snapshot [{}] in {} state found on {} data 
store [{}], it will be deleted.", snapshotUuid, snapshotDataStoreVO.getState(), 
storeRole, snapshotInfo.getDataStore().getUuid());
+                }

Review Comment:
   I think the condition is not needed for the simple getters. Else lambdas can 
work as well.
   ```suggestion
                   logger.debug("Snapshot [{}] in {} state found on {} data 
store [{}], it will be deleted.", snapshotUuid, snapshotDataStoreVO.getState(), 
storeRole, snapshotInfo.getDataStore().getUuid());
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to