Updated Branches: refs/heads/master 36c022414 -> e8e207863
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/e8e20786 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e8e20786 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e8e20786 Branch: refs/heads/master Commit: e8e207863cda26e7138da2a60da1de5d9afce3e8 Parents: 36c0224 Author: Saksham Srivastava <[email protected]> Authored: Fri Jul 12 19:21:16 2013 +0530 Committer: Alena Prokharchyk <[email protected]> Committed: Wed Jul 17 11:25:39 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/e8e20786/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 c862061..e2caab4 100644 --- a/server/src/com/cloud/user/DomainManagerImpl.java +++ b/server/src/com/cloud/user/DomainManagerImpl.java @@ -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; } } }
