From 6122c7433d8ef5ee1bba6ecba19fad6bb8b7c35f Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 11 May 2026 18:14:01 -0400 Subject: [PATCH] generic solution --- .../src/main/java/com/cloud/storage/dao/VolumeDao.java | 2 ++ .../main/java/com/cloud/storage/dao/VolumeDaoImpl.java | 8 ++++++++ server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 8 +------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java index 717e3e782f2..090d1b2d003 100644 --- a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java +++ b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java @@ -44,6 +44,8 @@ public interface VolumeDao extends GenericDao, StateDao findByInstance(long id); + List findByInstanceAndNotDestroyed(long id); + List findByInstanceAndType(long id, Volume.Type vType); List findIncludingRemovedByInstanceAndType(long id, Volume.Type vType); diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java index fce4d1f7233..75d9a358094 100644 --- a/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java @@ -128,6 +128,14 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol return listBy(sc); } + @Override + public List findByInstanceAndNotDestroyed(long id) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("instanceId", id); + sc.setParameters("notDestroyed", Volume.State.Destroy, Volume.State.Expunged); + return listBy(sc); + } + @Override public List findByInstanceAndDeviceId(long instanceId, long deviceId) { SearchCriteria sc = AllFieldsSearch.create(); diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 7364b7128c1..436cf7d6ca2 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -7225,7 +7225,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } public boolean isVMUsingLocalStorage(VMInstanceVO vm) { - List volumes = _volsDao.findByInstance(vm.getId()); + List volumes = _volsDao.findByInstanceAndNotDestroyed(vm.getId()); return isAnyVmVolumeUsingLocalStorage(volumes); } @@ -7660,12 +7660,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir protected boolean isAnyVmVolumeUsingLocalStorage(final List volumes) { for (VolumeVO vol : volumes) { - if (vol == null || vol.getRemoved() != null || - Volume.State.Destroy.equals(vol.getState()) || - Volume.State.Expunged.equals(vol.getState())) { - logger.debug("Skipping non-active volume while checking local storage usage: {}", vol); - continue; - } DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId()); if (diskOffering != null && diskOffering.isUseLocalStorage()) { return true;