mirror of https://github.com/apache/cloudstack.git
server: clean network offerings for domain on remove (#7775)
This commit is contained in:
parent
4f85c5568f
commit
dea1373480
|
|
@ -969,7 +969,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
|
|||
@Override
|
||||
public ListResponse<UserVmResponse> searchForUserVMs(ListVMsCmd cmd) {
|
||||
Pair<List<UserVmJoinVO>, Integer> result = searchForUserVMsInternal(cmd);
|
||||
ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();
|
||||
ListResponse<UserVmResponse> response = new ListResponse<>();
|
||||
ResponseView respView = ResponseView.Restricted;
|
||||
Account caller = CallContext.current().getCallingAccount();
|
||||
if (_accountMgr.isRootAdmin(caller.getId())) {
|
||||
|
|
@ -1307,7 +1307,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
|
|||
vmIds[i++] = v.getId();
|
||||
}
|
||||
List<UserVmJoinVO> vms = _userVmJoinDao.searchByIds(vmIds);
|
||||
return new Pair<List<UserVmJoinVO>, Integer>(vms, count);
|
||||
return new Pair<>(vms, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -24,7 +24,15 @@ import java.util.UUID;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
|
||||
import com.cloud.api.query.dao.VpcOfferingJoinDao;
|
||||
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
|
||||
import com.cloud.api.query.vo.VpcOfferingJoinVO;
|
||||
import com.cloud.domain.dao.DomainDetailsDao;
|
||||
import com.cloud.network.vpc.dao.VpcOfferingDao;
|
||||
import com.cloud.network.vpc.dao.VpcOfferingDetailsDao;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDetailsDao;
|
||||
import org.apache.cloudstack.annotation.AnnotationService;
|
||||
import org.apache.cloudstack.annotation.dao.AnnotationDao;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
|
|
@ -106,12 +114,24 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
|||
@Inject
|
||||
private DiskOfferingDetailsDao diskOfferingDetailsDao;
|
||||
@Inject
|
||||
private NetworkOfferingDao networkOfferingDao;
|
||||
@Inject
|
||||
private NetworkOfferingJoinDao networkOfferingJoinDao;
|
||||
@Inject
|
||||
private NetworkOfferingDetailsDao networkOfferingDetailsDao;
|
||||
@Inject
|
||||
private ServiceOfferingJoinDao serviceOfferingJoinDao;
|
||||
@Inject
|
||||
private ServiceOfferingDao serviceOfferingDao;
|
||||
@Inject
|
||||
private ServiceOfferingDetailsDao serviceOfferingDetailsDao;
|
||||
@Inject
|
||||
private VpcOfferingDao vpcOfferingDao;
|
||||
@Inject
|
||||
private VpcOfferingJoinDao vpcOfferingJoinDao;
|
||||
@Inject
|
||||
private VpcOfferingDetailsDao vpcOfferingDetailsDao;
|
||||
@Inject
|
||||
private ProjectDao _projectDao;
|
||||
@Inject
|
||||
private ProjectManager _projectMgr;
|
||||
|
|
@ -483,18 +503,48 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
|||
}
|
||||
|
||||
String domainIdString = String.valueOf(domainId);
|
||||
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
|
||||
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
|
||||
|
||||
// delete the service and disk offerings associated with this domain
|
||||
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
|
||||
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
|
||||
if (domainIdString.equals(diskOffering.getDomainId())) {
|
||||
diskOfferingDao.remove(diskOffering.getId());
|
||||
removeDiskOfferings(domainId, domainIdString);
|
||||
|
||||
removeServiceOfferings(domainId, domainIdString);
|
||||
|
||||
removeNetworkOfferings(domainId, domainIdString);
|
||||
|
||||
removeVpcOfferings(domainId, domainIdString);
|
||||
}
|
||||
|
||||
private void removeVpcOfferings(Long domainId, String domainIdString) {
|
||||
List<Long> vpcOfferingsDetailsToRemove = new ArrayList<>();
|
||||
List<VpcOfferingJoinVO> vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId);
|
||||
for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) {
|
||||
if (domainIdString.equals(vpcOffering.getDomainId())) {
|
||||
vpcOfferingDao.remove(vpcOffering.getId());
|
||||
} else {
|
||||
diskOfferingsDetailsToRemove.add(diskOffering.getId());
|
||||
vpcOfferingsDetailsToRemove.add(vpcOffering.getId());
|
||||
}
|
||||
}
|
||||
for (final Long vpcOfferingId : vpcOfferingsDetailsToRemove) {
|
||||
vpcOfferingDetailsDao.removeDetail(vpcOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeNetworkOfferings(Long domainId, String domainIdString) {
|
||||
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
|
||||
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
|
||||
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
|
||||
if (domainIdString.equals(networkOffering.getDomainId())) {
|
||||
networkOfferingDao.remove(networkOffering.getId());
|
||||
} else {
|
||||
networkOfferingsDetailsToRemove.add(networkOffering.getId());
|
||||
}
|
||||
}
|
||||
for (final Long networkOfferingId : networkOfferingsDetailsToRemove) {
|
||||
networkOfferingDetailsDao.removeDetail(networkOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeServiceOfferings(Long domainId, String domainIdString) {
|
||||
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
|
||||
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
|
||||
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
|
||||
if (domainIdString.equals(serviceOffering.getDomainId())) {
|
||||
|
|
@ -503,14 +553,25 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
|||
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
|
||||
}
|
||||
}
|
||||
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
|
||||
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDiskOfferings(Long domainId, String domainIdString) {
|
||||
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
|
||||
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
|
||||
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
|
||||
if (domainIdString.equals(diskOffering.getDomainId())) {
|
||||
diskOfferingDao.remove(diskOffering.getId());
|
||||
} else {
|
||||
diskOfferingsDetailsToRemove.add(diskOffering.getId());
|
||||
}
|
||||
}
|
||||
// Remove domain IDs for offerings which may be multi-domain
|
||||
for (final Long diskOfferingId : diskOfferingsDetailsToRemove) {
|
||||
diskOfferingDetailsDao.removeDetail(diskOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
|
||||
}
|
||||
for (final Long serviceOfferingId : serviceOfferingsDetailsToRemove) {
|
||||
serviceOfferingDetailsDao.removeDetail(serviceOfferingId, ApiConstants.DOMAIN_ID, domainIdString);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean cleanupDomain(Long domainId, Long ownerId) throws ConcurrentOperationException, ResourceUnavailableException {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
|
||||
import com.cloud.api.query.dao.VpcOfferingJoinDao;
|
||||
import com.cloud.configuration.ResourceLimit;
|
||||
import com.cloud.domain.dao.DomainDetailsDao;
|
||||
import com.cloud.utils.UuidUtils;
|
||||
|
|
@ -82,7 +84,11 @@ public class DomainManagerImplTest {
|
|||
@Mock
|
||||
DiskOfferingJoinDao _diskOfferingDao;
|
||||
@Mock
|
||||
ServiceOfferingJoinDao _offeringsDao;
|
||||
NetworkOfferingJoinDao networkOfferingJoinDao;
|
||||
@Mock
|
||||
ServiceOfferingJoinDao serviceOfferingJoinDao;
|
||||
@Mock
|
||||
VpcOfferingJoinDao vpcOfferingJoinDao;
|
||||
@Mock
|
||||
ProjectDao _projectDao;
|
||||
@Mock
|
||||
|
|
@ -142,6 +148,11 @@ public class DomainManagerImplTest {
|
|||
Mockito.when(_accountDao.findCleanupsForRemovedAccounts(DOMAIN_ID)).thenReturn(domainAccountsForCleanup);
|
||||
Mockito.when(_networkDomainDao.listNetworkIdsByDomain(DOMAIN_ID)).thenReturn(domainNetworkIds);
|
||||
Mockito.when(_dedicatedDao.listByDomainId(DOMAIN_ID)).thenReturn(domainDedicatedResources);
|
||||
|
||||
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
Mockito.when(networkOfferingJoinDao.findByDomainId(Mockito.anyLong(), Mockito.anyBoolean())).thenReturn(Collections.emptyList());
|
||||
Mockito.when(serviceOfferingJoinDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
Mockito.when(vpcOfferingJoinDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -266,8 +277,6 @@ public class DomainManagerImplTest {
|
|||
Mockito.when(_dedicatedDao.listByDomainId(Mockito.anyLong())).thenReturn(new ArrayList<DedicatedResourceVO>());
|
||||
Mockito.when(domainDaoMock.remove(Mockito.anyLong())).thenReturn(true);
|
||||
Mockito.when(_configMgr.releaseDomainSpecificVirtualRanges(Mockito.anyLong())).thenReturn(true);
|
||||
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
Mockito.when(_offeringsDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
|
||||
try {
|
||||
Assert.assertTrue(domainManager.deleteDomain(20l, false));
|
||||
|
|
@ -299,8 +308,6 @@ public class DomainManagerImplTest {
|
|||
Mockito.when(_resourceCountDao.removeEntriesByOwner(Mockito.anyLong(), Mockito.eq(ResourceOwnerType.Domain))).thenReturn(1l);
|
||||
Mockito.when(_resourceLimitDao.removeEntriesByOwner(Mockito.anyLong(), Mockito.eq(ResourceOwnerType.Domain))).thenReturn(1l);
|
||||
Mockito.when(_configMgr.releaseDomainSpecificVirtualRanges(Mockito.anyLong())).thenReturn(true);
|
||||
Mockito.when(_diskOfferingDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
Mockito.when(_offeringsDao.findByDomainId(Mockito.anyLong())).thenReturn(Collections.emptyList());
|
||||
|
||||
try {
|
||||
Assert.assertTrue(domainManager.deleteDomain(20l, true));
|
||||
|
|
|
|||
Loading…
Reference in New Issue