Skip to content

Commit 45734dd

Browse files
committed
clean network offerings for domain on remove
1 parent da7fc72 commit 45734dd

File tree

3 files changed

+52
-19
lines changed

3 files changed

+52
-19
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
@@ -965,7 +965,7 @@ private Pair<List<InstanceGroupJoinVO>, Integer> searchForVmGroupsInternal(ListV
965965
@Override
966966
public ListResponse<UserVmResponse> searchForUserVMs(ListVMsCmd cmd) {
967967
Pair<List<UserVmJoinVO>, Integer> result = searchForUserVMsInternal(cmd);
968-
ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();
968+
ListResponse<UserVmResponse> response = new ListResponse<>();
969969
ResponseView respView = ResponseView.Restricted;
970970
Account caller = CallContext.current().getCallingAccount();
971971
if (_accountMgr.isRootAdmin(caller.getId())) {
@@ -1303,7 +1303,7 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm
13031303
vmIds[i++] = v.getId();
13041304
}
13051305
List<UserVmJoinVO> vms = _userVmJoinDao.searchByIds(vmIds);
1306-
return new Pair<List<UserVmJoinVO>, Integer>(vms, count);
1306+
return new Pair<>(vms, count);
13071307
}
13081308

13091309
@Override

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2955,18 +2955,17 @@ public void buildACLSearchParameters(Account caller, Long id, String accountName
29552955
if (projectId != null) {
29562956
if (!forProjectInvitation) {
29572957
if (projectId == -1L) {
2958-
if (caller.getType() == Account.Type.ADMIN) {
2959-
domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly);
2960-
if (listAll) {
2961-
domainIdRecursiveListProject.third(ListProjectResourcesCriteria.ListAllIncludingProjectResources);
2962-
}
2963-
} else {
2958+
domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly);
2959+
if (caller.getType() != Account.Type.ADMIN) {
29642960
permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId()));
29652961
// permittedAccounts can be empty when the caller is not a part of any project (a domain account)
29662962
if (permittedAccounts.isEmpty()) {
29672963
permittedAccounts.add(caller.getId());
29682964
}
29692965
}
2966+
if (listAll) {
2967+
domainIdRecursiveListProject.third(ListProjectResourcesCriteria.ListAllIncludingProjectResources);
2968+
}
29702969
} else {
29712970
Project project = _projectMgr.getProject(projectId);
29722971
if (project == null) {

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

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

2525
import javax.inject.Inject;
2626

27+
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
28+
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
2729
import com.cloud.domain.dao.DomainDetailsDao;
30+
import com.cloud.offerings.dao.NetworkOfferingDao;
31+
import com.cloud.offerings.dao.NetworkOfferingDetailsDao;
2832
import org.apache.cloudstack.annotation.AnnotationService;
2933
import org.apache.cloudstack.annotation.dao.AnnotationDao;
3034
import org.apache.cloudstack.api.ApiConstants;
@@ -106,6 +110,12 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
106110
@Inject
107111
private DiskOfferingDetailsDao diskOfferingDetailsDao;
108112
@Inject
113+
private NetworkOfferingDao networkOfferingDao;
114+
@Inject
115+
private NetworkOfferingJoinDao networkOfferingJoinDao;
116+
@Inject
117+
private NetworkOfferingDetailsDao networkOfferingDetailsDao;
118+
@Inject
109119
private ServiceOfferingJoinDao serviceOfferingJoinDao;
110120
@Inject
111121
private ServiceOfferingDao serviceOfferingDao;
@@ -483,18 +493,31 @@ protected void cleanupDomainOfferings(Long domainId) {
483493
}
484494

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

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());
497+
removeDiskOfferings(domainId, domainIdString);
498+
499+
removeServiceOfferings(domainId, domainIdString);
500+
501+
removeNetworkOfferings(domainId, domainIdString);
502+
}
503+
504+
private void removeNetworkOfferings(Long domainId, String domainIdString) {
505+
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
506+
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
507+
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
508+
if (domainIdString.equals(networkOffering.getDomainId())) {
509+
networkOfferingDao.remove(networkOffering.getId());
494510
} else {
495-
diskOfferingsDetailsToRemove.add(diskOffering.getId());
511+
networkOfferingsDetailsToRemove.add(networkOffering.getId());
496512
}
497513
}
514+
for (final Long networkOfferingId : networkOfferingsDetailsToRemove) {
515+
networkOfferingDetailsDao.removeDetail(networkOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
516+
}
517+
}
518+
519+
private void removeServiceOfferings(Long domainId, String domainIdString) {
520+
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
498521
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
499522
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
500523
if (domainIdString.equals(serviceOffering.getDomainId())) {
@@ -503,14 +526,25 @@ protected void cleanupDomainOfferings(Long domainId) {
503526
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
504527
}
505528
}
529+
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
530+
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
531+
}
532+
}
506533

534+
private void removeDiskOfferings(Long domainId, String domainIdString) {
535+
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
536+
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
537+
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
538+
if (domainIdString.equals(diskOffering.getDomainId())) {
539+
diskOfferingDao.remove(diskOffering.getId());
540+
} else {
541+
diskOfferingsDetailsToRemove.add(diskOffering.getId());
542+
}
543+
}
507544
// Remove domain IDs for offerings which may be multi-domain
508545
for (final Long diskOfferingId : diskOfferingsDetailsToRemove) {
509546
diskOfferingDetailsDao.removeDetail(diskOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
510547
}
511-
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
512-
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
513-
}
514548
}
515549

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

0 commit comments

Comments
 (0)