Skip to content

Commit dea1373

Browse files
authored
server: clean network offerings for domain on remove (#7775)
1 parent 4f85c55 commit dea1373

File tree

3 files changed

+86
-18
lines changed

3 files changed

+86
-18
lines changed

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ private Pair<List<InstanceGroupJoinVO>, Integer> searchForVmGroupsInternal(ListV
969969
@Override
970970
public ListResponse<UserVmResponse> searchForUserVMs(ListVMsCmd cmd) {
971971
Pair<List<UserVmJoinVO>, Integer> result = searchForUserVMsInternal(cmd);
972-
ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();
972+
ListResponse<UserVmResponse> response = new ListResponse<>();
973973
ResponseView respView = ResponseView.Restricted;
974974
Account caller = CallContext.current().getCallingAccount();
975975
if (_accountMgr.isRootAdmin(caller.getId())) {
@@ -1307,7 +1307,7 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm
13071307
vmIds[i++] = v.getId();
13081308
}
13091309
List<UserVmJoinVO> vms = _userVmJoinDao.searchByIds(vmIds);
1310-
return new Pair<List<UserVmJoinVO>, Integer>(vms, count);
1310+
return new Pair<>(vms, count);
13111311
}
13121312

13131313
@Override

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

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,15 @@
2424

2525
import javax.inject.Inject;
2626

27+
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
28+
import com.cloud.api.query.dao.VpcOfferingJoinDao;
29+
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
30+
import com.cloud.api.query.vo.VpcOfferingJoinVO;
2731
import com.cloud.domain.dao.DomainDetailsDao;
32+
import com.cloud.network.vpc.dao.VpcOfferingDao;
33+
import com.cloud.network.vpc.dao.VpcOfferingDetailsDao;
34+
import com.cloud.offerings.dao.NetworkOfferingDao;
35+
import com.cloud.offerings.dao.NetworkOfferingDetailsDao;
2836
import org.apache.cloudstack.annotation.AnnotationService;
2937
import org.apache.cloudstack.annotation.dao.AnnotationDao;
3038
import org.apache.cloudstack.api.ApiConstants;
@@ -106,12 +114,24 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
106114
@Inject
107115
private DiskOfferingDetailsDao diskOfferingDetailsDao;
108116
@Inject
117+
private NetworkOfferingDao networkOfferingDao;
118+
@Inject
119+
private NetworkOfferingJoinDao networkOfferingJoinDao;
120+
@Inject
121+
private NetworkOfferingDetailsDao networkOfferingDetailsDao;
122+
@Inject
109123
private ServiceOfferingJoinDao serviceOfferingJoinDao;
110124
@Inject
111125
private ServiceOfferingDao serviceOfferingDao;
112126
@Inject
113127
private ServiceOfferingDetailsDao serviceOfferingDetailsDao;
114128
@Inject
129+
private VpcOfferingDao vpcOfferingDao;
130+
@Inject
131+
private VpcOfferingJoinDao vpcOfferingJoinDao;
132+
@Inject
133+
private VpcOfferingDetailsDao vpcOfferingDetailsDao;
134+
@Inject
115135
private ProjectDao _projectDao;
116136
@Inject
117137
private ProjectManager _projectMgr;
@@ -483,18 +503,48 @@ protected void cleanupDomainOfferings(Long domainId) {
483503
}
484504

485505
String domainIdString = String.valueOf(domainId);
486-
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
487-
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
488506

489-
// delete the service and disk offerings associated with this domain
490-
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
491-
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
492-
if (domainIdString.equals(diskOffering.getDomainId())) {
493-
diskOfferingDao.remove(diskOffering.getId());
507+
removeDiskOfferings(domainId, domainIdString);
508+
509+
removeServiceOfferings(domainId, domainIdString);
510+
511+
removeNetworkOfferings(domainId, domainIdString);
512+
513+
removeVpcOfferings(domainId, domainIdString);
514+
}
515+
516+
private void removeVpcOfferings(Long domainId, String domainIdString) {
517+
List<Long> vpcOfferingsDetailsToRemove = new ArrayList<>();
518+
List<VpcOfferingJoinVO> vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId);
519+
for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) {
520+
if (domainIdString.equals(vpcOffering.getDomainId())) {
521+
vpcOfferingDao.remove(vpcOffering.getId());
494522
} else {
495-
diskOfferingsDetailsToRemove.add(diskOffering.getId());
523+
vpcOfferingsDetailsToRemove.add(vpcOffering.getId());
524+
}
525+
}
526+
for (final Long vpcOfferingId : vpcOfferingsDetailsToRemove) {
527+
vpcOfferingDetailsDao.removeDetail(vpcOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
528+
}
529+
}
530+
531+
private void removeNetworkOfferings(Long domainId, String domainIdString) {
532+
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
533+
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
534+
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
535+
if (domainIdString.equals(networkOffering.getDomainId())) {
536+
networkOfferingDao.remove(networkOffering.getId());
537+
} else {
538+
networkOfferingsDetailsToRemove.add(networkOffering.getId());
496539
}
497540
}
541+
for (final Long networkOfferingId : networkOfferingsDetailsToRemove) {
542+
networkOfferingDetailsDao.removeDetail(networkOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
543+
}
544+
}
545+
546+
private void removeServiceOfferings(Long domainId, String domainIdString) {
547+
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
498548
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
499549
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
500550
if (domainIdString.equals(serviceOffering.getDomainId())) {
@@ -503,14 +553,25 @@ protected void cleanupDomainOfferings(Long domainId) {
503553
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
504554
}
505555
}
556+
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
557+
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
558+
}
559+
}
506560

561+
private void removeDiskOfferings(Long domainId, String domainIdString) {
562+
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
563+
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
564+
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
565+
if (domainIdString.equals(diskOffering.getDomainId())) {
566+
diskOfferingDao.remove(diskOffering.getId());
567+
} else {
568+
diskOfferingsDetailsToRemove.add(diskOffering.getId());
569+
}
570+
}
507571
// Remove domain IDs for offerings which may be multi-domain
508572
for (final Long diskOfferingId : diskOfferingsDetailsToRemove) {
509573
diskOfferingDetailsDao.removeDetail(diskOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
510574
}
511-
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
512-
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
513-
}
514575
}
515576

516577
protected boolean cleanupDomain(Long domainId, Long ownerId) throws ConcurrentOperationException, ResourceUnavailableException {

server/src/test/java/com/cloud/user/DomainManagerImplTest.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.List;
2323
import java.util.UUID;
2424

25+
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
26+
import com.cloud.api.query.dao.VpcOfferingJoinDao;
2527
import com.cloud.configuration.ResourceLimit;
2628
import com.cloud.domain.dao.DomainDetailsDao;
2729
import com.cloud.utils.UuidUtils;
@@ -82,7 +84,11 @@ public class DomainManagerImplTest {
8284
@Mock
8385
DiskOfferingJoinDao _diskOfferingDao;
8486
@Mock
85-
ServiceOfferingJoinDao _offeringsDao;
87+
NetworkOfferingJoinDao networkOfferingJoinDao;
88+
@Mock
89+
ServiceOfferingJoinDao serviceOfferingJoinDao;
90+
@Mock
91+
VpcOfferingJoinDao vpcOfferingJoinDao;
8692
@Mock
8793
ProjectDao _projectDao;
8894
@Mock
@@ -142,6 +148,11 @@ public void setup() throws NoSuchFieldException, SecurityException,
142148
Mockito.when(_accountDao.findCleanupsForRemovedAccounts(DOMAIN_ID)).thenReturn(domainAccountsForCleanup);
143149
Mockito.when(_networkDomainDao.listNetworkIdsByDomain(DOMAIN_ID)).thenReturn(domainNetworkIds);
144150
Mockito.when(_dedicatedDao.listByDomainId(DOMAIN_ID)).thenReturn(domainDedicatedResources);
151+
152+
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
153+
Mockito.when(networkOfferingJoinDao.findByDomainId(Mockito.anyLong(), Mockito.anyBoolean())).thenReturn(Collections.emptyList());
154+
Mockito.when(serviceOfferingJoinDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
155+
Mockito.when(vpcOfferingJoinDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
145156
}
146157

147158
@Test
@@ -266,8 +277,6 @@ public void deleteDomain() {
266277
Mockito.when(_dedicatedDao.listByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<DedicatedResourceVO>());
267278
Mockito.when(domainDaoMock.remove(Mockito.anyLong())).thenReturn(true);
268279
Mockito.when(_configMgr.releaseDomainSpecificVirtualRanges(Mockito.anyLong())).thenReturn(true);
269-
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
270-
Mockito.when(_offeringsDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
271280

272281
try {
273282
Assert.assertTrue(domainManager.deleteDomain(20l, false));
@@ -299,8 +308,6 @@ public void deleteDomainCleanup() {
299308
Mockito.when(_resourceCountDao.removeEntriesByOwner(Mockito.anyLong(), Mockito.eq(ResourceOwnerType.Domain))).thenReturn(1l);
300309
Mockito.when(_resourceLimitDao.removeEntriesByOwner(Mockito.anyLong(), Mockito.eq(ResourceOwnerType.Domain))).thenReturn(1l);
301310
Mockito.when(_configMgr.releaseDomainSpecificVirtualRanges(Mockito.anyLong())).thenReturn(true);
302-
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
303-
Mockito.when(_offeringsDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
304311

305312
try {
306313
Assert.assertTrue(domainManager.deleteDomain(20l, true));

0 commit comments

Comments
 (0)