From 808f17cbdb6cbab9f4cc9ba4b7feea49f22601ac Mon Sep 17 00:00:00 2001 From: kishan Date: Fri, 17 Sep 2010 17:17:17 +0530 Subject: [PATCH] Bug 5947: decrement resource count when deployVM fails for direct attached case --- server/src/com/cloud/vm/UserVmManagerImpl.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 3d9a29ac097..60291366360 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2581,6 +2581,8 @@ public class UserVmManagerImpl implements UserVmManager { _eventDao.persist(event); String eventParams = "\nvmName=" + name + "\nsoId=" + serviceOfferingId + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + templateId + "\ndcId=" + dataCenterId; event.setParameters(eventParams); + _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); + _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); txn.commit(); return null; } @@ -2633,6 +2635,9 @@ public class UserVmManagerImpl implements UserVmManager { throw new InternalErrorException("No template or ISO was specified for the VM."); } + boolean isIso = Storage.ImageFormat.ISO.equals(template.getFormat()); + long numVolumes = (isIso || (diskOffering == null)) ? 1 : 2; + Transaction txn = Transaction.currentTxn(); try { UserVmVO vm = null; @@ -2689,8 +2694,6 @@ public class UserVmManagerImpl implements UserVmManager { _networkGroupManager.addInstanceToGroups(vmId, networkGroups); _accountMgr.incrementResourceCount(account.getId(), ResourceType.user_vm); - boolean isIso = Storage.ImageFormat.ISO.equals(template.getFormat()); - long numVolumes = (isIso || (diskOffering == null)) ? 1 : 2; _accountMgr.incrementResourceCount(account.getId(), ResourceType.volume, numVolumes); txn.commit(); @@ -2737,6 +2740,8 @@ public class UserVmManagerImpl implements UserVmManager { _eventDao.persist(event); String eventParams = "\nvmName=" + name + "\nsoId=" + serviceOfferingId + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + templateId + "\ndcId=" + dataCenterId; event.setParameters(eventParams); + _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); + _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); txn.commit(); return null; } @@ -2756,11 +2761,15 @@ public class UserVmManagerImpl implements UserVmManager { return _vmDao.findById(vmId); } catch (ResourceAllocationException rae) { + _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); + _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); if (s_logger.isInfoEnabled()) { s_logger.info("Failed to create VM for account " + accountId + " due to maximum number of virtual machines exceeded."); } throw rae; } catch (Throwable th) { + _accountMgr.decrementResourceCount(account.getId(), ResourceType.user_vm); + _accountMgr.decrementResourceCount(account.getId(), ResourceType.volume, numVolumes); s_logger.error("Unable to create vm", th); throw new CloudRuntimeException("Unable to create vm", th); }