CLOUDSTACK-3476:deleteDomain api should fail when release dedicated resource to that domain fails

This commit is contained in:
Saksham Srivastava 2013-07-12 19:21:16 +05:30 committed by Alena Prokharchyk
parent 36c0224142
commit e8e207863c

View File

@ -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;
}
}
}