From eb74a8741e242875ecdc614f88da0ebcbc21c418 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Thu, 27 Jun 2013 16:01:09 +0530 Subject: [PATCH] CLOUDSTACK-3231: Update service offering Id of allocated Vm usage whem service offering changes for a Vm --- .../src/com/cloud/usage/UsageVMInstanceVO.java | 12 ++++++++++-- usage/src/com/cloud/usage/UsageManagerImpl.java | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java b/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java index 6f40471fbe5..2fe346ea06c 100644 --- a/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java +++ b/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java @@ -47,7 +47,7 @@ public class UsageVMInstanceVO { @Column(name="template_id") private long templateId; - + @Column(name="hypervisor_type") private String hypervisorType; @@ -104,6 +104,10 @@ public class UsageVMInstanceVO { return templateId; } + public void setServiceOfferingId(long serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; + } + public String getHypervisorType() { return hypervisorType; } @@ -112,7 +116,11 @@ public class UsageVMInstanceVO { return startDate; } - public Date getEndDate() { + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java b/usage/src/com/cloud/usage/UsageManagerImpl.java index 65f354c1ccc..4901dd91e0c 100644 --- a/usage/src/com/cloud/usage/UsageManagerImpl.java +++ b/usage/src/com/cloud/usage/UsageManagerImpl.java @@ -988,8 +988,21 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna usageInstances = m_usageInstanceDao.search(sc, null); if (usageInstances == null || (usageInstances.size() == 0)) { s_logger.error("Cannot find allocated vm entry for a vm running with id: " + vmId); + } else if (usageInstances.size() == 1) { + UsageVMInstanceVO usageInstance = usageInstances.get(0); + if(usageInstance.getSerivceOfferingId() != soId){ + //Service Offering changed after Vm creation + //End current Allocated usage and create new Allocated Vm entry with new soId + usageInstance.setEndDate(event.getCreateDate()); + m_usageInstanceDao.update(usageInstance); + usageInstance.setServiceOfferingId(soId); + usageInstance.setStartDate(event.getCreateDate()); + usageInstance.setEndDate(null); + m_usageInstanceDao.persist(usageInstance); + } } - + + Long templateId = event.getTemplateId(); String hypervisorType = event.getResourceType();