From 0c9507567752ef4a4ae7896eaf873be53e0f7125 Mon Sep 17 00:00:00 2001 From: Sateesh Chodapuneedi Date: Thu, 30 Aug 2012 17:13:31 -0400 Subject: [PATCH] CS-15293: Snapshot deletes the data it backed up Reviewed-by: Edison Description: Ensure Storage cleanup thread will not attempt to cleanup temporary snapshot data of a specific volume & specific account. --- .../com/cloud/storage/StorageManagerImpl.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index d107450eed8..a0f25df07d4 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -2115,11 +2115,14 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag @Override public void createCapacityEntry(StoragePoolVO storagePool, short capacityType, long allocated) { SearchCriteria capacitySC = _capacityDao.createSearchCriteria(); + + List capacities = _capacityDao.search(capacitySC, null); + capacitySC = _capacityDao.createSearchCriteria(); capacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, storagePool.getId()); capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, storagePool.getDataCenterId()); capacitySC.addAnd("capacityType", SearchCriteria.Op.EQ, capacityType); - List capacities = _capacityDao.search(capacitySC, null); + capacities = _capacityDao.search(capacitySC, null); long totalOverProvCapacity; if (storagePool.getPoolType() == StoragePoolType.NetworkFilesystem) { @@ -2371,13 +2374,15 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (snapshots == null) { continue; } - CleanupSnapshotBackupCommand cmd = new CleanupSnapshotBackupCommand(secondaryStorageHost.getStorageUrl(), secondaryStorageHost.getDataCenterId(), volume.getAccountId(), - volumeId, snapshots); - - Answer answer = _agentMgr.sendToSecStorage(secondaryStorageHost, cmd); - if ((answer == null) || !answer.getResult()) { - String details = "Failed to cleanup snapshots for volume " + volumeId + " due to " + (answer == null ? "null" : answer.getDetails()); - s_logger.warn(details); + List backingupSnapshots = _snapshotDao.listByStatus(volumeId, Snapshot.Status.BackingUp); + if(backingupSnapshots == null) { + CleanupSnapshotBackupCommand cmd = new CleanupSnapshotBackupCommand(secondaryStorageHost.getStorageUrl(), secondaryStorageHost.getDataCenterId(), volume.getAccountId(), + volumeId, snapshots); + Answer answer = _agentMgr.sendToSecStorage(secondaryStorageHost, cmd); + if ((answer == null) || !answer.getResult()) { + String details = "Failed to cleanup snapshots for volume " + volumeId + " due to " + (answer == null ? "null" : answer.getDetails()); + s_logger.warn(details); + } } } catch (Exception e1) { s_logger.warn("problem cleaning up snapshots in secondary storage " + secondaryStorageHost, e1);