mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-3476:deleteDomain api should fail when release dedicated resource to that domain fails
This commit is contained in:
parent
36c0224142
commit
e8e207863c
@ -235,6 +235,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
||||
domain.setState(Domain.State.Inactive);
|
||||
_domainDao.update(domain.getId(), domain);
|
||||
boolean rollBackState = false;
|
||||
boolean hasDedicatedResources = false;
|
||||
|
||||
try {
|
||||
long ownerId = domain.getAccountId();
|
||||
@ -246,26 +247,20 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
||||
throw e;
|
||||
}
|
||||
} else {
|
||||
//don't delete the domain if there are accounts set for cleanup, or non-removed networks exist
|
||||
//don't delete the domain if there are accounts set for cleanup, or non-removed networks exist, or domain has dedicated resources
|
||||
List<Long> networkIds = _networkDomainDao.listNetworkIdsByDomain(domain.getId());
|
||||
List<AccountVO> accountsForCleanup = _accountDao.findCleanupsForRemovedAccounts(domain.getId());
|
||||
if (accountsForCleanup.isEmpty() && networkIds.isEmpty()) {
|
||||
List<DedicatedResourceVO> dedicatedResources = _dedicatedDao.listByDomainId(domain.getId());
|
||||
if (dedicatedResources != null && !dedicatedResources.isEmpty()) {
|
||||
s_logger.error("There are dedicated resources for the domain " + domain.getId());
|
||||
hasDedicatedResources = true;
|
||||
}
|
||||
if (accountsForCleanup.isEmpty() && networkIds.isEmpty()&& !hasDedicatedResources) {
|
||||
if (!_domainDao.remove(domain.getId())) {
|
||||
rollBackState = true;
|
||||
CloudRuntimeException e = new CloudRuntimeException("Delete failed on domain " + domain.getName() + " (id: " + domain.getId() + "); Please make sure all users and sub domains have been removed from the domain before deleting");
|
||||
e.addProxyObject(domain.getUuid(), "domainId");
|
||||
throw e;
|
||||
} else {
|
||||
//release dedication if any, before deleting the domain
|
||||
List<DedicatedResourceVO> dedicatedResources = _dedicatedDao.listByDomainId(domain.getId());
|
||||
if (dedicatedResources != null && !dedicatedResources.isEmpty()) {
|
||||
s_logger.debug("Releasing dedicated resources for domain" + domain.getId());
|
||||
for (DedicatedResourceVO dr : dedicatedResources){
|
||||
if (!_dedicatedDao.remove(dr.getId())) {
|
||||
s_logger.warn("Fail to release dedicated resources for domain " + domain.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rollBackState = true;
|
||||
@ -274,6 +269,8 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
||||
msg = accountsForCleanup.size() + " accounts to cleanup";
|
||||
} else if (!networkIds.isEmpty()) {
|
||||
msg = networkIds.size() + " non-removed networks";
|
||||
} else if (hasDedicatedResources) {
|
||||
msg = "dedicated resources.";
|
||||
}
|
||||
|
||||
CloudRuntimeException e = new CloudRuntimeException("Can't delete the domain yet because it has " + msg);
|
||||
@ -402,6 +399,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
|
||||
for (DedicatedResourceVO dr : dedicatedResources){
|
||||
if (!_dedicatedDao.remove(dr.getId())) {
|
||||
s_logger.warn("Fail to release dedicated resources for domain " + domainId);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user