Skip to content

Commit ce1be39

Browse files
committed
Skip removal of offerings if in use during domain removal
1 parent c631d6a commit ce1be39

File tree

3 files changed

+85
-4
lines changed

3 files changed

+85
-4
lines changed

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,12 @@ UserVmResponse newUserVmResponse(ResponseView view, String objectName, UserVmJoi
4646

4747
List<UserVmJoinVO> listByAccountServiceOfferingTemplateAndNotInState(long accountId,
4848
List<VirtualMachine.State> states, List<Long> offeringIds, List<Long> templateIds);
49+
50+
List<UserVmJoinVO> listByNetworkOfferingId(Long networkOfferingId);
51+
52+
List<UserVmJoinVO> listByVpcOfferingId(Long vpcId);
53+
54+
List<UserVmJoinVO> listByDiskOfferingId(Long diskOfferingId);
55+
56+
List<UserVmJoinVO> listByServiceOfferingId(Long serviceOfferingId);
4957
}

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation<UserVmJo
111111

112112
private final SearchBuilder<UserVmJoinVO> VmDetailSearch;
113113
private final SearchBuilder<UserVmJoinVO> activeVmByIsoSearch;
114+
private final SearchBuilder<UserVmJoinVO> vmByNetworkIdSearch;
115+
private final SearchBuilder<UserVmJoinVO> vmByVpcIdSearch;
116+
private final SearchBuilder<UserVmJoinVO> vmByDiskOfferingIdSearch;
117+
private final SearchBuilder<UserVmJoinVO> vmByServiceOfferingIdSearch;
114118

115119
protected UserVmJoinDaoImpl() {
116120

@@ -124,6 +128,26 @@ protected UserVmJoinDaoImpl() {
124128
activeVmByIsoSearch.and("isoId", activeVmByIsoSearch.entity().getIsoId(), SearchCriteria.Op.EQ);
125129
activeVmByIsoSearch.and("stateNotIn", activeVmByIsoSearch.entity().getState(), SearchCriteria.Op.NIN);
126130
activeVmByIsoSearch.done();
131+
132+
vmByNetworkIdSearch = createSearchBuilder();
133+
vmByNetworkIdSearch.and("networkId", vmByNetworkIdSearch.entity().getNetworkId(), Op.EQ);
134+
vmByNetworkIdSearch.selectFields(vmByNetworkIdSearch.entity().getId(), vmByNetworkIdSearch.entity().getInstanceName());
135+
vmByNetworkIdSearch.done();
136+
137+
vmByVpcIdSearch = createSearchBuilder();
138+
vmByVpcIdSearch.and("vpcId", vmByVpcIdSearch.entity().getVpcId(), Op.EQ);
139+
vmByVpcIdSearch.selectFields(vmByVpcIdSearch.entity().getId(), vmByVpcIdSearch.entity().getInstanceName());
140+
vmByVpcIdSearch.done();
141+
142+
vmByDiskOfferingIdSearch = createSearchBuilder();
143+
vmByDiskOfferingIdSearch.and("diskOfferingId", vmByDiskOfferingIdSearch.entity().getDiskOfferingId(), Op.EQ);
144+
vmByDiskOfferingIdSearch.selectFields(vmByDiskOfferingIdSearch.entity().getId(), vmByDiskOfferingIdSearch.entity().getInstanceName());
145+
vmByDiskOfferingIdSearch.done();
146+
147+
vmByServiceOfferingIdSearch = createSearchBuilder();
148+
vmByServiceOfferingIdSearch.and("serviceOfferingId", vmByServiceOfferingIdSearch.entity().getServiceOfferingId(), Op.EQ);
149+
vmByServiceOfferingIdSearch.selectFields(vmByServiceOfferingIdSearch.entity().getId(), vmByServiceOfferingIdSearch.entity().getInstanceName());
150+
vmByServiceOfferingIdSearch.done();
127151
}
128152

129153
@Override
@@ -718,4 +742,44 @@ public List<UserVmJoinVO> listByAccountServiceOfferingTemplateAndNotInState(long
718742
sc.setParameters("displayVm", 1);
719743
return customSearch(sc, null);
720744
}
745+
746+
@Override
747+
public List<UserVmJoinVO> listByNetworkOfferingId(Long networkId) {
748+
if (networkId == null) {
749+
return new ArrayList<>();
750+
}
751+
SearchCriteria<UserVmJoinVO> sc = vmByNetworkIdSearch.create();
752+
sc.setParameters("networkId", networkId);
753+
return customSearch(sc, null);
754+
}
755+
756+
@Override
757+
public List<UserVmJoinVO> listByVpcOfferingId(Long vpcId) {
758+
if (vpcId == null) {
759+
return new ArrayList<>();
760+
}
761+
SearchCriteria<UserVmJoinVO> sc = vmByVpcIdSearch.create();
762+
sc.setParameters("vpcId", vpcId);
763+
return customSearch(sc, null);
764+
}
765+
766+
@Override
767+
public List<UserVmJoinVO> listByDiskOfferingId(Long diskOfferingId) {
768+
if (diskOfferingId == null) {
769+
return new ArrayList<>();
770+
}
771+
SearchCriteria<UserVmJoinVO> sc = vmByDiskOfferingIdSearch.create();
772+
sc.setParameters("diskOfferingId", diskOfferingId);
773+
return customSearch(sc, null);
774+
}
775+
776+
@Override
777+
public List<UserVmJoinVO> listByServiceOfferingId(Long serviceOfferingId) {
778+
if (serviceOfferingId == null) {
779+
return new ArrayList<>();
780+
}
781+
SearchCriteria<UserVmJoinVO> sc = vmByServiceOfferingIdSearch.create();
782+
sc.setParameters("serviceOfferingId", serviceOfferingId);
783+
return customSearch(sc, null);
784+
}
721785
}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@
2929
import javax.inject.Inject;
3030

3131
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
32+
import com.cloud.api.query.dao.UserVmJoinDao;
3233
import com.cloud.api.query.dao.VpcOfferingJoinDao;
3334
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
35+
import com.cloud.api.query.vo.UserVmJoinVO;
3436
import com.cloud.api.query.vo.VpcOfferingJoinVO;
3537
import com.cloud.configuration.Resource;
3638
import com.cloud.domain.dao.DomainDetailsDao;
@@ -101,6 +103,7 @@
101103
import com.cloud.utils.net.NetUtils;
102104
import com.cloud.vm.ReservationContext;
103105
import com.cloud.vm.ReservationContextImpl;
106+
104107
import org.apache.commons.lang3.StringUtils;
105108

106109
@Component
@@ -141,6 +144,8 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
141144
@Inject
142145
private ProjectDao _projectDao;
143146
@Inject
147+
private UserVmJoinDao userVmJoinDao;
148+
@Inject
144149
private ProjectManager _projectMgr;
145150
@Inject
146151
private RegionManager _regionMgr;
@@ -543,7 +548,8 @@ private void removeVpcOfferings(Long domainId, String domainIdString) {
543548
List<Long> vpcOfferingsDetailsToRemove = new ArrayList<>();
544549
List<VpcOfferingJoinVO> vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId);
545550
for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) {
546-
if (domainIdString.equals(vpcOffering.getDomainId())) {
551+
List<UserVmJoinVO> userVms = userVmJoinDao.listByVpcOfferingId(vpcOffering.getId());
552+
if (domainIdString.equals(vpcOffering.getDomainId()) && userVms.isEmpty()) {
547553
vpcOfferingDao.remove(vpcOffering.getId());
548554
} else {
549555
vpcOfferingsDetailsToRemove.add(vpcOffering.getId());
@@ -558,7 +564,8 @@ private void removeNetworkOfferings(Long domainId, String domainIdString) {
558564
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
559565
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
560566
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
561-
if (domainIdString.equals(networkOffering.getDomainId())) {
567+
List<UserVmJoinVO> userVms = userVmJoinDao.listByNetworkOfferingId(networkOffering.getId());
568+
if (domainIdString.equals(networkOffering.getDomainId()) && userVms.isEmpty()) {
562569
networkOfferingDao.remove(networkOffering.getId());
563570
} else {
564571
networkOfferingsDetailsToRemove.add(networkOffering.getId());
@@ -573,7 +580,8 @@ private void removeServiceOfferings(Long domainId, String domainIdString) {
573580
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
574581
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
575582
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
576-
if (domainIdString.equals(serviceOffering.getDomainId())) {
583+
List<UserVmJoinVO> userVms = userVmJoinDao.listByServiceOfferingId(serviceOffering.getId());
584+
if (domainIdString.equals(serviceOffering.getDomainId()) && userVms.isEmpty()) {
577585
serviceOfferingDao.remove(serviceOffering.getId());
578586
} else {
579587
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
@@ -588,7 +596,8 @@ private void removeDiskOfferings(Long domainId, String domainIdString) {
588596
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
589597
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
590598
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
591-
if (domainIdString.equals(diskOffering.getDomainId())) {
599+
List<UserVmJoinVO> userVms = userVmJoinDao.listByDiskOfferingId(diskOffering.getId());
600+
if (domainIdString.equals(diskOffering.getDomainId()) && userVms.isEmpty()) {
592601
diskOfferingDao.remove(diskOffering.getId());
593602
} else {
594603
diskOfferingsDetailsToRemove.add(diskOffering.getId());

0 commit comments

Comments
 (0)