From 293dd4d8efd56d753e714af684469c69ee50c505 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Thu, 1 Jul 2021 19:49:41 +0530 Subject: [PATCH] volume: Fix deletion of Uploaded volumes (#5125) Fixes issue with deletion of Uploaded volumes --- .../java/com/cloud/storage/VolumeApiServiceImpl.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 0bd0861ec43..b9fa40c4633 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -23,9 +23,11 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -306,6 +308,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic private long _maxVolumeSizeInGb; private final StateMachine2 _volStateMachine; + private static final Set STATES_VOLUME_CANNOT_BE_DESTROYED = new HashSet<>(Arrays.asList(Volume.State.Destroy, Volume.State.Expunging, Volume.State.Expunged, Volume.State.Allocated)); + protected VolumeApiServiceImpl() { _volStateMachine = Volume.State.getStateMachine(); _gson = GsonHelper.getGsonLogger(); @@ -1451,13 +1455,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic *
    *
  • {@value Volume.State#Destroy}; *
  • {@value Volume.State#Expunging}; - *
  • {@value Volume.State#Expunged}. + *
  • {@value Volume.State#Expunged}; + *
  • {@value Volume.State#Allocated}. *
* * The volume is destroyed via {@link VolumeService#destroyVolume(long)} method. */ protected void destroyVolumeIfPossible(VolumeVO volume) { - if (volume.getState() != Volume.State.Destroy && volume.getState() != Volume.State.Expunging && volume.getState() != Volume.State.Expunged && volume.getState() != Volume.State.Allocated && volume.getState() != Volume.State.Uploaded) { + if (!STATES_VOLUME_CANNOT_BE_DESTROYED.contains(volume.getState())) { volService.destroyVolume(volume.getId()); } }