Updated Branches: refs/heads/4.2 5d390ec7a -> 1933960dd
CLOUDSTACK-3476:deleteDomain api should fail when release dedicated resource to that domain fails Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1933960d Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1933960d Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1933960d Branch: refs/heads/4.2 Commit: 1933960ddac755756db4a510e6ce53e29548a340 Parents: 5d390ec Author: Saksham Srivastava <[email protected]> Authored: Fri Jul 12 19:21:16 2013 +0530 Committer: Alena Prokharchyk <[email protected]> Committed: Wed Jul 17 11:18:24 2013 -0700 ---------------------------------------------------------------------- .../src/com/cloud/user/DomainManagerImpl.java | 24 +++++++++----------- 1 file changed, 11 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1933960d/server/src/com/cloud/user/DomainManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/com/cloud/user/DomainManagerImpl.java index aad5787..1117ff0 100644 --- a/server/src/com/cloud/user/DomainManagerImpl.java +++ b/server/src/com/cloud/user/DomainManagerImpl.java @@ -233,6 +233,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(); @@ -244,26 +245,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; @@ -272,6 +267,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); @@ -400,6 +397,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; } } }
