You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ko...@apache.org on 2013/11/26 12:58:03 UTC
git commit: updated refs/heads/master to b2f0a0b
Updated Branches:
refs/heads/master ef40e156e -> b2f0a0bce
CLOUDSTACK-4737: handling usage events for dynamic compute offering
Signed-off-by: Koushik Das <ko...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b2f0a0bc
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b2f0a0bc
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b2f0a0bc
Branch: refs/heads/master
Commit: b2f0a0bce26e342f18da42a51ae19d51c238a762
Parents: ef40e15
Author: Harikrishna Patnala <ha...@citrix.com>
Authored: Tue Nov 26 14:52:19 2013 +0530
Committer: Koushik Das <ko...@apache.org>
Committed: Tue Nov 26 17:07:30 2013 +0530
----------------------------------------------------------------------
.../event/dao/UsageEventDetailsDaoImpl.java | 46 +++++++++++++++++---
.../src/com/cloud/usage/UsageVMInstanceVO.java | 37 ++++++++++++++++
setup/db/db/schema-421to430.sql | 3 ++
usage/src/com/cloud/usage/UsageManagerImpl.java | 36 +++++++++++++--
4 files changed, 112 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2f0a0bc/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java b/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
index b2be1c9..2126fff 100644
--- a/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
@@ -16,12 +16,17 @@
// under the License.
package com.cloud.event.dao;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Local;
+import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -36,6 +41,8 @@ import com.cloud.utils.db.TransactionLegacy;
public class UsageEventDetailsDaoImpl extends GenericDaoBase<UsageEventDetailsVO, Long> implements UsageEventDetailsDao {
public static final Logger s_logger = Logger.getLogger(UsageEventDetailsDaoImpl.class.getName());
+ private static final String EVENT_DETAILS_QUERY = "SELECT details.id, details.usage_event_id, details.name, details.value FROM `cloud`.`usage_event_details` details WHERE details.usage_event_id = ?";
+
protected final SearchBuilder<UsageEventDetailsVO> EventDetailsSearch;
protected final SearchBuilder<UsageEventDetailsVO> DetailSearch;
@@ -74,13 +81,38 @@ public class UsageEventDetailsDaoImpl extends GenericDaoBase<UsageEventDetailsVO
@Override
public Map<String, String> findDetails(long eventId) {
- SearchCriteria<UsageEventDetailsVO> sc = EventDetailsSearch.create();
- sc.setParameters("eventId", eventId);
-
- List<UsageEventDetailsVO> results = search(sc, null);
- Map<String, String> details = new HashMap<String, String>(results.size());
- for (UsageEventDetailsVO result : results) {
- details.put(result.getKey(), result.getValue());
+ Connection conn = null;
+ PreparedStatement pstmt = null;
+ ResultSet resultSet = null;
+ Map<String, String> details = new HashMap<String, String>();
+ try {
+ conn = TransactionLegacy.getStandaloneConnection();
+
+ pstmt = conn.prepareStatement(EVENT_DETAILS_QUERY);
+ pstmt.setLong(1, eventId);
+ resultSet = pstmt.executeQuery();
+
+ while (resultSet.next()) {
+ details.put(resultSet.getString(3), resultSet.getString(4));
+ }
+
+ } catch (SQLException e) {
+ throw new CloudRuntimeException("Error while executing SQL prepared statement", e);
+ } catch (Throwable e) {
+ throw new CloudRuntimeException("Caught: " + e);
+ } finally {
+ if (pstmt != null) {
+ try {
+ pstmt.close();
+ } catch (SQLException e) {
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ }
+ }
}
return details;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2f0a0bc/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java b/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java
index 06a7bee..cd746c2 100644
--- a/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java
+++ b/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java
@@ -27,6 +27,10 @@ import javax.persistence.TemporalType;
@Entity
@Table(name = "usage_vm_instance")
public class UsageVMInstanceVO {
+ public enum DynamicParameters {
+ cpuSpeed, cpuNumber, memory
+ };
+
@Column(name = "usage_type")
private int usageType;
@@ -45,6 +49,15 @@ public class UsageVMInstanceVO {
@Column(name = "service_offering_id")
private long serviceOfferingId;
+ @Column(name="cpu_cores")
+ private Long cpuCores;
+
+ @Column(name="memory")
+ private Long memory;
+
+ @Column(name="cpu_speed")
+ private Long cpuSpeed;
+
@Column(name = "template_id")
private long templateId;
@@ -127,4 +140,28 @@ public class UsageVMInstanceVO {
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
+
+ public Long getMemory() {
+ return memory;
+ }
+
+ public void setMemory(Long memory) {
+ this.memory = memory;
+ }
+
+ public Long getCpuCores() {
+ return cpuCores;
+ }
+
+ public void setCpuCores(Long cpuCores) {
+ this.cpuCores = cpuCores;
+ }
+
+ public Long getCpuSpeed() {
+ return cpuSpeed;
+ }
+
+ public void setCpuSpeed(Long cpuSpeed) {
+ this.cpuSpeed = cpuSpeed;
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2f0a0bc/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql
index 8be0fb1..521ac16 100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@ -755,6 +755,9 @@ CREATE VIEW `cloud`.`domain_router_view` AS
INSERT IGNORE INTO `cloud`.`configuration` VALUES ("Advanced", 'DEFAULT', 'management-server', "vmware.vcenter.session.timeout", "1200", "VMware client timeout in seconds", "1200", NULL,NULL,0);
INSERT IGNORE INTO `cloud`.`configuration` VALUES ("Advanced", 'DEFAULT', 'management-server', "mgt.server.vendor", "ACS", "the vendor of management server", "ACS", NULL,NULL,0);
+ALTER TABLE `cloud_usage`.`usage_vm_instance` ADD COLUMN `cpu_speed` INT(10) UNSIGNED NULL COMMENT 'speed per core in Mhz',
+ ADD COLUMN `cpu_cores` INT(10) UNSIGNED NULL COMMENT 'number of cpu cores',
+ ADD COLUMN `memory` INT(10) UNSIGNED NULL COMMENT 'memory in MB';
CREATE TABLE `cloud`.`vpc_details` (
`id` bigint unsigned NOT NULL auto_increment,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2f0a0bc/usage/src/com/cloud/usage/UsageManagerImpl.java
----------------------------------------------------------------------
diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java b/usage/src/com/cloud/usage/UsageManagerImpl.java
index 37131e0..81e7892 100644
--- a/usage/src/com/cloud/usage/UsageManagerImpl.java
+++ b/usage/src/com/cloud/usage/UsageManagerImpl.java
@@ -85,6 +85,7 @@ import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.event.dao.UsageEventDetailsDao;
@Component
@Local(value = {UsageManager.class})
@@ -137,6 +138,8 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
@Inject
protected UsageEventDao _usageEventDao;
@Inject
+ protected UsageEventDetailsDao _usageEventDetailsDao;
+ @Inject
ConfigurationDao _configDao;
@Inject
private UsageVMSnapshotDao m_usageVMSnapshotDao;
@@ -1102,10 +1105,37 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
try {
Long templateId = event.getTemplateId();
String hypervisorType = event.getResourceType();
+ Long cpuCores= null;
+ Long memory = null;
+ Long cpuSpeed = null;
+
+ //populate the cpu, memory and cpuSpeed of the vm when created from a dynamic offering.
+ Map<String, String> usageDetails = _usageEventDetailsDao.findDetails(event.getId());
+
+ if (usageDetails != null && usageDetails.size() != 0) {
+ if (usageDetails.get(UsageVMInstanceVO.DynamicParameters.cpuNumber.name()) != null) {
+ cpuCores = Long.parseLong(usageDetails.get(UsageVMInstanceVO.DynamicParameters.cpuNumber.name()));
+ }
+ if (usageDetails.get(UsageVMInstanceVO.DynamicParameters.cpuSpeed.name()) != null) {
+ cpuSpeed = Long.parseLong(usageDetails.get(UsageVMInstanceVO.DynamicParameters.cpuSpeed.name()));
+ }
+ if (usageDetails.get(UsageVMInstanceVO.DynamicParameters.memory.name()) != null) {
+ memory = Long.parseLong(usageDetails.get(UsageVMInstanceVO.DynamicParameters.memory.name()));
+ }
+ }
+
// add this VM to the usage helper table
- UsageVMInstanceVO usageInstanceNew =
- new UsageVMInstanceVO(UsageTypes.ALLOCATED_VM, zoneId, event.getAccountId(), vmId, vmName, soId, templateId, hypervisorType, event.getCreateDate(),
- null);
+ UsageVMInstanceVO usageInstanceNew = new UsageVMInstanceVO(UsageTypes.ALLOCATED_VM, zoneId, event.getAccountId(), vmId, vmName,
+ soId, templateId, hypervisorType, event.getCreateDate(), null);
+ if (cpuCores != null) {
+ usageInstanceNew.setCpuCores(cpuCores);
+ }
+ if (cpuSpeed != null) {
+ usageInstanceNew.setCpuSpeed(cpuSpeed);
+ }
+ if (memory != null) {
+ usageInstanceNew.setMemory(memory);
+ }
m_usageInstanceDao.persist(usageInstanceNew);
} catch (Exception ex) {
s_logger.error("Error saving usage instance for vm: " + vmId, ex);