Skip to content

Commit b70879c

Browse files
subhash yedugundlaRohit Yadav
authored andcommitted
CLOUDSTACK-9560 Root volume of deleted VM left unremoved
(cherry picked from commit 5568ee9) Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent 26bcb9a commit b70879c

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

server/src/com/cloud/storage/StorageManagerImpl.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Collections;
2828
import java.util.Date;
2929
import java.util.HashMap;
30+
import java.util.HashSet;
3031
import java.util.Iterator;
3132
import java.util.List;
3233
import java.util.Map;
@@ -2253,27 +2254,41 @@ public void cleanupDownloadUrls(){
22532254

22542255
// Cleanup expired volume URLs
22552256
List<VolumeDataStoreVO> volumesOnImageStoreList = _volumeStoreDao.listVolumeDownloadUrls();
2257+
HashSet<Long> expiredVolumeIds = new HashSet<Long>();
2258+
HashSet<Long> activeVolumeIds = new HashSet<Long>();
22562259
for(VolumeDataStoreVO volumeOnImageStore : volumesOnImageStoreList){
22572260

2261+
long volumeId = volumeOnImageStore.getVolumeId();
22582262
try {
22592263
long downloadUrlCurrentAgeInSecs = DateUtil.getTimeDifference(DateUtil.now(), volumeOnImageStore.getExtractUrlCreated());
22602264
if(downloadUrlCurrentAgeInSecs < _downloadUrlExpirationInterval){ // URL hasnt expired yet
2265+
activeVolumeIds.add(volumeId);
22612266
continue;
22622267
}
2263-
2264-
s_logger.debug("Removing download url " + volumeOnImageStore.getExtractUrl() + " for volume id " + volumeOnImageStore.getVolumeId());
2268+
expiredVolumeIds.add(volumeId);
2269+
s_logger.debug("Removing download url " + volumeOnImageStore.getExtractUrl() + " for volume id " + volumeId);
22652270

22662271
// Remove it from image store
22672272
ImageStoreEntity secStore = (ImageStoreEntity) _dataStoreMgr.getDataStore(volumeOnImageStore.getDataStoreId(), DataStoreRole.Image);
22682273
secStore.deleteExtractUrl(volumeOnImageStore.getInstallPath(), volumeOnImageStore.getExtractUrl(), Upload.Type.VOLUME);
22692274

2270-
// Now expunge it from DB since this entry was created only for download purpose
2275+
// Now expunge it from DB since this entry was created only for download purpose
22712276
_volumeStoreDao.expunge(volumeOnImageStore.getId());
22722277
}catch(Throwable th){
22732278
s_logger.warn("Caught exception while deleting download url " +volumeOnImageStore.getExtractUrl() +
22742279
" for volume id " + volumeOnImageStore.getVolumeId(), th);
22752280
}
22762281
}
2282+
for(Long volumeId : expiredVolumeIds)
2283+
{
2284+
if(activeVolumeIds.contains(volumeId)) {
2285+
continue;
2286+
}
2287+
Volume volume = _volumeDao.findById(volumeId);
2288+
if (volume != null && volume.getState() == Volume.State.Expunged) {
2289+
_volumeDao.remove(volumeId);
2290+
}
2291+
}
22772292

22782293
// Cleanup expired template URLs
22792294
List<TemplateDataStoreVO> templatesOnImageStoreList = _templateStoreDao.listTemplateDownloadUrls();

0 commit comments

Comments
 (0)