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

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


The following commit(s) were added to refs/heads/main by this push:
     new e437d1016f6 Snapshot removal and storage cleanup logs (#8031)
e437d1016f6 is described below

commit e437d1016f6f44344e0ece563c6e42c71964fd80
Author: sato03 <[email protected]>
AuthorDate: Mon Oct 16 11:20:09 2023 -0300

    Snapshot removal and storage cleanup logs (#8031)
---
 .../storage/snapshot/SnapshotServiceImpl.java      | 14 ++--
 .../java/com/cloud/storage/StorageManagerImpl.java | 77 ++++++++++++++++------
 2 files changed, 63 insertions(+), 28 deletions(-)

diff --git 
a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
 
b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
index 4d106f5c4f6..0c65eb04533 100644
--- 
a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
+++ 
b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
@@ -364,7 +364,7 @@ public class SnapshotServiceImpl implements SnapshotService 
{
         SnapshotResult res = null;
         try {
             if (result.isFailed()) {
-                s_logger.debug("delete snapshot failed" + result.getResult());
+                s_logger.debug(String.format("Failed to delete snapshot [%s] 
due to: [%s].", snapshot.getUuid(), result.getResult()));
                 
snapshot.processEvent(ObjectInDataStoreStateMachine.Event.OperationFailed);
                 res = new SnapshotResult(context.snapshot, null);
                 res.setResult(result.getResult());
@@ -373,7 +373,8 @@ public class SnapshotServiceImpl implements SnapshotService 
{
                 res = new SnapshotResult(context.snapshot, null);
             }
         } catch (Exception e) {
-            s_logger.debug("Failed to in deleteSnapshotCallback", e);
+            s_logger.error(String.format("An exception occurred while 
processing an event in delete snapshot callback from snapshot [%s].", 
snapshot.getUuid()));
+            s_logger.debug(String.format("Exception while processing an event 
in delete snapshot callback from snapshot [%s].", snapshot.getUuid()), e);
             res.setResult(e.toString());
         }
         future.complete(res);
@@ -418,15 +419,14 @@ public class SnapshotServiceImpl implements 
SnapshotService {
             if (result.isFailed()) {
                 throw new CloudRuntimeException(result.getResult());
             }
+            s_logger.debug(String.format("Successfully deleted snapshot [%s] 
with ID [%s].", snapInfo.getName(), snapInfo.getUuid()));
             return true;
-        } catch (InterruptedException e) {
-            s_logger.debug("delete snapshot is failed: " + e.toString());
-        } catch (ExecutionException e) {
-            s_logger.debug("delete snapshot is failed: " + e.toString());
+        } catch (InterruptedException | ExecutionException e) {
+            s_logger.error(String.format("Failed to delete snapshot [%s] due 
to: [%s].", snapInfo.getUuid(), e.getMessage()));
+            s_logger.debug(String.format("Failed to delete snapshot [%s].", 
snapInfo.getUuid()), e);
         }
 
         return false;
-
     }
 
     @Override
diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java 
b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
index 4bdb8f2861e..56b028720d2 100644
--- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
@@ -1289,26 +1289,27 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                             try {
 
                                 List<VMTemplateStoragePoolVO> 
unusedTemplatesInPool = _tmpltMgr.getUnusedTemplatesInPool(pool);
-                                s_logger.debug("Storage pool garbage collector 
found " + unusedTemplatesInPool.size() + " templates to clean up in storage 
pool: " + pool.getName());
+                                s_logger.debug(String.format("Storage pool 
garbage collector found [%s] templates to be cleaned up in storage pool [%s].", 
unusedTemplatesInPool.size(), pool.getName()));
                                 for (VMTemplateStoragePoolVO templatePoolVO : 
unusedTemplatesInPool) {
                                     if (templatePoolVO.getDownloadState() != 
VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
-                                        s_logger.debug("Storage pool garbage 
collector is skipping template with ID: " + templatePoolVO.getTemplateId() + " 
on pool " + templatePoolVO.getPoolId()
-                                        + " because it is not completely 
downloaded.");
+                                        s_logger.debug(String.format("Storage 
pool garbage collector is skipping template [%s] clean up on pool [%s] " +
+                                                "because it is not completely 
downloaded.", templatePoolVO.getTemplateId(), templatePoolVO.getPoolId()));
                                         continue;
                                     }
 
                                     if (!templatePoolVO.getMarkedForGC()) {
                                         templatePoolVO.setMarkedForGC(true);
                                         
_vmTemplatePoolDao.update(templatePoolVO.getId(), templatePoolVO);
-                                        s_logger.debug("Storage pool garbage 
collector has marked template with ID: " + templatePoolVO.getTemplateId() + " 
on pool " + templatePoolVO.getPoolId()
-                                        + " for garbage collection.");
+                                        s_logger.debug(String.format("Storage 
pool garbage collector has marked template [%s] on pool [%s] " +
+                                                "for garbage collection.", 
templatePoolVO.getTemplateId(), templatePoolVO.getPoolId()));
                                         continue;
                                     }
 
                                     
_tmpltMgr.evictTemplateFromStoragePool(templatePoolVO);
                                 }
                             } catch (Exception e) {
-                                s_logger.warn("Problem cleaning up primary 
storage pool " + pool, e);
+                                s_logger.error(String.format("Failed to clean 
up primary storage pool [%s] due to: [%s].", pool, e.getMessage()));
+                                s_logger.debug(String.format("Failed to clean 
up primary storage pool [%s].", pool), e);
                             }
                         }
                     }
@@ -1316,10 +1317,39 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                     //destroy snapshots in destroying state in 
snapshot_store_ref
                     List<SnapshotDataStoreVO> ssSnapshots = 
_snapshotStoreDao.listByState(ObjectInDataStoreStateMachine.State.Destroying);
                     for (SnapshotDataStoreVO ssSnapshotVO : ssSnapshots) {
+                        String snapshotUuid = null;
+                        SnapshotVO snapshot = null;
+
+                        if (s_logger.isDebugEnabled()) {
+                            snapshot = 
_snapshotDao.findById(ssSnapshotVO.getSnapshotId());
+                            if (snapshot == null) {
+                                s_logger.warn(String.format("Did not find 
snapshot [%s] in destroying state; therefore, it cannot be destroyed.", 
ssSnapshotVO.getSnapshotId()));
+                                continue;
+                            }
+
+                            snapshotUuid = snapshot.getUuid();
+                        }
+
                         try {
-                            
_snapshotService.deleteSnapshot(snapshotFactory.getSnapshot(ssSnapshotVO.getSnapshotId(),
 DataStoreRole.Image));
+                            if (s_logger.isDebugEnabled()) {
+                                s_logger.debug(String.format("Verifying if 
snapshot [%s] is in destroying state in any image data store.", snapshotUuid));
+                            }
+
+                            SnapshotInfo snapshotInfo = 
snapshotFactory.getSnapshot(ssSnapshotVO.getSnapshotId(), DataStoreRole.Image);
+
+                            if (snapshotInfo != null) {
+                                if (s_logger.isDebugEnabled()) {
+                                    s_logger.debug(String.format("Snapshot 
[%s] in destroying state found in image data store [%s]; therefore, it will be 
destroyed.", snapshotUuid, snapshotInfo.getDataStore().getUuid()));
+                                }
+                                _snapshotService.deleteSnapshot(snapshotInfo);
+                            } else if (s_logger.isDebugEnabled()) {
+                                s_logger.debug(String.format("Did not find 
snapshot [%s] in destroying state in any image data store.", snapshotUuid));
+                            }
                         } catch (Exception e) {
-                            s_logger.debug("Failed to delete snapshot: " + 
ssSnapshotVO.getId() + " from storage");
+                            s_logger.error(String.format("Failed to delete 
snapshot [%s] from storage due to: [%s].", ssSnapshotVO.getSnapshotId(), 
e.getMessage()));
+                            if (s_logger.isDebugEnabled()) {
+                                s_logger.debug(String.format("Failed to delete 
snapshot [%s] from storage.", snapshotUuid), e);
+                            }
                         }
                     }
                     cleanupSecondaryStorage(recurring);
@@ -1343,7 +1373,8 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                             // system, but not necessary.
                             handleManagedStorage(vol);
                         } catch (Exception e) {
-                            s_logger.warn("Unable to destroy host-side 
clustered file system " + vol.getUuid(), e);
+                            s_logger.error(String.format("Unable to destroy 
host-side clustered file system [%s] due to: [%s].", vol.getUuid(), 
e.getMessage()));
+                            s_logger.debug(String.format("Unable to destroy 
host-side clustered file system [%s].", vol.getUuid()), e);
                         }
 
                         try {
@@ -1352,10 +1383,11 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                                 
volService.ensureVolumeIsExpungeReady(vol.getId());
                                 volService.expungeVolumeAsync(volumeInfo);
                             } else {
-                                s_logger.debug("Volume " + vol.getUuid() + " 
is already destroyed");
+                                s_logger.debug(String.format("Volume [%s] is 
already destroyed.", vol.getUuid()));
                             }
                         } catch (Exception e) {
-                            s_logger.warn("Unable to destroy volume " + 
vol.getUuid(), e);
+                            s_logger.error(String.format("Unable to destroy 
volume [%s] due to: [%s].", vol.getUuid(), e.getMessage()));
+                            s_logger.debug(String.format("Unable to destroy 
volume [%s].", vol.getUuid()), e);
                         }
                     }
 
@@ -1369,7 +1401,8 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                             }
                             _snapshotDao.expunge(snapshotVO.getId());
                         } catch (Exception e) {
-                            s_logger.warn("Unable to destroy snapshot " + 
snapshotVO.getUuid(), e);
+                            s_logger.error(String.format("Unable to destroy 
snapshot [%s] due to: [%s].", snapshotVO.getUuid(), e.getMessage()));
+                            s_logger.debug(String.format("Unable to destroy 
snapshot [%s].", snapshotVO.getUuid()), e);
                         }
                     }
 
@@ -1378,14 +1411,14 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                     for (VolumeDataStoreVO volumeDataStore : volumeDataStores) 
{
                         VolumeVO volume = 
volumeDao.findById(volumeDataStore.getVolumeId());
                         if (volume == null) {
-                            s_logger.warn("Uploaded volume with id " + 
volumeDataStore.getVolumeId() + " not found, so cannot be destroyed");
+                            s_logger.warn(String.format("Uploaded volume [%s] 
not found, so cannot be destroyed.", volumeDataStore.getVolumeId()));
                             continue;
                         }
                         try {
                             DataStore dataStore = 
_dataStoreMgr.getDataStore(volumeDataStore.getDataStoreId(), 
DataStoreRole.Image);
                             EndPoint ep = _epSelector.select(dataStore, 
volumeDataStore.getExtractUrl());
                             if (ep == null) {
-                                s_logger.warn("There is no secondary storage 
VM for image store " + dataStore.getName() + ", cannot destroy uploaded volume 
" + volume.getUuid());
+                                s_logger.warn(String.format("There is no 
secondary storage VM for image store [%s], cannot destroy uploaded volume 
[%s].", dataStore.getName(), volume.getUuid()));
                                 continue;
                             }
                             Host host = _hostDao.findById(ep.getId());
@@ -1397,17 +1430,18 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                                     // expunge volume from secondary if volume 
is on image store
                                     VolumeInfo volOnSecondary = 
volFactory.getVolume(volume.getId(), DataStoreRole.Image);
                                     if (volOnSecondary != null) {
-                                        s_logger.info("Expunging volume " + 
volume.getUuid() + " uploaded using HTTP POST from secondary data store");
+                                        s_logger.info(String.format("Expunging 
volume [%s] uploaded using HTTP POST from secondary data store.", 
volume.getUuid()));
                                         AsyncCallFuture<VolumeApiResult> 
future = volService.expungeVolumeAsync(volOnSecondary);
                                         VolumeApiResult result = future.get();
                                         if (!result.isSuccess()) {
-                                            s_logger.warn("Failed to expunge 
volume " + volume.getUuid() + " from the image store " + dataStore.getName() + 
" due to: " + result.getResult());
+                                            
s_logger.warn(String.format("Failed to expunge volume [%s] from the image store 
[%s] due to: [%s].", volume.getUuid(), dataStore.getName(), 
result.getResult()));
                                         }
                                     }
                                 }
                             }
                         } catch (Throwable th) {
-                            s_logger.warn("Unable to destroy uploaded volume " 
+ volume.getUuid() + ". Error details: " + th.getMessage());
+                            s_logger.error(String.format("Unable to destroy 
uploaded volume [%s] due to: [%s].", volume.getUuid(), th.getMessage()));
+                            s_logger.debug(String.format("Unable to destroy 
uploaded volume [%s].", volume.getUuid()), th);
                         }
                     }
 
@@ -1416,14 +1450,14 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                     for (TemplateDataStoreVO templateDataStore : 
templateDataStores) {
                         VMTemplateVO template = 
_templateDao.findById(templateDataStore.getTemplateId());
                         if (template == null) {
-                            s_logger.warn("Uploaded template with id " + 
templateDataStore.getTemplateId() + " not found, so cannot be destroyed");
+                            s_logger.warn(String.format("Uploaded template 
[%s] not found, so cannot be destroyed.", templateDataStore.getTemplateId()));
                             continue;
                         }
                         try {
                             DataStore dataStore = 
_dataStoreMgr.getDataStore(templateDataStore.getDataStoreId(), 
DataStoreRole.Image);
                             EndPoint ep = _epSelector.select(dataStore, 
templateDataStore.getExtractUrl());
                             if (ep == null) {
-                                s_logger.warn("There is no secondary storage 
VM for image store " + dataStore.getName() + ", cannot destroy uploaded 
template " + template.getUuid());
+                                s_logger.warn(String.format("Cannot destroy 
uploaded template [%s] as there is no secondary storage VM for image store 
[%s].", template.getUuid(), dataStore.getName()));
                                 continue;
                             }
                             Host host = _hostDao.findById(ep.getId());
@@ -1432,7 +1466,7 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                                     AsyncCallFuture<TemplateApiResult> future 
= _imageSrv.deleteTemplateAsync(tmplFactory.getTemplate(template.getId(), 
dataStore));
                                     TemplateApiResult result = future.get();
                                     if (!result.isSuccess()) {
-                                        s_logger.warn("Failed to delete 
template " + template.getUuid() + " from the image store " + 
dataStore.getName() + " due to: " + result.getResult());
+                                        s_logger.warn(String.format("Failed to 
delete template [%s] from image store [%s] due to: [%s]", template.getUuid(), 
dataStore.getName(), result.getResult()));
                                         continue;
                                     }
                                     // remove from template_zone_ref
@@ -1456,7 +1490,8 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
                                 }
                             }
                         } catch (Throwable th) {
-                            s_logger.warn("Unable to destroy uploaded template 
" + template.getUuid() + ". Error details: " + th.getMessage());
+                            s_logger.error(String.format("Unable to destroy 
uploaded template [%s] due to: [%s].", template.getUuid(), th.getMessage()));
+                            s_logger.debug(String.format("Unable to destroy 
uploaded template [%s].", template.getUuid()), th);
                         }
                     }
                     cleanupInactiveTemplates();

Reply via email to