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

Reply via email to