From ce1be39323c9e4402a6aeb8ade009d3b84f06b4e Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Fri, 3 Oct 2025 10:57:45 +0530 Subject: [PATCH 1/2] Skip removal of offerings if in use during domain removal --- .../cloud/api/query/dao/UserVmJoinDao.java | 8 +++ .../api/query/dao/UserVmJoinDaoImpl.java | 64 +++++++++++++++++++ .../com/cloud/user/DomainManagerImpl.java | 17 +++-- 3 files changed, 85 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java index 58b73096de80..a11195092cdb 100644 --- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java +++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java @@ -46,4 +46,12 @@ UserVmResponse newUserVmResponse(ResponseView view, String objectName, UserVmJoi List listByAccountServiceOfferingTemplateAndNotInState(long accountId, List states, List offeringIds, List templateIds); + + List listByNetworkOfferingId(Long networkOfferingId); + + List listByVpcOfferingId(Long vpcId); + + List listByDiskOfferingId(Long diskOfferingId); + + List listByServiceOfferingId(Long serviceOfferingId); } diff --git a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index f5d9fe16925e..016aac9d7b2e 100644 --- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -111,6 +111,10 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation VmDetailSearch; private final SearchBuilder activeVmByIsoSearch; + private final SearchBuilder vmByNetworkIdSearch; + private final SearchBuilder vmByVpcIdSearch; + private final SearchBuilder vmByDiskOfferingIdSearch; + private final SearchBuilder vmByServiceOfferingIdSearch; protected UserVmJoinDaoImpl() { @@ -124,6 +128,26 @@ protected UserVmJoinDaoImpl() { activeVmByIsoSearch.and("isoId", activeVmByIsoSearch.entity().getIsoId(), SearchCriteria.Op.EQ); activeVmByIsoSearch.and("stateNotIn", activeVmByIsoSearch.entity().getState(), SearchCriteria.Op.NIN); activeVmByIsoSearch.done(); + + vmByNetworkIdSearch = createSearchBuilder(); + vmByNetworkIdSearch.and("networkId", vmByNetworkIdSearch.entity().getNetworkId(), Op.EQ); + vmByNetworkIdSearch.selectFields(vmByNetworkIdSearch.entity().getId(), vmByNetworkIdSearch.entity().getInstanceName()); + vmByNetworkIdSearch.done(); + + vmByVpcIdSearch = createSearchBuilder(); + vmByVpcIdSearch.and("vpcId", vmByVpcIdSearch.entity().getVpcId(), Op.EQ); + vmByVpcIdSearch.selectFields(vmByVpcIdSearch.entity().getId(), vmByVpcIdSearch.entity().getInstanceName()); + vmByVpcIdSearch.done(); + + vmByDiskOfferingIdSearch = createSearchBuilder(); + vmByDiskOfferingIdSearch.and("diskOfferingId", vmByDiskOfferingIdSearch.entity().getDiskOfferingId(), Op.EQ); + vmByDiskOfferingIdSearch.selectFields(vmByDiskOfferingIdSearch.entity().getId(), vmByDiskOfferingIdSearch.entity().getInstanceName()); + vmByDiskOfferingIdSearch.done(); + + vmByServiceOfferingIdSearch = createSearchBuilder(); + vmByServiceOfferingIdSearch.and("serviceOfferingId", vmByServiceOfferingIdSearch.entity().getServiceOfferingId(), Op.EQ); + vmByServiceOfferingIdSearch.selectFields(vmByServiceOfferingIdSearch.entity().getId(), vmByServiceOfferingIdSearch.entity().getInstanceName()); + vmByServiceOfferingIdSearch.done(); } @Override @@ -718,4 +742,44 @@ public List listByAccountServiceOfferingTemplateAndNotInState(long sc.setParameters("displayVm", 1); return customSearch(sc, null); } + + @Override + public List listByNetworkOfferingId(Long networkId) { + if (networkId == null) { + return new ArrayList<>(); + } + SearchCriteria sc = vmByNetworkIdSearch.create(); + sc.setParameters("networkId", networkId); + return customSearch(sc, null); + } + + @Override + public List listByVpcOfferingId(Long vpcId) { + if (vpcId == null) { + return new ArrayList<>(); + } + SearchCriteria sc = vmByVpcIdSearch.create(); + sc.setParameters("vpcId", vpcId); + return customSearch(sc, null); + } + + @Override + public List listByDiskOfferingId(Long diskOfferingId) { + if (diskOfferingId == null) { + return new ArrayList<>(); + } + SearchCriteria sc = vmByDiskOfferingIdSearch.create(); + sc.setParameters("diskOfferingId", diskOfferingId); + return customSearch(sc, null); + } + + @Override + public List listByServiceOfferingId(Long serviceOfferingId) { + if (serviceOfferingId == null) { + return new ArrayList<>(); + } + SearchCriteria sc = vmByServiceOfferingIdSearch.create(); + sc.setParameters("serviceOfferingId", serviceOfferingId); + return customSearch(sc, null); + } } diff --git a/server/src/main/java/com/cloud/user/DomainManagerImpl.java b/server/src/main/java/com/cloud/user/DomainManagerImpl.java index 6fc9c6f5ef53..3d0acc4466f2 100644 --- a/server/src/main/java/com/cloud/user/DomainManagerImpl.java +++ b/server/src/main/java/com/cloud/user/DomainManagerImpl.java @@ -29,8 +29,10 @@ import javax.inject.Inject; import com.cloud.api.query.dao.NetworkOfferingJoinDao; +import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VpcOfferingJoinDao; import com.cloud.api.query.vo.NetworkOfferingJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VpcOfferingJoinVO; import com.cloud.configuration.Resource; import com.cloud.domain.dao.DomainDetailsDao; @@ -101,6 +103,7 @@ import com.cloud.utils.net.NetUtils; import com.cloud.vm.ReservationContext; import com.cloud.vm.ReservationContextImpl; + import org.apache.commons.lang3.StringUtils; @Component @@ -141,6 +144,8 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom @Inject private ProjectDao _projectDao; @Inject + private UserVmJoinDao userVmJoinDao; + @Inject private ProjectManager _projectMgr; @Inject private RegionManager _regionMgr; @@ -543,7 +548,8 @@ private void removeVpcOfferings(Long domainId, String domainIdString) { List vpcOfferingsDetailsToRemove = new ArrayList<>(); List vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId); for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) { - if (domainIdString.equals(vpcOffering.getDomainId())) { + List userVms = userVmJoinDao.listByVpcOfferingId(vpcOffering.getId()); + if (domainIdString.equals(vpcOffering.getDomainId()) && userVms.isEmpty()) { vpcOfferingDao.remove(vpcOffering.getId()); } else { vpcOfferingsDetailsToRemove.add(vpcOffering.getId()); @@ -558,7 +564,8 @@ private void removeNetworkOfferings(Long domainId, String domainIdString) { List networkOfferingsDetailsToRemove = new ArrayList<>(); List networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false); for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) { - if (domainIdString.equals(networkOffering.getDomainId())) { + List userVms = userVmJoinDao.listByNetworkOfferingId(networkOffering.getId()); + if (domainIdString.equals(networkOffering.getDomainId()) && userVms.isEmpty()) { networkOfferingDao.remove(networkOffering.getId()); } else { networkOfferingsDetailsToRemove.add(networkOffering.getId()); @@ -573,7 +580,8 @@ private void removeServiceOfferings(Long domainId, String domainIdString) { List serviceOfferingsDetailsToRemove = new ArrayList<>(); List serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId); for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) { - if (domainIdString.equals(serviceOffering.getDomainId())) { + List userVms = userVmJoinDao.listByServiceOfferingId(serviceOffering.getId()); + if (domainIdString.equals(serviceOffering.getDomainId()) && userVms.isEmpty()) { serviceOfferingDao.remove(serviceOffering.getId()); } else { serviceOfferingsDetailsToRemove.add(serviceOffering.getId()); @@ -588,7 +596,8 @@ private void removeDiskOfferings(Long domainId, String domainIdString) { List diskOfferingsDetailsToRemove = new ArrayList<>(); List diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId); for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) { - if (domainIdString.equals(diskOffering.getDomainId())) { + List userVms = userVmJoinDao.listByDiskOfferingId(diskOffering.getId()); + if (domainIdString.equals(diskOffering.getDomainId()) && userVms.isEmpty()) { diskOfferingDao.remove(diskOffering.getId()); } else { diskOfferingsDetailsToRemove.add(diskOffering.getId()); From fcbfe26b43ad8a7c38e2cc1b2ea7828d701e6521 Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Mon, 6 Oct 2025 12:27:26 +0530 Subject: [PATCH 2/2] fix the implmentation --- .../java/com/cloud/storage/dao/VolumeDao.java | 2 + .../com/cloud/storage/dao/VolumeDaoImpl.java | 14 ++++ .../java/com/cloud/vm/dao/VMInstanceDao.java | 1 + .../com/cloud/vm/dao/VMInstanceDaoImpl.java | 17 +++++ .../cloud/api/query/dao/UserVmJoinDao.java | 8 --- .../api/query/dao/UserVmJoinDaoImpl.java | 64 ------------------- .../com/cloud/user/DomainManagerImpl.java | 30 +++++---- 7 files changed, 53 insertions(+), 83 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 e6ffca06f9e0..4936af3caab5 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 @@ -162,4 +162,6 @@ public interface VolumeDao extends GenericDao, StateDao searchRemovedByVms(List vmIds, Long batchSize); VolumeVO findOneByIScsiName(String iScsiName); + + int getVolumeCountByOfferingId(long diskOfferingId); } 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 750dbf2bee0f..5ef64b046646 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 @@ -77,6 +77,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol protected GenericSearchBuilder primaryStorageSearch2; protected GenericSearchBuilder secondaryStorageSearch; private final SearchBuilder poolAndPathSearch; + final GenericSearchBuilder CountByOfferingId; @Inject ReservationDao reservationDao; @@ -504,6 +505,11 @@ public VolumeDaoImpl() { poolAndPathSearch.and("poolId", poolAndPathSearch.entity().getPoolId(), Op.EQ); poolAndPathSearch.and("path", poolAndPathSearch.entity().getPath(), Op.EQ); poolAndPathSearch.done(); + + CountByOfferingId = createSearchBuilder(Integer.class); + CountByOfferingId.select(null, Func.COUNT, CountByOfferingId.entity().getId()); + CountByOfferingId.and("diskOfferingId", CountByOfferingId.entity().getDiskOfferingId(), Op.EQ); + CountByOfferingId.done(); } @Override @@ -909,4 +915,12 @@ public VolumeVO findOneByIScsiName(String iScsiName) { sc.setParameters("iScsiName", iScsiName); return findOneIncludingRemovedBy(sc); } + + @Override + public int getVolumeCountByOfferingId(long diskOfferingId) { + SearchCriteria sc = CountByOfferingId.create(); + sc.setParameters("diskOfferingId", diskOfferingId); + List results = customSearch(sc, null); + return results.get(0); + } } diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java index 823642d8c3d7..dde22d431edf 100755 --- a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java @@ -187,4 +187,5 @@ List searchRemovedByRemoveDate(final Date startDate, final Date en Map getNameIdMapForVmIds(Collection ids); + int getVmCountByOfferingId(Long serviceOfferingId); } diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java index ef10af63bae0..78c5a4bc7b97 100755 --- a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java @@ -104,6 +104,7 @@ public class VMInstanceDaoImpl extends GenericDaoBase implem protected SearchBuilder LastHostAndStatesSearch; protected SearchBuilder VmsNotInClusterUsingPool; protected SearchBuilder IdsPowerStateSelectSearch; + GenericSearchBuilder CountByOfferingId; @Inject ResourceTagDao tagsDao; @@ -344,6 +345,11 @@ protected void init() { IdsPowerStateSelectSearch.entity().getPowerStateUpdateCount(), IdsPowerStateSelectSearch.entity().getPowerStateUpdateTime()); IdsPowerStateSelectSearch.done(); + + CountByOfferingId = createSearchBuilder(Integer.class); + CountByOfferingId.select(null, Func.COUNT, CountByOfferingId.entity().getId()); + CountByOfferingId.and("serviceOfferingId", CountByOfferingId.entity().getServiceOfferingId(), Op.EQ); + CountByOfferingId.done(); } @Override @@ -1224,4 +1230,15 @@ public Map getNameIdMapForVmIds(Collection ids) { return vms.stream() .collect(Collectors.toMap(VMInstanceVO::getInstanceName, VMInstanceVO::getId)); } + + @Override + public int getVmCountByOfferingId(Long serviceOfferingId) { + if (serviceOfferingId == null) { + return 0; + } + SearchCriteria sc = CountByOfferingId.create(); + sc.setParameters("serviceOfferingId", serviceOfferingId); + List count = customSearch(sc, null); + return count.get(0); + } } diff --git a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java index a11195092cdb..58b73096de80 100644 --- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java +++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java @@ -46,12 +46,4 @@ UserVmResponse newUserVmResponse(ResponseView view, String objectName, UserVmJoi List listByAccountServiceOfferingTemplateAndNotInState(long accountId, List states, List offeringIds, List templateIds); - - List listByNetworkOfferingId(Long networkOfferingId); - - List listByVpcOfferingId(Long vpcId); - - List listByDiskOfferingId(Long diskOfferingId); - - List listByServiceOfferingId(Long serviceOfferingId); } diff --git a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index 016aac9d7b2e..f5d9fe16925e 100644 --- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -111,10 +111,6 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation VmDetailSearch; private final SearchBuilder activeVmByIsoSearch; - private final SearchBuilder vmByNetworkIdSearch; - private final SearchBuilder vmByVpcIdSearch; - private final SearchBuilder vmByDiskOfferingIdSearch; - private final SearchBuilder vmByServiceOfferingIdSearch; protected UserVmJoinDaoImpl() { @@ -128,26 +124,6 @@ protected UserVmJoinDaoImpl() { activeVmByIsoSearch.and("isoId", activeVmByIsoSearch.entity().getIsoId(), SearchCriteria.Op.EQ); activeVmByIsoSearch.and("stateNotIn", activeVmByIsoSearch.entity().getState(), SearchCriteria.Op.NIN); activeVmByIsoSearch.done(); - - vmByNetworkIdSearch = createSearchBuilder(); - vmByNetworkIdSearch.and("networkId", vmByNetworkIdSearch.entity().getNetworkId(), Op.EQ); - vmByNetworkIdSearch.selectFields(vmByNetworkIdSearch.entity().getId(), vmByNetworkIdSearch.entity().getInstanceName()); - vmByNetworkIdSearch.done(); - - vmByVpcIdSearch = createSearchBuilder(); - vmByVpcIdSearch.and("vpcId", vmByVpcIdSearch.entity().getVpcId(), Op.EQ); - vmByVpcIdSearch.selectFields(vmByVpcIdSearch.entity().getId(), vmByVpcIdSearch.entity().getInstanceName()); - vmByVpcIdSearch.done(); - - vmByDiskOfferingIdSearch = createSearchBuilder(); - vmByDiskOfferingIdSearch.and("diskOfferingId", vmByDiskOfferingIdSearch.entity().getDiskOfferingId(), Op.EQ); - vmByDiskOfferingIdSearch.selectFields(vmByDiskOfferingIdSearch.entity().getId(), vmByDiskOfferingIdSearch.entity().getInstanceName()); - vmByDiskOfferingIdSearch.done(); - - vmByServiceOfferingIdSearch = createSearchBuilder(); - vmByServiceOfferingIdSearch.and("serviceOfferingId", vmByServiceOfferingIdSearch.entity().getServiceOfferingId(), Op.EQ); - vmByServiceOfferingIdSearch.selectFields(vmByServiceOfferingIdSearch.entity().getId(), vmByServiceOfferingIdSearch.entity().getInstanceName()); - vmByServiceOfferingIdSearch.done(); } @Override @@ -742,44 +718,4 @@ public List listByAccountServiceOfferingTemplateAndNotInState(long sc.setParameters("displayVm", 1); return customSearch(sc, null); } - - @Override - public List listByNetworkOfferingId(Long networkId) { - if (networkId == null) { - return new ArrayList<>(); - } - SearchCriteria sc = vmByNetworkIdSearch.create(); - sc.setParameters("networkId", networkId); - return customSearch(sc, null); - } - - @Override - public List listByVpcOfferingId(Long vpcId) { - if (vpcId == null) { - return new ArrayList<>(); - } - SearchCriteria sc = vmByVpcIdSearch.create(); - sc.setParameters("vpcId", vpcId); - return customSearch(sc, null); - } - - @Override - public List listByDiskOfferingId(Long diskOfferingId) { - if (diskOfferingId == null) { - return new ArrayList<>(); - } - SearchCriteria sc = vmByDiskOfferingIdSearch.create(); - sc.setParameters("diskOfferingId", diskOfferingId); - return customSearch(sc, null); - } - - @Override - public List listByServiceOfferingId(Long serviceOfferingId) { - if (serviceOfferingId == null) { - return new ArrayList<>(); - } - SearchCriteria sc = vmByServiceOfferingIdSearch.create(); - sc.setParameters("serviceOfferingId", serviceOfferingId); - return customSearch(sc, null); - } } diff --git a/server/src/main/java/com/cloud/user/DomainManagerImpl.java b/server/src/main/java/com/cloud/user/DomainManagerImpl.java index 3d0acc4466f2..9c715c2cf9ee 100644 --- a/server/src/main/java/com/cloud/user/DomainManagerImpl.java +++ b/server/src/main/java/com/cloud/user/DomainManagerImpl.java @@ -29,13 +29,13 @@ import javax.inject.Inject; import com.cloud.api.query.dao.NetworkOfferingJoinDao; -import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VpcOfferingJoinDao; import com.cloud.api.query.vo.NetworkOfferingJoinVO; -import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VpcOfferingJoinVO; import com.cloud.configuration.Resource; import com.cloud.domain.dao.DomainDetailsDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.vpc.dao.VpcDao; import com.cloud.network.vpc.dao.VpcOfferingDao; import com.cloud.network.vpc.dao.VpcOfferingDetailsDao; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -87,6 +87,7 @@ import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.service.dao.ServiceOfferingDetailsDao; import com.cloud.storage.dao.DiskOfferingDao; +import com.cloud.storage.dao.VolumeDao; import com.cloud.user.dao.AccountDao; import com.cloud.utils.Pair; import com.cloud.utils.component.ManagerBase; @@ -103,6 +104,7 @@ import com.cloud.utils.net.NetUtils; import com.cloud.vm.ReservationContext; import com.cloud.vm.ReservationContextImpl; +import com.cloud.vm.dao.VMInstanceDao; import org.apache.commons.lang3.StringUtils; @@ -144,7 +146,13 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom @Inject private ProjectDao _projectDao; @Inject - private UserVmJoinDao userVmJoinDao; + private VMInstanceDao vmInstanceDao; + @Inject + private NetworkDao networkDao; + @Inject + private VolumeDao volumeDao; + @Inject + private VpcDao vpcDao; @Inject private ProjectManager _projectMgr; @Inject @@ -548,8 +556,8 @@ private void removeVpcOfferings(Long domainId, String domainIdString) { List vpcOfferingsDetailsToRemove = new ArrayList<>(); List vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId); for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) { - List userVms = userVmJoinDao.listByVpcOfferingId(vpcOffering.getId()); - if (domainIdString.equals(vpcOffering.getDomainId()) && userVms.isEmpty()) { + int vpcCount = vpcDao.getVpcCountByOfferingId(vpcOffering.getId()); + if (domainIdString.equals(vpcOffering.getDomainId()) && vpcCount == 0) { vpcOfferingDao.remove(vpcOffering.getId()); } else { vpcOfferingsDetailsToRemove.add(vpcOffering.getId()); @@ -564,8 +572,8 @@ private void removeNetworkOfferings(Long domainId, String domainIdString) { List networkOfferingsDetailsToRemove = new ArrayList<>(); List networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false); for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) { - List userVms = userVmJoinDao.listByNetworkOfferingId(networkOffering.getId()); - if (domainIdString.equals(networkOffering.getDomainId()) && userVms.isEmpty()) { + int networkCount = networkDao.getNetworkCountByNetworkOffId(networkOffering.getId()); + if (domainIdString.equals(networkOffering.getDomainId()) && networkCount == 0) { networkOfferingDao.remove(networkOffering.getId()); } else { networkOfferingsDetailsToRemove.add(networkOffering.getId()); @@ -580,8 +588,8 @@ private void removeServiceOfferings(Long domainId, String domainIdString) { List serviceOfferingsDetailsToRemove = new ArrayList<>(); List serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId); for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) { - List userVms = userVmJoinDao.listByServiceOfferingId(serviceOffering.getId()); - if (domainIdString.equals(serviceOffering.getDomainId()) && userVms.isEmpty()) { + int vmCount = vmInstanceDao.getVmCountByOfferingId(serviceOffering.getId()); + if (domainIdString.equals(serviceOffering.getDomainId()) && vmCount == 0) { serviceOfferingDao.remove(serviceOffering.getId()); } else { serviceOfferingsDetailsToRemove.add(serviceOffering.getId()); @@ -596,8 +604,8 @@ private void removeDiskOfferings(Long domainId, String domainIdString) { List diskOfferingsDetailsToRemove = new ArrayList<>(); List diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId); for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) { - List userVms = userVmJoinDao.listByDiskOfferingId(diskOffering.getId()); - if (domainIdString.equals(diskOffering.getDomainId()) && userVms.isEmpty()) { + int volumeCount = volumeDao.getVolumeCountByOfferingId(diskOffering.getId()); + if (domainIdString.equals(diskOffering.getDomainId()) && volumeCount == 0) { diskOfferingDao.remove(diskOffering.getId()); } else { diskOfferingsDetailsToRemove.add(diskOffering.getId());