CLOUDSTACK-7870: When Vm deployments fail and end in error state volume count 
should be decremented


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

Branch: refs/heads/statscollector-graphite
Commit: a8b89bea4f37a54267694b9a49be6b5bec91f0b0
Parents: 1e1cc11
Author: Nitin Mehta <nitin.me...@citrix.com>
Authored: Sun Nov 9 23:01:28 2014 -0800
Committer: Nitin Mehta <nitin.me...@citrix.com>
Committed: Sun Nov 9 23:01:28 2014 -0800

----------------------------------------------------------------------
 .../cloudstack/engine/orchestration/VolumeOrchestrator.java     | 4 ++++
 server/src/com/cloud/vm/UserVmManagerImpl.java                  | 5 ++++-
 2 files changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8b89bea/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index 4b40d5a..826e2ee 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -1380,9 +1380,13 @@ public class VolumeOrchestrator extends ManagerBase 
implements VolumeOrchestrati
             } else {
                 volService.destroyVolume(volume.getId());
             }
+            // FIXME - All this is boiler plate code and should be done as 
part of state transition. This shouldn't be part of orchestrator.
             // publish usage event for the volume
             UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, 
volume.getAccountId(), volume.getDataCenterId(), volume.getId(), 
volume.getName(),
                     Volume.class.getName(), volume.getUuid(), 
volume.isDisplayVolume());
+            _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), 
ResourceType.volume, volume.isDisplay());
+            //FIXME - why recalculate and not decrement
+            _resourceLimitMgr.recalculateResourceCount(volume.getAccountId(), 
volume.getDomainId(), ResourceType.primary_storage.getOrdinal());
         } catch (Exception e) {
             s_logger.debug("Failed to destroy volume" + volume.getId(), e);
             throw new CloudRuntimeException("Failed to destroy volume" + 
volume.getId(), e);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8b89bea/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/com/cloud/vm/UserVmManagerImpl.java
index ba07211..8096841 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -4785,7 +4785,10 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
                 newVol = volumeMgr.allocateDuplicateVolume(root, null);
             }
 
-            // Create Usage event for the newly created volume
+            // 1. Save usage event and update resource count for user vm 
volumes
+            _resourceLimitMgr.incrementResourceCount(newVol.getAccountId(), 
ResourceType.volume, newVol.isDisplay());
+            _resourceLimitMgr.incrementResourceCount(newVol.getAccountId(), 
ResourceType.primary_storage, newVol.isDisplay(), new Long(newVol.getSize()));
+            // 2. Create Usage event for the newly created volume
             UsageEventVO usageEvent = new 
UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, newVol.getAccountId(), 
newVol.getDataCenterId(), newVol.getId(), newVol.getName(), 
newVol.getDiskOfferingId(), template.getId(), newVol.getSize());
             _usageEventDao.persist(usageEvent);
 

Reply via email to