From e8e207863cda26e7138da2a60da1de5d9afce3e8 Mon Sep 17 00:00:00 2001 From: Saksham Srivastava Date: Fri, 12 Jul 2013 19:21:16 +0530 Subject: [PATCH] CLOUDSTACK-3476:deleteDomain api should fail when release dedicated resource to that domain fails --- .../src/com/cloud/user/DomainManagerImpl.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/com/cloud/user/DomainManagerImpl.java index c8620616066..e2caab40b4c 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 networkIds = _networkDomainDao.listNetworkIdsByDomain(domain.getId()); List accountsForCleanup = _accountDao.findCleanupsForRemovedAccounts(domain.getId()); - if (accountsForCleanup.isEmpty() && networkIds.isEmpty()) { + List 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 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; } } }