CLOUDSTACK-7870: When Vm deployments fail and end in error state volume count should be decremented
(cherry picked from commit a8b89bea4f37a54267694b9a49be6b5bec91f0b0) Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4ea0dcda Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4ea0dcda Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4ea0dcda Branch: refs/heads/4.5 Commit: 4ea0dcda9bca022fb26f89381f3a84e42e2a8260 Parents: 54d08a8 Author: Nitin Mehta <nitin.me...@citrix.com> Authored: Sun Nov 9 23:01:28 2014 -0800 Committer: Rohit Yadav <rohit.ya...@shapeblue.com> Committed: Fri Feb 6 16:24:06 2015 +0530 ---------------------------------------------------------------------- .../cloudstack/engine/orchestration/VolumeOrchestrator.java | 1 + server/src/com/cloud/vm/UserVmManagerImpl.java | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4ea0dcda/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 4b9d7ef..901e8a1 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java @@ -1464,6 +1464,7 @@ 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()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4ea0dcda/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 5a3b885..b9ed37e 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -4812,7 +4812,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);