Updated Branches:
  refs/heads/4.2 f2d9a7b65 -> c9548e378

CLOUDSTACK-3376: NPE: resource count calculation from the account manager on 
account cleanup

This issue is happing because of the steps the code follow to cleanup the 
account.
The cleanupAccount was deleting the entries from the resource_limit and
resource_count table and performing further cleaning afterwards. Ideally, 
deletion
of entries from resourceLimit and resourceCount should be the last step in
cleanupAccount process.

Signed-off-by: Prasanna Santhanam <[email protected]>
(cherry picked from commit 21b1c9449a1289db9fa92c2ec76a936006100ab3)


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c9548e37
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c9548e37
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c9548e37

Branch: refs/heads/4.2
Commit: c9548e37885bee6abf62c515c910fe29f9fcd7c6
Parents: f2d9a7b
Author: Sanjay Tripathi <[email protected]>
Authored: Fri Jul 12 14:11:36 2013 +0530
Committer: Prasanna Santhanam <[email protected]>
Committed: Thu Jul 18 15:08:44 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/user/AccountManagerImpl.java  | 21 ++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c9548e37/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java 
b/server/src/com/cloud/user/AccountManagerImpl.java
index 283e832..0f4bdcd 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -732,16 +732,6 @@ public class AccountManagerImpl extends ManagerBase 
implements AccountManager, M
             int vlansReleased = 
_accountGuestVlanMapDao.removeByAccountId(accountId);
             s_logger.info("deleteAccount: Released " + vlansReleased + " 
dedicated guest vlan ranges from account " + accountId);
 
-            // Update resource count for this account and for parent domains.
-            List<ResourceCountVO> resourceCounts = 
_resourceCountDao.listByOwnerId(accountId, ResourceOwnerType.Account);
-            for (ResourceCountVO resourceCount : resourceCounts) {
-                _resourceLimitMgr.decrementResourceCount(accountId, 
resourceCount.getType(), resourceCount.getCount());
-            }
-
-            // Delete resource count and resource limits entries set for this 
account (if there are any).
-            _resourceCountDao.removeEntriesByOwner(accountId, 
ResourceOwnerType.Account);
-            _resourceLimitDao.removeEntriesByOwner(accountId, 
ResourceOwnerType.Account);
-
             // release account specific acquired portable IP's. Since all the 
portable IP's must have been already
             // disassociated with VPC/guest network (due to deletion), so just 
mark portable IP as free.
             List<? extends IpAddress> portableIpsToRelease = 
_ipAddressDao.listByAccount(accountId);
@@ -759,6 +749,17 @@ public class AccountManagerImpl extends ManagerBase 
implements AccountManager, M
                     }
                 }
             }
+
+            // Updating and deleting the resourceLimit and resourceCount 
should be the last step in cleanupAccount process.
+            // Update resource count for this account and for parent domains.
+            List<ResourceCountVO> resourceCounts = 
_resourceCountDao.listByOwnerId(accountId, ResourceOwnerType.Account);
+            for (ResourceCountVO resourceCount : resourceCounts) {
+                _resourceLimitMgr.decrementResourceCount(accountId, 
resourceCount.getType(), resourceCount.getCount());
+            }
+
+            // Delete resource count and resource limits entries set for this 
account (if there are any).
+            _resourceCountDao.removeEntriesByOwner(accountId, 
ResourceOwnerType.Account);
+            _resourceLimitDao.removeEntriesByOwner(accountId, 
ResourceOwnerType.Account);
             return true;
         } catch (Exception ex) {
             s_logger.warn("Failed to cleanup account " + account + " due to ", 
ex);

Reply via email to