Skip to content

Commit 172753b

Browse files
sudo87Locharla, Sandeep
authored andcommitted
Skip removal of offerings if in use during domain removal (apache#11780)
This PR fixes apache#11502 - Prevent service offering update to specific domains if any instance for the offering are outside of those - Removal of offerings is skipped if it is in use by any Instance.
1 parent 444278b commit 172753b

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

server/src/main/java/com/cloud/user/DomainManagerImpl.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import com.cloud.api.query.vo.VpcOfferingJoinVO;
3535
import com.cloud.configuration.Resource;
3636
import com.cloud.domain.dao.DomainDetailsDao;
37+
import com.cloud.network.dao.NetworkDao;
38+
import com.cloud.network.vpc.dao.VpcDao;
3739
import com.cloud.network.vpc.dao.VpcOfferingDao;
3840
import com.cloud.network.vpc.dao.VpcOfferingDetailsDao;
3941
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -85,6 +87,7 @@
8587
import com.cloud.service.dao.ServiceOfferingDao;
8688
import com.cloud.service.dao.ServiceOfferingDetailsDao;
8789
import com.cloud.storage.dao.DiskOfferingDao;
90+
import com.cloud.storage.dao.VolumeDao;
8891
import com.cloud.user.dao.AccountDao;
8992
import com.cloud.utils.Pair;
9093
import com.cloud.utils.component.ManagerBase;
@@ -101,6 +104,8 @@
101104
import com.cloud.utils.net.NetUtils;
102105
import com.cloud.vm.ReservationContext;
103106
import com.cloud.vm.ReservationContextImpl;
107+
import com.cloud.vm.dao.VMInstanceDao;
108+
104109
import org.apache.commons.lang3.StringUtils;
105110

106111
@Component
@@ -141,6 +146,14 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
141146
@Inject
142147
private ProjectDao _projectDao;
143148
@Inject
149+
private VMInstanceDao vmInstanceDao;
150+
@Inject
151+
private NetworkDao networkDao;
152+
@Inject
153+
private VolumeDao volumeDao;
154+
@Inject
155+
private VpcDao vpcDao;
156+
@Inject
144157
private ProjectManager _projectMgr;
145158
@Inject
146159
private RegionManager _regionMgr;
@@ -543,7 +556,8 @@ private void removeVpcOfferings(Long domainId, String domainIdString) {
543556
List<Long> vpcOfferingsDetailsToRemove = new ArrayList<>();
544557
List<VpcOfferingJoinVO> vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId);
545558
for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) {
546-
if (domainIdString.equals(vpcOffering.getDomainId())) {
559+
int vpcCount = vpcDao.getVpcCountByOfferingId(vpcOffering.getId());
560+
if (vpcCount == 0) {
547561
vpcOfferingDao.remove(vpcOffering.getId());
548562
} else {
549563
vpcOfferingsDetailsToRemove.add(vpcOffering.getId());
@@ -558,7 +572,8 @@ private void removeNetworkOfferings(Long domainId, String domainIdString) {
558572
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
559573
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
560574
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
561-
if (domainIdString.equals(networkOffering.getDomainId())) {
575+
int networkCount = networkDao.getNetworkCountByNetworkOffId(networkOffering.getId());
576+
if (networkCount == 0) {
562577
networkOfferingDao.remove(networkOffering.getId());
563578
} else {
564579
networkOfferingsDetailsToRemove.add(networkOffering.getId());
@@ -573,7 +588,8 @@ private void removeServiceOfferings(Long domainId, String domainIdString) {
573588
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
574589
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
575590
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
576-
if (domainIdString.equals(serviceOffering.getDomainId())) {
591+
int vmCount = vmInstanceDao.getVmCountByOfferingId(serviceOffering.getId());
592+
if (vmCount == 0) {
577593
serviceOfferingDao.remove(serviceOffering.getId());
578594
} else {
579595
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
@@ -588,7 +604,8 @@ private void removeDiskOfferings(Long domainId, String domainIdString) {
588604
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
589605
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
590606
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
591-
if (domainIdString.equals(diskOffering.getDomainId())) {
607+
int volumeCount = volumeDao.getVolumeCountByOfferingId(diskOffering.getId());
608+
if (volumeCount == 0) {
592609
diskOfferingDao.remove(diskOffering.getId());
593610
} else {
594611
diskOfferingsDetailsToRemove.add(diskOffering.getId());

0 commit comments

Comments
 (0)