You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ha...@apache.org on 2021/05/10 11:36:29 UTC
[cloudstack] branch decoupleServiceOfferingDiskOffering created
(now 3453738)
This is an automated email from the ASF dual-hosted git repository.
harikrishna pushed a change to branch decoupleServiceOfferingDiskOffering
in repository https://gitbox.apache.org/repos/asf/cloudstack.git.
at 3453738 Decouple service offering and disk offering states
This branch includes the following new commits:
new c44aef4 Schema changes and disk offering column change from "type" to "compute_only"
new 98498f0 Few more changes
new 5709052 Decoupled service offering and disk offering
new 6986607 Remove diskofferingid from vminstance VO
new 3453738 Decouple service offering and disk offering states
The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[cloudstack] 02/05: Few more changes
Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
harikrishna pushed a commit to branch decoupleServiceOfferingDiskOffering
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 98498f02acab5eca7365dbf134904033453cedee
Author: Harikrishna Patnala <ha...@gmail.com>
AuthorDate: Fri Apr 16 11:25:10 2021 +0530
Few more changes
---
.../schema/src/main/java/com/cloud/service/ServiceOfferingVO.java | 2 --
engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java | 6 ------
.../main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java | 2 --
3 files changed, 10 deletions(-)
diff --git a/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
index 3a5f318..a818230 100644
--- a/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
@@ -19,7 +19,6 @@ package com.cloud.service;
import java.util.Map;
import javax.persistence.Column;
-import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
@@ -32,7 +31,6 @@ import com.cloud.vm.VirtualMachine;
@Entity
@Table(name = "service_offering")
-@DiscriminatorValue(value = "Service")
@PrimaryKeyJoinColumn(name = "id")
public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering {
diff --git a/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
index 3ecf007..98133ab 100644
--- a/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
@@ -21,16 +21,12 @@ import java.util.List;
import java.util.UUID;
import javax.persistence.Column;
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@@ -41,8 +37,6 @@ import com.cloud.utils.db.GenericDao;
@Entity
@Table(name = "disk_offering")
-@Inheritance(strategy = InheritanceType.JOINED)
-@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, length = 32)
public class DiskOfferingVO implements DiskOffering {
@Id
diff --git a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
index 5ac401e..0783941 100644
--- a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
+++ b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
@@ -20,7 +20,6 @@ import java.util.HashMap;
import java.util.Map;
import javax.persistence.Column;
-import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
@@ -33,7 +32,6 @@ import com.cloud.vm.VirtualMachine;
@Entity
@Table(name = "service_offering")
-@DiscriminatorValue(value = "Service")
@PrimaryKeyJoinColumn(name = "id")
public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering {
@Column(name = "cpu")
[cloudstack] 01/05: Schema changes and disk offering column change
from "type" to "compute_only"
Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
harikrishna pushed a commit to branch decoupleServiceOfferingDiskOffering
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit c44aef4f1c6466475abbf2be5376879a80f46100
Author: Harikrishna Patnala <ha...@gmail.com>
AuthorDate: Wed Apr 14 14:32:08 2021 +0530
Schema changes and disk offering column change from "type" to "compute_only"
---
.../main/java/com/cloud/offering/DiskOffering.java | 6 +-
.../java/com/cloud/offering/ServiceOffering.java | 6 +
.../engine/orchestration/VolumeOrchestrator.java | 2 +-
.../java/com/cloud/storage/DiskOfferingVO.java | 16 +-
.../com/cloud/storage/dao/DiskOfferingDaoImpl.java | 15 +-
.../resources/META-INF/db/schema-41510to41600.sql | 350 +++++++++++++++++++++
.../vmsnapshot/DefaultVMSnapshotStrategy.java | 2 +-
.../vmsnapshot/ScaleIOVMSnapshotStrategy.java | 2 +-
server/src/main/java/com/cloud/api/ApiDBUtils.java | 2 +-
.../java/com/cloud/api/query/QueryManagerImpl.java | 3 +-
.../com/cloud/api/query/vo/DiskOfferingJoinVO.java | 9 +-
.../com/cloud/storage/VolumeApiServiceImpl.java | 6 +-
.../main/java/com/cloud/vm/UserVmManagerImpl.java | 2 +-
13 files changed, 385 insertions(+), 36 deletions(-)
diff --git a/api/src/main/java/com/cloud/offering/DiskOffering.java b/api/src/main/java/com/cloud/offering/DiskOffering.java
index fd21118..8c976ea 100644
--- a/api/src/main/java/com/cloud/offering/DiskOffering.java
+++ b/api/src/main/java/com/cloud/offering/DiskOffering.java
@@ -34,10 +34,6 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
Inactive, Active,
}
- enum Type {
- Disk, Service
- };
-
State getState();
enum DiskCacheMode {
@@ -152,5 +148,5 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
void setCacheMode(DiskCacheMode cacheMode);
- Type getType();
+ boolean isComputeOnly();
}
diff --git a/api/src/main/java/com/cloud/offering/ServiceOffering.java b/api/src/main/java/com/cloud/offering/ServiceOffering.java
index 2a80ba5..f47b2cb 100644
--- a/api/src/main/java/com/cloud/offering/ServiceOffering.java
+++ b/api/src/main/java/com/cloud/offering/ServiceOffering.java
@@ -33,6 +33,10 @@ public interface ServiceOffering extends DiskOffering, InfrastructureEntity, Int
public static final String internalLbVmDefaultOffUniqueName = "Cloud.Com-InternalLBVm";
// leaving cloud.com references as these are identifyers and no real world addresses (check against DB)
+ enum State {
+ Inactive, Active,
+ }
+
public enum StorageType {
local, shared
}
@@ -116,4 +120,6 @@ public interface ServiceOffering extends DiskOffering, InfrastructureEntity, Int
String getDeploymentPlanner();
boolean isDynamic();
+
+ DiskOffering.State getState();
}
diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index e6260b8..757fd2d 100644
--- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -842,7 +842,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
Long offeringId = null;
- if (offering.getType() == DiskOffering.Type.Disk) {
+ if (!offering.isComputeOnly()) {
offeringId = offering.getId();
}
diff --git a/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
index 952d301..3ecf007 100644
--- a/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
@@ -65,8 +65,8 @@ public class DiskOfferingVO implements DiskOffering {
@Column(name = "tags", length = 4096)
String tags;
- @Column(name = "type")
- Type type;
+ @Column(name = "compute_only")
+ boolean computeOnly;
@Column(name = GenericDao.REMOVED_COLUMN)
@Temporal(TemporalType.TIMESTAMP)
@@ -168,7 +168,7 @@ public class DiskOfferingVO implements DiskOffering {
this.diskSize = diskSize;
this.tags = tags;
recreatable = false;
- type = Type.Disk;
+ computeOnly = false;
useLocalStorage = false;
customized = isCustomized;
uuid = UUID.randomUUID().toString();
@@ -186,7 +186,7 @@ public class DiskOfferingVO implements DiskOffering {
this.diskSize = diskSize;
this.tags = tags;
recreatable = false;
- type = Type.Disk;
+ computeOnly = false;
useLocalStorage = false;
customized = isCustomized;
uuid = UUID.randomUUID().toString();
@@ -198,7 +198,7 @@ public class DiskOfferingVO implements DiskOffering {
public DiskOfferingVO(String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable, boolean useLocalStorage, boolean systemUse,
boolean customized) {
- type = Type.Service;
+ computeOnly = true;
this.name = name;
this.displayText = displayText;
this.provisioningType = provisioningType;
@@ -214,7 +214,7 @@ public class DiskOfferingVO implements DiskOffering {
public DiskOfferingVO(long id, String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable, boolean useLocalStorage,
boolean systemUse, boolean customized, boolean customizedIops, Long minIops, Long maxIops) {
this.id = id;
- type = Type.Service;
+ computeOnly = true;
this.name = name;
this.displayText = displayText;
this.provisioningType = provisioningType;
@@ -304,8 +304,8 @@ public class DiskOfferingVO implements DiskOffering {
}
@Override
- public Type getType() {
- return type;
+ public boolean isComputeOnly() {
+ return computeOnly;
}
@Override
diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
index b9fa10c..06ee258 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
@@ -29,7 +29,6 @@ import javax.persistence.EntityExistsException;
import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao;
import org.springframework.stereotype.Component;
-import com.cloud.offering.DiskOffering.Type;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.Storage;
import com.cloud.utils.db.Attribute;
@@ -53,7 +52,7 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
private final String SizeDiskOfferingSearch = "SELECT * FROM disk_offering WHERE " +
"disk_size = ? AND provisioning_type = ? AND removed IS NULL";
- private final Attribute _typeAttr;
+ private final Attribute _computeOnlyAttr;
protected final static long GB_UNIT_BYTES = 1024 * 1024 * 1024;
protected DiskOfferingDaoImpl() {
@@ -70,7 +69,7 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
UniqueNameSearch.and("name", UniqueNameSearch.entity().getUniqueName(), SearchCriteria.Op.EQ);
UniqueNameSearch.done();
- _typeAttr = _allAttributes.get("type");
+ _computeOnlyAttr = _allAttributes.get("compute_only");
}
@Override
@@ -82,13 +81,13 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
@Override
public List<DiskOfferingVO> searchIncludingRemoved(SearchCriteria<DiskOfferingVO> sc, final Filter filter, final Boolean lock, final boolean cache) {
- sc.addAnd(_typeAttr, Op.EQ, Type.Disk);
+ sc.addAnd(_computeOnlyAttr, Op.EQ, false);
return super.searchIncludingRemoved(sc, filter, lock, cache);
}
@Override
public <K> List<K> customSearchIncludingRemoved(SearchCriteria<K> sc, final Filter filter) {
- sc.addAnd(_typeAttr, Op.EQ, Type.Disk);
+ sc.addAnd(_computeOnlyAttr, Op.EQ, false);
return super.customSearchIncludingRemoved(sc, filter);
}
@@ -97,12 +96,12 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
StringBuilder builder = new StringBuilder(sql);
int index = builder.indexOf("WHERE");
if (index == -1) {
- builder.append(" WHERE type=?");
+ builder.append(" WHERE compute_only=?");
} else {
- builder.insert(index + 6, "type=? ");
+ builder.insert(index + 6, "compute_only=? ");
}
- return super.executeList(sql, Type.Disk, params);
+ return super.executeList(sql, false, params);
}
@Override
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
index 7168f88..6dc62e1 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
@@ -20,6 +20,356 @@
--;
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `uuid` varchar(40) UNIQUE;
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `name` varchar(255);
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `display_text` varchar(4096);
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `unique_name` varchar(32) COMMENT 'unique name for system offerings';
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `customized` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '0 implies not customized by default';
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `created` datetime COMMENT 'date when service offering was created';
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `removed` datetime COMMENT 'date when service offering was removed';
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `state` CHAR(40) NOT NULL DEFAULT 'Active' COMMENT 'state of service offering either Active or Inactive';
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `disk_offering_id` bigint unsigned;
+ALTER TABLE `cloud`.`service_offering` ADD CONSTRAINT `fk_service_offering__disk_offering_id` FOREIGN KEY `fk_service_offering__disk_offering_id`(`disk_offering_id`) REFERENCES `disk_offering`(`id`) ON DELETE CASCADE;
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `disk_offering_strictness` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT 'strict binding with disk offering or not';
+
+ALTER TABLE `cloud`.`disk_offering` ADD COLUMN `disk_size_strictness` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT 'allow resize disk when not stri';
+ALTER TABLE `cloud`.`disk_offering` ADD COLUMN `compute_only` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT 'when set to 1, disk offering has one to one binding with service offering';
+ALTER TABLE `cloud`.`disk_offering` DROP COLUMN `type`;
+
+ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `disk_offering_id`;
+
+DROP VIEW IF EXISTS `cloud`.`user_vm_view`;
+CREATE
+VIEW `user_vm_view` AS
+ SELECT
+ `vm_instance`.`id` AS `id`,
+ `vm_instance`.`name` AS `name`,
+ `user_vm`.`display_name` AS `display_name`,
+ `user_vm`.`user_data` AS `user_data`,
+ `account`.`id` AS `account_id`,
+ `account`.`uuid` AS `account_uuid`,
+ `account`.`account_name` AS `account_name`,
+ `account`.`type` AS `account_type`,
+ `domain`.`id` AS `domain_id`,
+ `domain`.`uuid` AS `domain_uuid`,
+ `domain`.`name` AS `domain_name`,
+ `domain`.`path` AS `domain_path`,
+ `projects`.`id` AS `project_id`,
+ `projects`.`uuid` AS `project_uuid`,
+ `projects`.`name` AS `project_name`,
+ `instance_group`.`id` AS `instance_group_id`,
+ `instance_group`.`uuid` AS `instance_group_uuid`,
+ `instance_group`.`name` AS `instance_group_name`,
+ `vm_instance`.`uuid` AS `uuid`,
+ `vm_instance`.`user_id` AS `user_id`,
+ `vm_instance`.`last_host_id` AS `last_host_id`,
+ `vm_instance`.`vm_type` AS `type`,
+ `vm_instance`.`limit_cpu_use` AS `limit_cpu_use`,
+ `vm_instance`.`created` AS `created`,
+ `vm_instance`.`state` AS `state`,
+ `vm_instance`.`removed` AS `removed`,
+ `vm_instance`.`ha_enabled` AS `ha_enabled`,
+ `vm_instance`.`hypervisor_type` AS `hypervisor_type`,
+ `vm_instance`.`instance_name` AS `instance_name`,
+ `vm_instance`.`guest_os_id` AS `guest_os_id`,
+ `vm_instance`.`display_vm` AS `display_vm`,
+ `guest_os`.`uuid` AS `guest_os_uuid`,
+ `vm_instance`.`pod_id` AS `pod_id`,
+ `host_pod_ref`.`uuid` AS `pod_uuid`,
+ `vm_instance`.`private_ip_address` AS `private_ip_address`,
+ `vm_instance`.`private_mac_address` AS `private_mac_address`,
+ `vm_instance`.`vm_type` AS `vm_type`,
+ `data_center`.`id` AS `data_center_id`,
+ `data_center`.`uuid` AS `data_center_uuid`,
+ `data_center`.`name` AS `data_center_name`,
+ `data_center`.`is_security_group_enabled` AS `security_group_enabled`,
+ `data_center`.`networktype` AS `data_center_type`,
+ `host`.`id` AS `host_id`,
+ `host`.`uuid` AS `host_uuid`,
+ `host`.`name` AS `host_name`,
+ `vm_template`.`id` AS `template_id`,
+ `vm_template`.`uuid` AS `template_uuid`,
+ `vm_template`.`name` AS `template_name`,
+ `vm_template`.`display_text` AS `template_display_text`,
+ `vm_template`.`enable_password` AS `password_enabled`,
+ `iso`.`id` AS `iso_id`,
+ `iso`.`uuid` AS `iso_uuid`,
+ `iso`.`name` AS `iso_name`,
+ `iso`.`display_text` AS `iso_display_text`,
+ `service_offering`.`id` AS `service_offering_id`,
+ `svc_disk_offering`.`uuid` AS `service_offering_uuid`,
+ `disk_offering`.`uuid` AS `disk_offering_uuid`,
+ `disk_offering`.`id` AS `disk_offering_id`,
+ (CASE
+ WHEN ISNULL(`service_offering`.`cpu`) THEN `custom_cpu`.`value`
+ ELSE `service_offering`.`cpu`
+ END) AS `cpu`,
+ (CASE
+ WHEN ISNULL(`service_offering`.`speed`) THEN `custom_speed`.`value`
+ ELSE `service_offering`.`speed`
+ END) AS `speed`,
+ (CASE
+ WHEN ISNULL(`service_offering`.`ram_size`) THEN `custom_ram_size`.`value`
+ ELSE `service_offering`.`ram_size`
+ END) AS `ram_size`,
+ `backup_offering`.`uuid` AS `backup_offering_uuid`,
+ `backup_offering`.`id` AS `backup_offering_id`,
+ `svc_disk_offering`.`name` AS `service_offering_name`,
+ `disk_offering`.`name` AS `disk_offering_name`,
+ `backup_offering`.`name` AS `backup_offering_name`,
+ `storage_pool`.`id` AS `pool_id`,
+ `storage_pool`.`uuid` AS `pool_uuid`,
+ `storage_pool`.`pool_type` AS `pool_type`,
+ `volumes`.`id` AS `volume_id`,
+ `volumes`.`uuid` AS `volume_uuid`,
+ `volumes`.`device_id` AS `volume_device_id`,
+ `volumes`.`volume_type` AS `volume_type`,
+ `security_group`.`id` AS `security_group_id`,
+ `security_group`.`uuid` AS `security_group_uuid`,
+ `security_group`.`name` AS `security_group_name`,
+ `security_group`.`description` AS `security_group_description`,
+ `nics`.`id` AS `nic_id`,
+ `nics`.`uuid` AS `nic_uuid`,
+ `nics`.`network_id` AS `network_id`,
+ `nics`.`ip4_address` AS `ip_address`,
+ `nics`.`ip6_address` AS `ip6_address`,
+ `nics`.`ip6_gateway` AS `ip6_gateway`,
+ `nics`.`ip6_cidr` AS `ip6_cidr`,
+ `nics`.`default_nic` AS `is_default_nic`,
+ `nics`.`gateway` AS `gateway`,
+ `nics`.`netmask` AS `netmask`,
+ `nics`.`mac_address` AS `mac_address`,
+ `nics`.`broadcast_uri` AS `broadcast_uri`,
+ `nics`.`isolation_uri` AS `isolation_uri`,
+ `vpc`.`id` AS `vpc_id`,
+ `vpc`.`uuid` AS `vpc_uuid`,
+ `networks`.`uuid` AS `network_uuid`,
+ `networks`.`name` AS `network_name`,
+ `networks`.`traffic_type` AS `traffic_type`,
+ `networks`.`guest_type` AS `guest_type`,
+ `user_ip_address`.`id` AS `public_ip_id`,
+ `user_ip_address`.`uuid` AS `public_ip_uuid`,
+ `user_ip_address`.`public_ip_address` AS `public_ip_address`,
+ `ssh_keypairs`.`keypair_name` AS `keypair_name`,
+ `resource_tags`.`id` AS `tag_id`,
+ `resource_tags`.`uuid` AS `tag_uuid`,
+ `resource_tags`.`key` AS `tag_key`,
+ `resource_tags`.`value` AS `tag_value`,
+ `resource_tags`.`domain_id` AS `tag_domain_id`,
+ `domain`.`uuid` AS `tag_domain_uuid`,
+ `domain`.`name` AS `tag_domain_name`,
+ `resource_tags`.`account_id` AS `tag_account_id`,
+ `account`.`account_name` AS `tag_account_name`,
+ `resource_tags`.`resource_id` AS `tag_resource_id`,
+ `resource_tags`.`resource_uuid` AS `tag_resource_uuid`,
+ `resource_tags`.`resource_type` AS `tag_resource_type`,
+ `resource_tags`.`customer` AS `tag_customer`,
+ `async_job`.`id` AS `job_id`,
+ `async_job`.`uuid` AS `job_uuid`,
+ `async_job`.`job_status` AS `job_status`,
+ `async_job`.`account_id` AS `job_account_id`,
+ `affinity_group`.`id` AS `affinity_group_id`,
+ `affinity_group`.`uuid` AS `affinity_group_uuid`,
+ `affinity_group`.`name` AS `affinity_group_name`,
+ `affinity_group`.`description` AS `affinity_group_description`,
+ `vm_instance`.`dynamically_scalable` AS `dynamically_scalable`
+ FROM
+ (((((((((((((((((((((((((((((((((`user_vm`
+ JOIN `vm_instance` ON (((`vm_instance`.`id` = `user_vm`.`id`)
+ AND ISNULL(`vm_instance`.`removed`))))
+ JOIN `account` ON ((`vm_instance`.`account_id` = `account`.`id`)))
+ JOIN `domain` ON ((`vm_instance`.`domain_id` = `domain`.`id`)))
+ LEFT JOIN `guest_os` ON ((`vm_instance`.`guest_os_id` = `guest_os`.`id`)))
+ LEFT JOIN `host_pod_ref` ON ((`vm_instance`.`pod_id` = `host_pod_ref`.`id`)))
+ LEFT JOIN `projects` ON ((`projects`.`project_account_id` = `account`.`id`)))
+ LEFT JOIN `instance_group_vm_map` ON ((`vm_instance`.`id` = `instance_group_vm_map`.`instance_id`)))
+ LEFT JOIN `instance_group` ON ((`instance_group_vm_map`.`group_id` = `instance_group`.`id`)))
+ LEFT JOIN `data_center` ON ((`vm_instance`.`data_center_id` = `data_center`.`id`)))
+ LEFT JOIN `host` ON ((`vm_instance`.`host_id` = `host`.`id`)))
+ LEFT JOIN `vm_template` ON ((`vm_instance`.`vm_template_id` = `vm_template`.`id`)))
+ LEFT JOIN `vm_template` `iso` ON ((`iso`.`id` = `user_vm`.`iso_id`)))
+ LEFT JOIN `service_offering` ON ((`vm_instance`.`service_offering_id` = `service_offering`.`id`)))
+ LEFT JOIN `disk_offering` `svc_disk_offering` ON ((`vm_instance`.`service_offering_id` = `svc_disk_offering`.`id`)))
+ LEFT JOIN `disk_offering` ON ((`service_offering`.`disk_offering_id` = `disk_offering`.`id`)))
+ LEFT JOIN `backup_offering` ON ((`vm_instance`.`backup_offering_id` = `backup_offering`.`id`)))
+ LEFT JOIN `volumes` ON ((`vm_instance`.`id` = `volumes`.`instance_id`)))
+ LEFT JOIN `storage_pool` ON ((`volumes`.`pool_id` = `storage_pool`.`id`)))
+ LEFT JOIN `security_group_vm_map` ON ((`vm_instance`.`id` = `security_group_vm_map`.`instance_id`)))
+ LEFT JOIN `security_group` ON ((`security_group_vm_map`.`security_group_id` = `security_group`.`id`)))
+ LEFT JOIN `nics` ON (((`vm_instance`.`id` = `nics`.`instance_id`)
+ AND ISNULL(`nics`.`removed`))))
+ LEFT JOIN `networks` ON ((`nics`.`network_id` = `networks`.`id`)))
+ LEFT JOIN `vpc` ON (((`networks`.`vpc_id` = `vpc`.`id`)
+ AND ISNULL(`vpc`.`removed`))))
+ LEFT JOIN `user_ip_address` ON ((`user_ip_address`.`vm_id` = `vm_instance`.`id`)))
+ LEFT JOIN `user_vm_details` `ssh_details` ON (((`ssh_details`.`vm_id` = `vm_instance`.`id`)
+ AND (`ssh_details`.`name` = 'SSH.PublicKey'))))
+ LEFT JOIN `ssh_keypairs` ON (((`ssh_keypairs`.`public_key` = `ssh_details`.`value`)
+ AND (`ssh_keypairs`.`account_id` = `account`.`id`))))
+ LEFT JOIN `resource_tags` ON (((`resource_tags`.`resource_id` = `vm_instance`.`id`)
+ AND (`resource_tags`.`resource_type` = 'UserVm'))))
+ LEFT JOIN `async_job` ON (((`async_job`.`instance_id` = `vm_instance`.`id`)
+ AND (`async_job`.`instance_type` = 'VirtualMachine')
+ AND (`async_job`.`job_status` = 0))))
+ LEFT JOIN `affinity_group_vm_map` ON ((`vm_instance`.`id` = `affinity_group_vm_map`.`instance_id`)))
+ LEFT JOIN `affinity_group` ON ((`affinity_group_vm_map`.`affinity_group_id` = `affinity_group`.`id`)))
+ LEFT JOIN `user_vm_details` `custom_cpu` ON (((`custom_cpu`.`vm_id` = `vm_instance`.`id`)
+ AND (`custom_cpu`.`name` = 'CpuNumber'))))
+ LEFT JOIN `user_vm_details` `custom_speed` ON (((`custom_speed`.`vm_id` = `vm_instance`.`id`)
+ AND (`custom_speed`.`name` = 'CpuSpeed'))))
+ LEFT JOIN `user_vm_details` `custom_ram_size` ON (((`custom_ram_size`.`vm_id` = `vm_instance`.`id`)
+ AND (`custom_ram_size`.`name` = 'memory'))));
+
+DROP VIEW IF EXISTS `cloud`.`disk_offering_view`;
+CREATE VIEW `cloud`.`disk_offering_view` AS
+ SELECT
+ `disk_offering`.`id` AS `id`,
+ `disk_offering`.`uuid` AS `uuid`,
+ `disk_offering`.`name` AS `name`,
+ `disk_offering`.`display_text` AS `display_text`,
+ `disk_offering`.`provisioning_type` AS `provisioning_type`,
+ `disk_offering`.`disk_size` AS `disk_size`,
+ `disk_offering`.`min_iops` AS `min_iops`,
+ `disk_offering`.`max_iops` AS `max_iops`,
+ `disk_offering`.`created` AS `created`,
+ `disk_offering`.`tags` AS `tags`,
+ `disk_offering`.`customized` AS `customized`,
+ `disk_offering`.`customized_iops` AS `customized_iops`,
+ `disk_offering`.`removed` AS `removed`,
+ `disk_offering`.`use_local_storage` AS `use_local_storage`,
+ `disk_offering`.`system_use` AS `system_use`,
+ `disk_offering`.`hv_ss_reserve` AS `hv_ss_reserve`,
+ `disk_offering`.`bytes_read_rate` AS `bytes_read_rate`,
+ `disk_offering`.`bytes_read_rate_max` AS `bytes_read_rate_max`,
+ `disk_offering`.`bytes_read_rate_max_length` AS `bytes_read_rate_max_length`,
+ `disk_offering`.`bytes_write_rate` AS `bytes_write_rate`,
+ `disk_offering`.`bytes_write_rate_max` AS `bytes_write_rate_max`,
+ `disk_offering`.`bytes_write_rate_max_length` AS `bytes_write_rate_max_length`,
+ `disk_offering`.`iops_read_rate` AS `iops_read_rate`,
+ `disk_offering`.`iops_read_rate_max` AS `iops_read_rate_max`,
+ `disk_offering`.`iops_read_rate_max_length` AS `iops_read_rate_max_length`,
+ `disk_offering`.`iops_write_rate` AS `iops_write_rate`,
+ `disk_offering`.`iops_write_rate_max` AS `iops_write_rate_max`,
+ `disk_offering`.`iops_write_rate_max_length` AS `iops_write_rate_max_length`,
+ `disk_offering`.`cache_mode` AS `cache_mode`,
+ `disk_offering`.`sort_key` AS `sort_key`,
+ `disk_offering`.`compute_only` AS `compute_only`,
+ `disk_offering`.`display_offering` AS `display_offering`,
+ `disk_offering`.`state` AS `state`,
+ `vsphere_storage_policy`.`value` AS `vsphere_storage_policy`,
+ GROUP_CONCAT(DISTINCT(domain.id)) AS domain_id,
+ GROUP_CONCAT(DISTINCT(domain.uuid)) AS domain_uuid,
+ GROUP_CONCAT(DISTINCT(domain.name)) AS domain_name,
+ GROUP_CONCAT(DISTINCT(domain.path)) AS domain_path,
+ GROUP_CONCAT(DISTINCT(zone.id)) AS zone_id,
+ GROUP_CONCAT(DISTINCT(zone.uuid)) AS zone_uuid,
+ GROUP_CONCAT(DISTINCT(zone.name)) AS zone_name
+ FROM
+ `cloud`.`disk_offering`
+ LEFT JOIN
+ `cloud`.`disk_offering_details` AS `domain_details` ON `domain_details`.`offering_id` = `disk_offering`.`id` AND `domain_details`.`name`='domainid'
+ LEFT JOIN
+ `cloud`.`domain` AS `domain` ON FIND_IN_SET(`domain`.`id`, `domain_details`.`value`)
+ LEFT JOIN
+ `cloud`.`disk_offering_details` AS `zone_details` ON `zone_details`.`offering_id` = `disk_offering`.`id` AND `zone_details`.`name`='zoneid'
+ LEFT JOIN
+ `cloud`.`data_center` AS `zone` ON FIND_IN_SET(`zone`.`id`, `zone_details`.`value`)
+ LEFT JOIN
+ `cloud`.`disk_offering_details` AS `vsphere_storage_policy` ON `vsphere_storage_policy`.`offering_id` = `disk_offering`.`id`
+ AND `vsphere_storage_policy`.`name` = 'storagepolicy'
+ WHERE
+ `disk_offering`.`state`='Active'
+ GROUP BY
+ `disk_offering`.`id`;
+
+DROP VIEW IF EXISTS `cloud`.`service_offering_view`;
+CREATE VIEW `cloud`.`service_offering_view` AS
+ SELECT
+ `service_offering`.`id` AS `id`,
+ `disk_offering`.`uuid` AS `uuid`,
+ `disk_offering`.`name` AS `name`,
+ `disk_offering`.`display_text` AS `display_text`,
+ `disk_offering`.`provisioning_type` AS `provisioning_type`,
+ `disk_offering`.`created` AS `created`,
+ `disk_offering`.`tags` AS `tags`,
+ `disk_offering`.`removed` AS `removed`,
+ `disk_offering`.`use_local_storage` AS `use_local_storage`,
+ `disk_offering`.`system_use` AS `system_use`,
+ `disk_offering`.`customized_iops` AS `customized_iops`,
+ `disk_offering`.`min_iops` AS `min_iops`,
+ `disk_offering`.`max_iops` AS `max_iops`,
+ `disk_offering`.`hv_ss_reserve` AS `hv_ss_reserve`,
+ `disk_offering`.`bytes_read_rate` AS `bytes_read_rate`,
+ `disk_offering`.`bytes_read_rate_max` AS `bytes_read_rate_max`,
+ `disk_offering`.`bytes_read_rate_max_length` AS `bytes_read_rate_max_length`,
+ `disk_offering`.`bytes_write_rate` AS `bytes_write_rate`,
+ `disk_offering`.`bytes_write_rate_max` AS `bytes_write_rate_max`,
+ `disk_offering`.`bytes_write_rate_max_length` AS `bytes_write_rate_max_length`,
+ `disk_offering`.`iops_read_rate` AS `iops_read_rate`,
+ `disk_offering`.`iops_read_rate_max` AS `iops_read_rate_max`,
+ `disk_offering`.`iops_read_rate_max_length` AS `iops_read_rate_max_length`,
+ `disk_offering`.`iops_write_rate` AS `iops_write_rate`,
+ `disk_offering`.`iops_write_rate_max` AS `iops_write_rate_max`,
+ `disk_offering`.`iops_write_rate_max_length` AS `iops_write_rate_max_length`,
+ `disk_offering`.`cache_mode` AS `cache_mode`,
+ `disk_offering`.`disk_size` AS `root_disk_size`,
+ `service_offering`.`cpu` AS `cpu`,
+ `service_offering`.`speed` AS `speed`,
+ `service_offering`.`ram_size` AS `ram_size`,
+ `service_offering`.`nw_rate` AS `nw_rate`,
+ `service_offering`.`mc_rate` AS `mc_rate`,
+ `service_offering`.`ha_enabled` AS `ha_enabled`,
+ `service_offering`.`limit_cpu_use` AS `limit_cpu_use`,
+ `service_offering`.`host_tag` AS `host_tag`,
+ `service_offering`.`default_use` AS `default_use`,
+ `service_offering`.`vm_type` AS `vm_type`,
+ `service_offering`.`sort_key` AS `sort_key`,
+ `service_offering`.`is_volatile` AS `is_volatile`,
+ `service_offering`.`deployment_planner` AS `deployment_planner`,
+ `vsphere_storage_policy`.`value` AS `vsphere_storage_policy`,
+ GROUP_CONCAT(DISTINCT(domain.id)) AS domain_id,
+ GROUP_CONCAT(DISTINCT(domain.uuid)) AS domain_uuid,
+ GROUP_CONCAT(DISTINCT(domain.name)) AS domain_name,
+ GROUP_CONCAT(DISTINCT(domain.path)) AS domain_path,
+ GROUP_CONCAT(DISTINCT(zone.id)) AS zone_id,
+ GROUP_CONCAT(DISTINCT(zone.uuid)) AS zone_uuid,
+ GROUP_CONCAT(DISTINCT(zone.name)) AS zone_name,
+ IFNULL(`min_compute_details`.`value`, `cpu`) AS min_cpu,
+ IFNULL(`max_compute_details`.`value`, `cpu`) AS max_cpu,
+ IFNULL(`min_memory_details`.`value`, `ram_size`) AS min_memory,
+ IFNULL(`max_memory_details`.`value`, `ram_size`) AS max_memory
+ FROM
+ `cloud`.`service_offering`
+ INNER JOIN
+ `cloud`.`disk_offering_view` AS `disk_offering` ON service_offering.id = disk_offering.id
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `domain_details` ON `domain_details`.`service_offering_id` = `disk_offering`.`id` AND `domain_details`.`name`='domainid'
+ LEFT JOIN
+ `cloud`.`domain` AS `domain` ON FIND_IN_SET(`domain`.`id`, `domain_details`.`value`)
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `zone_details` ON `zone_details`.`service_offering_id` = `disk_offering`.`id` AND `zone_details`.`name`='zoneid'
+ LEFT JOIN
+ `cloud`.`data_center` AS `zone` ON FIND_IN_SET(`zone`.`id`, `zone_details`.`value`)
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `min_compute_details` ON `min_compute_details`.`service_offering_id` = `disk_offering`.`id`
+ AND `min_compute_details`.`name` = 'mincpunumber'
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `max_compute_details` ON `max_compute_details`.`service_offering_id` = `disk_offering`.`id`
+ AND `max_compute_details`.`name` = 'maxcpunumber'
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `min_memory_details` ON `min_memory_details`.`service_offering_id` = `disk_offering`.`id`
+ AND `min_memory_details`.`name` = 'minmemory'
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `max_memory_details` ON `max_memory_details`.`service_offering_id` = `disk_offering`.`id`
+ AND `max_memory_details`.`name` = 'maxmemory'
+ LEFT JOIN
+ `cloud`.`service_offering_details` AS `vsphere_storage_policy` ON `vsphere_storage_policy`.`service_offering_id` = `disk_offering`.`id`
+ AND `vsphere_storage_policy`.`name` = 'storagepolicy'
+ WHERE
+ `disk_offering`.`state`='Active'
+ GROUP BY
+ `service_offering`.`id`;
+
--;
-- Stored procedure to do idempotent column add;
-- This is copied from schema-41000to41100.sql
diff --git a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
index 8423624..1b25424 100644
--- a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
+++ b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
@@ -335,7 +335,7 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
Long offeringId = null;
if (diskOfferingId != null) {
DiskOfferingVO offering = diskOfferingDao.findById(diskOfferingId);
- if (offering != null && (offering.getType() == DiskOfferingVO.Type.Disk)) {
+ if (offering != null && !offering.isComputeOnly()) {
offeringId = offering.getId();
}
}
diff --git a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
index a124a4a..34ea490 100644
--- a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
+++ b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
@@ -456,7 +456,7 @@ public class ScaleIOVMSnapshotStrategy extends ManagerBase implements VMSnapshot
Long offeringId = null;
if (diskOfferingId != null) {
DiskOfferingVO offering = diskOfferingDao.findById(diskOfferingId);
- if (offering != null && (offering.getType() == DiskOfferingVO.Type.Disk)) {
+ if (offering != null && !offering.isComputeOnly()) {
offeringId = offering.getId();
}
}
diff --git a/server/src/main/java/com/cloud/api/ApiDBUtils.java b/server/src/main/java/com/cloud/api/ApiDBUtils.java
index f1bab19..b748bbd 100644
--- a/server/src/main/java/com/cloud/api/ApiDBUtils.java
+++ b/server/src/main/java/com/cloud/api/ApiDBUtils.java
@@ -1029,7 +1029,7 @@ public class ApiDBUtils {
public static DiskOfferingVO findDiskOfferingById(Long diskOfferingId) {
DiskOfferingVO off = s_diskOfferingDao.findByIdIncludingRemoved(diskOfferingId);
- if (off.getType() == DiskOfferingVO.Type.Disk) {
+ if (!off.isComputeOnly()) {
return off;
}
return null;
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index 6cad8d1..c3bcc1d 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -206,7 +206,6 @@ import com.cloud.server.TaggedResourceService;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.ScopeType;
import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
@@ -2757,7 +2756,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
Filter searchFilter = new Filter(DiskOfferingJoinVO.class, "sortKey", SortKeyAscending.value(), cmd.getStartIndex(), cmd.getPageSizeVal());
SearchCriteria<DiskOfferingJoinVO> sc = _diskOfferingJoinDao.createSearchCriteria();
- sc.addAnd("type", Op.EQ, DiskOfferingVO.Type.Disk);
+ sc.addAnd("computeOnly", Op.EQ, false);
Account account = CallContext.current().getCallingAccount();
Object name = cmd.getDiskOfferingName();
diff --git a/server/src/main/java/com/cloud/api/query/vo/DiskOfferingJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/DiskOfferingJoinVO.java
index 707c2a3..69b8fe4 100644
--- a/server/src/main/java/com/cloud/api/query/vo/DiskOfferingJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/DiskOfferingJoinVO.java
@@ -29,7 +29,6 @@ import org.apache.cloudstack.api.Identity;
import org.apache.cloudstack.api.InternalIdentity;
import com.cloud.offering.DiskOffering;
-import com.cloud.offering.DiskOffering.Type;
import com.cloud.storage.Storage;
import com.cloud.utils.db.GenericDao;
@@ -122,8 +121,8 @@ public class DiskOfferingJoinVO extends BaseViewVO implements InternalIdentity,
@Column(name = "cache_mode")
String cacheMode;
- @Column(name = "type")
- Type type;
+ @Column(name = "compute_only")
+ boolean computeOnly;
@Column(name = GenericDao.CREATED_COLUMN)
private Date created;
@@ -247,8 +246,8 @@ public class DiskOfferingJoinVO extends BaseViewVO implements InternalIdentity,
return sortKey;
}
- public Type getType() {
- return type;
+ public boolean isComputeOnly() {
+ return computeOnly;
}
public Long getBytesReadRate() {
diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
index cc00cb6..e5d0bbc 100644
--- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
@@ -456,7 +456,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
// Check that the the disk offering specified is valid
if (diskOfferingId != null) {
DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId);
- if ((diskOffering == null) || diskOffering.getRemoved() != null || !DiskOfferingVO.Type.Disk.equals(diskOffering.getType())) {
+ if ((diskOffering == null) || diskOffering.getRemoved() != null || diskOffering.isComputeOnly()) {
throw new InvalidParameterValueException("Please specify a valid disk offering.");
}
if (!diskOffering.isCustomized()) {
@@ -617,7 +617,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
// Check that the the disk offering is specified
diskOffering = _diskOfferingDao.findById(diskOfferingId);
- if ((diskOffering == null) || diskOffering.getRemoved() != null || !DiskOfferingVO.Type.Disk.equals(diskOffering.getType())) {
+ if ((diskOffering == null) || diskOffering.getRemoved() != null || diskOffering.isComputeOnly()) {
throw new InvalidParameterValueException("Please specify a valid disk offering.");
}
@@ -1031,7 +1031,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
_configMgr.checkDiskOfferingAccess(_accountMgr.getActiveAccountById(volume.getAccountId()), newDiskOffering, _dcDao.findById(volume.getDataCenterId()));
- if (newDiskOffering.getDiskSize() > 0 && DiskOfferingVO.Type.Service.equals(newDiskOffering.getType())) {
+ if (newDiskOffering.getDiskSize() > 0 && newDiskOffering.isComputeOnly()) {
newSize = newDiskOffering.getDiskSize();
} else if (newDiskOffering.isCustomized()) {
newSize = cmd.getSize();
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 09b15bf..b188fac 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -2162,7 +2162,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
Long offeringId = null;
if (diskOfferingId != null) {
DiskOfferingVO offering = _diskOfferingDao.findById(diskOfferingId);
- if (offering != null && (offering.getType() == DiskOfferingVO.Type.Disk)) {
+ if (offering != null && !offering.isComputeOnly()) {
offeringId = offering.getId();
}
}
[cloudstack] 04/05: Remove diskofferingid from vminstance VO
Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
harikrishna pushed a commit to branch decoupleServiceOfferingDiskOffering
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 69866071eafcd36b62952f597a8d77ae1c5b3b97
Author: Harikrishna Patnala <ha...@gmail.com>
AuthorDate: Mon May 10 12:15:41 2021 +0530
Remove diskofferingid from vminstance VO
---
api/src/main/java/com/cloud/vm/VirtualMachine.java | 2 --
engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java | 8 --------
.../apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java | 5 -----
3 files changed, 15 deletions(-)
diff --git a/api/src/main/java/com/cloud/vm/VirtualMachine.java b/api/src/main/java/com/cloud/vm/VirtualMachine.java
index 4d6014f..9b971e5 100644
--- a/api/src/main/java/com/cloud/vm/VirtualMachine.java
+++ b/api/src/main/java/com/cloud/vm/VirtualMachine.java
@@ -320,8 +320,6 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Partition,
long getServiceOfferingId();
- Long getDiskOfferingId();
-
Long getBackupOfferingId();
String getBackupExternalId();
diff --git a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
index 926fd86..25dc962 100644
--- a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
+++ b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
@@ -174,9 +174,6 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, Vi
@Column(name = "uuid")
protected String uuid = UUID.randomUUID().toString();
- @Column(name = "disk_offering_id")
- protected Long diskOfferingId;
-
//
// Power state for VM state sync
//
@@ -539,11 +536,6 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, Vi
this.serviceOfferingId = serviceOfferingId;
}
- @Override
- public Long getDiskOfferingId() {
- return diskOfferingId;
- }
-
public void setDynamicallyScalable(boolean dynamicallyScalable) {
this.dynamicallyScalable = dynamicallyScalable;
}
diff --git a/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
index 4ab5f42..516dc0c 100644
--- a/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
@@ -538,11 +538,6 @@ public class VMEntityVO implements VirtualMachine, FiniteStateObject<State, Virt
this.networkIds = networkIds;
}
- @Override
- public Long getDiskOfferingId() {
- return diskOfferingId;
- }
-
public VMReservationVO getVmReservation() {
return vmReservation;
}
[cloudstack] 05/05: Decouple service offering and disk offering
states
Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
harikrishna pushed a commit to branch decoupleServiceOfferingDiskOffering
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 345373809185e0702720e01882739c269da6362b
Author: Harikrishna Patnala <ha...@gmail.com>
AuthorDate: Mon May 10 16:48:58 2021 +0530
Decouple service offering and disk offering states
---
.../main/java/com/cloud/offering/ServiceOffering.java | 4 ++--
.../main/java/com/cloud/service/ServiceOfferingVO.java | 11 +++++++----
.../main/resources/META-INF/db/schema-41510to41600.sql | 16 +++++++++-------
.../apache/cloudstack/quota/vo/ServiceOfferingVO.java | 7 +++----
.../internallbvmmgr/InternalLBVMManagerTest.java | 2 +-
.../internallbvmmgr/InternalLBVMServiceTest.java | 2 +-
.../cloud/configuration/ConfigurationManagerImpl.java | 2 +-
server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 2 +-
.../test/java/com/cloud/vm/UserVmManagerImplTest.java | 5 +----
9 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/api/src/main/java/com/cloud/offering/ServiceOffering.java b/api/src/main/java/com/cloud/offering/ServiceOffering.java
index 994dbd7..d21fbfc 100644
--- a/api/src/main/java/com/cloud/offering/ServiceOffering.java
+++ b/api/src/main/java/com/cloud/offering/ServiceOffering.java
@@ -113,9 +113,9 @@ public interface ServiceOffering extends InfrastructureEntity, InternalIdentity,
boolean isDynamic();
- void setState(DiskOffering.State state);
+ void setState(ServiceOffering.State state);
- DiskOffering.State getState();
+ ServiceOffering.State getState();
void setName(String name);
diff --git a/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
index 95dbce5..7f38ae2 100644
--- a/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
@@ -32,7 +32,6 @@ import javax.persistence.TemporalType;
import javax.persistence.Enumerated;
import javax.persistence.EnumType;
-import com.cloud.offering.DiskOffering;
import com.cloud.offering.ServiceOffering;
import com.cloud.storage.Storage.ProvisioningType;
import com.cloud.utils.db.GenericDao;
@@ -71,7 +70,7 @@ public class ServiceOfferingVO implements ServiceOffering {
@Enumerated(EnumType.STRING)
@Column(name = "state")
- DiskOffering.State state = DiskOffering.State.Active;
+ ServiceOffering.State state = ServiceOffering.State.Active;
@Column(name = "disk_offering_id")
private Long diskOfferingId;
@@ -149,6 +148,8 @@ public class ServiceOfferingVO implements ServiceOffering {
this.vmType = vmType == null ? null : vmType.toString().toLowerCase();
uuid = UUID.randomUUID().toString();
this.systemUse = systemUse;
+ this.name = name;
+ this.displayText = displayText;
}
public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA,
@@ -168,6 +169,8 @@ public class ServiceOfferingVO implements ServiceOffering {
this.deploymentPlanner = deploymentPlanner;
uuid = UUID.randomUUID().toString();
this.systemUse = systemUse;
+ this.name = name;
+ this.displayText = displayText;
}
public ServiceOfferingVO(ServiceOfferingVO offering) {
@@ -387,12 +390,12 @@ public class ServiceOfferingVO implements ServiceOffering {
}
@Override
- public DiskOffering.State getState() {
+ public ServiceOffering.State getState() {
return state;
}
@Override
- public void setState(DiskOffering.State state) {
+ public void setState(ServiceOffering.State state) {
this.state = state;
}
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
index a84b689..0268a4f 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
@@ -39,6 +39,8 @@ ALTER TABLE `cloud`.`disk_offering` DROP COLUMN `type`;
ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `disk_offering_id`;
+UPDATE `cloud`.`service_offering` so, `cloud`.`disk_offering` do SET so.`name` = do.`name`, so.`display_text` = do.`display_text` WHERE so.`id` = do.`id`;
+
DROP VIEW IF EXISTS `cloud`.`user_vm_view`;
CREATE
VIEW `user_vm_view` AS
@@ -287,15 +289,15 @@ DROP VIEW IF EXISTS `cloud`.`service_offering_view`;
CREATE VIEW `cloud`.`service_offering_view` AS
SELECT
`service_offering`.`id` AS `id`,
- `disk_offering`.`uuid` AS `uuid`,
- `disk_offering`.`name` AS `name`,
- `disk_offering`.`display_text` AS `display_text`,
+ `service_offering`.`uuid` AS `uuid`,
+ `service_offering`.`name` AS `name`,
+ `service_offering`.`display_text` AS `display_text`,
`disk_offering`.`provisioning_type` AS `provisioning_type`,
- `disk_offering`.`created` AS `created`,
+ `service_offering`.`created` AS `created`,
`disk_offering`.`tags` AS `tags`,
- `disk_offering`.`removed` AS `removed`,
+ `service_offering`.`removed` AS `removed`,
`disk_offering`.`use_local_storage` AS `use_local_storage`,
- `disk_offering`.`system_use` AS `system_use`,
+ `service_offering`.`system_use` AS `system_use`,
`disk_offering`.`customized_iops` AS `customized_iops`,
`disk_offering`.`min_iops` AS `min_iops`,
`disk_offering`.`max_iops` AS `max_iops`,
@@ -342,7 +344,7 @@ CREATE VIEW `cloud`.`service_offering_view` AS
FROM
`cloud`.`service_offering`
INNER JOIN
- `cloud`.`disk_offering_view` AS `disk_offering` ON service_offering.id = disk_offering.id
+ `cloud`.`disk_offering_view` AS `disk_offering` ON service_offering.disk_offering_id = disk_offering.id
LEFT JOIN
`cloud`.`service_offering_details` AS `domain_details` ON `domain_details`.`service_offering_id` = `disk_offering`.`id` AND `domain_details`.`name`='domainid'
LEFT JOIN
diff --git a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
index 4c1b5ac..56f15a7 100644
--- a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
+++ b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
@@ -32,7 +32,6 @@ import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Transient;
-import com.cloud.offering.DiskOffering;
import com.cloud.offering.ServiceOffering;
import com.cloud.utils.db.GenericDao;
@@ -69,7 +68,7 @@ public class ServiceOfferingVO implements ServiceOffering {
@Enumerated(EnumType.STRING)
@Column(name = "state")
- DiskOffering.State state = DiskOffering.State.Active;
+ ServiceOffering.State state = ServiceOffering.State.Active;
@Column(name = "disk_offering_id")
private Long diskOfferingId;
@@ -333,12 +332,12 @@ public class ServiceOfferingVO implements ServiceOffering {
}
@Override
- public DiskOffering.State getState() {
+ public ServiceOffering.State getState() {
return state;
}
@Override
- public void setState(DiskOffering.State state) {
+ public void setState(ServiceOffering.State state) {
this.state = state;
}
diff --git a/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
index 103fcd9..3022ee0 100644
--- a/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
+++ b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
@@ -341,7 +341,7 @@ public class InternalLBVMManagerTest extends TestCase {
final ServiceOfferingVO voToReturn = vo;
final Class<?> c = voToReturn.getClass();
try {
- final Field f = c.getSuperclass().getDeclaredField("id");
+ final Field f = c.getDeclaredField("id");
f.setAccessible(true);
f.setLong(voToReturn, id);
} catch (final NoSuchFieldException ex) {
diff --git a/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
index 898b7e5..f8a2e23 100644
--- a/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
+++ b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
@@ -251,7 +251,7 @@ public class InternalLBVMServiceTest extends TestCase {
final ServiceOfferingVO voToReturn = vo;
final Class<?> c = voToReturn.getClass();
try {
- final Field f = c.getSuperclass().getDeclaredField("id");
+ final Field f = c.getDeclaredField("id");
f.setAccessible(true);
f.setLong(voToReturn, id);
} catch (final NoSuchFieldException ex) {
diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index 6069e53..357163b 100755
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -3473,7 +3473,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
throw new InvalidParameterValueException(String.format("Unable to delete service offering: %s by user: %s because it is not root-admin or domain-admin", offering.getUuid(), user.getUuid()));
}
- offering.setState(DiskOffering.State.Inactive);
+ offering.setState(ServiceOffering.State.Inactive);
if (_serviceOfferingDao.update(offeringId, offering)) {
CallContext.current().setEventDetails("Service offering id=" + offeringId);
return true;
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index af4102e..72a7ac3 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -1064,7 +1064,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
// Check resource limits for CPU and Memory.
Map<String, String> customParameters = cmd.getDetails();
ServiceOfferingVO newServiceOffering = _offeringDao.findById(svcOffId);
- if (newServiceOffering.getState() == DiskOffering.State.Inactive) {
+ if (newServiceOffering.getState() == ServiceOffering.State.Inactive) {
throw new InvalidParameterValueException(String.format("Unable to upgrade virtual machine %s with an inactive service offering %s", vmInstance.getUuid(), newServiceOffering.getUuid()));
}
if (newServiceOffering.isDynamic()) {
diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
index cb0ab80..cf6d66e 100644
--- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
+++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
@@ -208,12 +208,9 @@ public class UserVmManagerImplTest {
boolean ha = false;
boolean useLocalStorage = false;
- DiskOfferingVO diskOfferingVO = new DiskOfferingVO(name, displayText, Storage.ProvisioningType.THIN, false, null, false, false, false, true);
- diskOfferingVO = diskOfferingDao.persistDefaultDiskOffering(diskOfferingVO);
-
ServiceOfferingVO serviceOffering = new ServiceOfferingVO(name, cpu, ramSize, speed, null, null, ha, displayText, Storage.ProvisioningType.THIN, useLocalStorage, false, null, false, null,
false);
- serviceOffering.setDiskOfferingId(diskOfferingVO.getId());
+ serviceOffering.setDiskOfferingId(1l);
return serviceOffering;
}
[cloudstack] 03/05: Decoupled service offering and disk offering
Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
harikrishna pushed a commit to branch decoupleServiceOfferingDiskOffering
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 570905293ba551ba65baac027c7756ae2fe70dc9
Author: Harikrishna Patnala <ha...@gmail.com>
AuthorDate: Thu May 6 14:57:03 2021 +0530
Decoupled service offering and disk offering
---
.../java/com/cloud/offering/ServiceOffering.java | 46 ++--
.../com/cloud/vm/VirtualMachineManagerImpl.java | 8 +-
.../engine/orchestration/CloudOrchestrator.java | 40 ++--
.../engine/orchestration/VolumeOrchestrator.java | 2 +-
.../cloud/vm/VirtualMachineManagerImplTest.java | 8 +-
.../java/com/cloud/service/ServiceOfferingVO.java | 236 ++++++++++++++-------
.../cloud/service/dao/ServiceOfferingDaoImpl.java | 19 +-
.../java/com/cloud/storage/DiskOfferingVO.java | 11 +
.../com/cloud/storage/dao/DiskOfferingDao.java | 2 +-
.../com/cloud/storage/dao/DiskOfferingDaoImpl.java | 9 +-
.../src/main/java/com/cloud/vm/UserVmVO.java | 4 +-
.../src/main/java/com/cloud/vm/VMInstanceVO.java | 3 +-
.../resources/META-INF/db/schema-41510to41600.sql | 1 +
.../cloudstack/quota/vo/ServiceOfferingVO.java | 210 ++++++++++++------
.../java/com/cloud/hypervisor/guru/VMwareGuru.java | 8 +-
.../contrail/management/ServiceVirtualMachine.java | 2 +-
.../contrail/management/ManagementServerMock.java | 2 +-
.../java/com/cloud/api/query/QueryManagerImpl.java | 8 +-
.../configuration/ConfigurationManagerImpl.java | 69 +++---
.../deploy/DeploymentPlanningManagerImpl.java | 9 +-
.../network/security/SecurityManagerMBeanImpl.java | 2 +-
.../com/cloud/server/ConfigurationServerImpl.java | 7 +-
.../java/com/cloud/storage/StorageManagerImpl.java | 16 +-
.../main/java/com/cloud/test/DatabaseConfig.java | 22 +-
.../main/java/com/cloud/vm/UserVmManagerImpl.java | 12 +-
.../cloudstack/vm/UnmanagedVMsManagerImpl.java | 38 ++--
.../cloud/storage/VolumeApiServiceImplTest.java | 8 +-
.../java/com/cloud/vm/UserVmManagerImplTest.java | 8 +-
.../test/java/com/cloud/vm/UserVmManagerTest.java | 2 +-
.../java/com/cloud/vm/dao/UserVmDaoImplTest.java | 2 +-
.../cloudstack/affinity/AffinityApiUnitTest.java | 2 +-
.../affinity/AffinityGroupServiceImplTest.java | 2 +-
.../cloudstack/vm/UnmanagedVMsManagerImplTest.java | 2 +-
33 files changed, 523 insertions(+), 297 deletions(-)
diff --git a/api/src/main/java/com/cloud/offering/ServiceOffering.java b/api/src/main/java/com/cloud/offering/ServiceOffering.java
index f47b2cb..994dbd7 100644
--- a/api/src/main/java/com/cloud/offering/ServiceOffering.java
+++ b/api/src/main/java/com/cloud/offering/ServiceOffering.java
@@ -25,41 +25,34 @@ import org.apache.cloudstack.api.InternalIdentity;
/**
* offered.
*/
-public interface ServiceOffering extends DiskOffering, InfrastructureEntity, InternalIdentity, Identity {
- public static final String consoleProxyDefaultOffUniqueName = "Cloud.com-ConsoleProxy";
- public static final String ssvmDefaultOffUniqueName = "Cloud.com-SecondaryStorage";
- public static final String routerDefaultOffUniqueName = "Cloud.Com-SoftwareRouter";
- public static final String elbVmDefaultOffUniqueName = "Cloud.Com-ElasticLBVm";
- public static final String internalLbVmDefaultOffUniqueName = "Cloud.Com-InternalLBVm";
+public interface ServiceOffering extends InfrastructureEntity, InternalIdentity, Identity {
+ static final String consoleProxyDefaultOffUniqueName = "Cloud.com-ConsoleProxy";
+ static final String ssvmDefaultOffUniqueName = "Cloud.com-SecondaryStorage";
+ static final String routerDefaultOffUniqueName = "Cloud.Com-SoftwareRouter";
+ static final String elbVmDefaultOffUniqueName = "Cloud.Com-ElasticLBVm";
+ static final String internalLbVmDefaultOffUniqueName = "Cloud.Com-InternalLBVm";
// leaving cloud.com references as these are identifyers and no real world addresses (check against DB)
enum State {
Inactive, Active,
}
- public enum StorageType {
+ enum StorageType {
local, shared
}
- @Override
String getDisplayText();
- @Override
Date getCreated();
- @Override
- String getTags();
-
/**
* @return user readable description
*/
- @Override
String getName();
/**
* @return is this a system service offering
*/
- @Override
boolean isSystemUse();
/**
@@ -105,7 +98,6 @@ public interface ServiceOffering extends DiskOffering, InfrastructureEntity, Int
/**
* @return whether or not the service offering requires local storage
*/
- @Override
boolean isUseLocalStorage();
/**
@@ -121,5 +113,29 @@ public interface ServiceOffering extends DiskOffering, InfrastructureEntity, Int
boolean isDynamic();
+ void setState(DiskOffering.State state);
+
DiskOffering.State getState();
+
+ void setName(String name);
+
+ String getUniqueName();
+
+ void setUniqueName(String uniqueName);
+
+ void setDisplayText(String displayText);
+
+ boolean isCustomized();
+
+ void setCustomized(boolean customized);
+
+ Date getRemoved();
+
+ void setRemoved(Date removed);
+
+ void setSortKey(int key);
+
+ int getSortKey();
+
+ Long getDiskOfferingId();
}
diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index 1e92c3e..bbde834 100755
--- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -508,7 +508,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
@Override
public void allocate(final String vmInstanceName, final VirtualMachineTemplate template, final ServiceOffering serviceOffering,
final LinkedHashMap<? extends Network, List<? extends NicProfile>> networks, final DeploymentPlan plan, final HypervisorType hyperType) throws InsufficientCapacityException {
- allocate(vmInstanceName, template, serviceOffering, new DiskOfferingInfo(serviceOffering), new ArrayList<DiskOfferingInfo>(), networks, plan, hyperType, null, null);
+ DiskOffering diskOffering = _diskOfferingDao.findById(serviceOffering.getId());
+ allocate(vmInstanceName, template, serviceOffering, new DiskOfferingInfo(diskOffering), new ArrayList<DiskOfferingInfo>(), networks, plan, hyperType, null, null);
}
private VirtualMachineGuru getVmGuru(final VirtualMachine vm) {
@@ -3864,6 +3865,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
final ServiceOfferingVO currentServiceOffering = _offeringDao.findByIdIncludingRemoved(vmInstance.getId(), vmInstance.getServiceOfferingId());
+ final DiskOfferingVO currentDiskOffering = _diskOfferingDao.findByIdIncludingRemoved(currentServiceOffering.getDiskOfferingId());
// Check that the service offering being upgraded to has the same Guest IP type as the VM's current service offering
// NOTE: With the new network refactoring in 2.2, we shouldn't need the check for same guest IP type anymore.
@@ -3894,8 +3896,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
// Check that the service offering being upgraded to has all the tags of the current service offering.
- final List<String> currentTags = StringUtils.csvTagsToList(currentServiceOffering.getTags());
- final List<String> newTags = StringUtils.csvTagsToList(newServiceOffering.getTags());
+ final List<String> currentTags = StringUtils.csvTagsToList(currentDiskOffering.getTags());
+ final List<String> newTags = StringUtils.csvTagsToList(currentDiskOffering.getTags());
if (!newTags.containsAll(currentTags)) {
throw new InvalidParameterValueException("Unable to upgrade virtual machine; the current service offering " + " should have tags as subset of " +
"the new service offering tags. Current service offering tags: " + currentTags + "; " + "new service " + "offering tags: " + newTags);
diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java
index c6f8e41..8e1b0fb 100644
--- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java
+++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java
@@ -185,25 +185,25 @@ public class CloudOrchestrator implements OrchestrationService {
ServiceOfferingVO computeOffering = _serviceOfferingDao.findById(vm.getId(), vm.getServiceOfferingId());
- rootDiskOfferingInfo.setDiskOffering(computeOffering);
- rootDiskOfferingInfo.setSize(rootDiskSize);
-
- if (computeOffering.isCustomizedIops() != null && computeOffering.isCustomizedIops()) {
- Map<String, String> userVmDetails = _userVmDetailsDao.listDetailsKeyPairs(vm.getId());
+ Long diskOfferingId = computeOffering.getDiskOfferingId();
+ if (diskOfferingId != null) {
+ DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId);
+ if (diskOffering == null) {
+ throw new InvalidParameterValueException("Unable to find disk offering " + diskOfferingId);
+ }
+ rootDiskOfferingInfo.setDiskOffering(diskOffering);
+ rootDiskOfferingInfo.setSize(rootDiskSize);
- if (userVmDetails != null) {
- String minIops = userVmDetails.get("minIops");
- String maxIops = userVmDetails.get("maxIops");
+ if (diskOffering.isCustomizedIops() != null && diskOffering.isCustomizedIops()) {
+ Map<String, String> userVmDetails = _userVmDetailsDao.listDetailsKeyPairs(vm.getId());
- rootDiskOfferingInfo.setMinIops(minIops != null && minIops.trim().length() > 0 ? Long.parseLong(minIops) : null);
- rootDiskOfferingInfo.setMaxIops(maxIops != null && maxIops.trim().length() > 0 ? Long.parseLong(maxIops) : null);
- }
- }
+ if (userVmDetails != null) {
+ String minIops = userVmDetails.get("minIops");
+ String maxIops = userVmDetails.get("maxIops");
- if (vm.getDiskOfferingId() != null) {
- DiskOfferingVO diskOffering = _diskOfferingDao.findById(vm.getDiskOfferingId());
- if (diskOffering == null) {
- throw new InvalidParameterValueException("Unable to find disk offering " + vm.getDiskOfferingId());
+ rootDiskOfferingInfo.setMinIops(minIops != null && minIops.trim().length() > 0 ? Long.parseLong(minIops) : null);
+ rootDiskOfferingInfo.setMaxIops(maxIops != null && maxIops.trim().length() > 0 ? Long.parseLong(maxIops) : null);
+ }
}
Long size = null;
if (diskOffering.getDiskSize() == 0) {
@@ -238,7 +238,7 @@ public class CloudOrchestrator implements OrchestrationService {
for (Entry<Long, DiskOffering> datadiskTemplateToDiskOffering : dataDiskTemplateToDiskOfferingMap.entrySet()) {
DiskOffering diskOffering = datadiskTemplateToDiskOffering.getValue();
if (diskOffering == null) {
- throw new InvalidParameterValueException("Unable to find disk offering " + vm.getDiskOfferingId());
+ throw new InvalidParameterValueException("Unable to find disk offering " + diskOfferingId);
}
if (diskOffering.getDiskSize() == 0) { // Custom disk offering is not supported for volumes created from datadisk templates
throw new InvalidParameterValueException("Disk offering " + diskOffering + " requires size parameter.");
@@ -268,9 +268,7 @@ public class CloudOrchestrator implements OrchestrationService {
DiskOfferingInfo rootDiskOfferingInfo = new DiskOfferingInfo();
- rootDiskOfferingInfo.setDiskOffering(computeOffering);
-
- Long diskOfferingId = vm.getDiskOfferingId();
+ Long diskOfferingId = computeOffering.getDiskOfferingId();
if (diskOfferingId == null) {
throw new InvalidParameterValueException("Installing from ISO requires a disk offering to be specified for the root disk.");
}
@@ -278,6 +276,8 @@ public class CloudOrchestrator implements OrchestrationService {
if (diskOffering == null) {
throw new InvalidParameterValueException("Unable to find disk offering " + diskOfferingId);
}
+ rootDiskOfferingInfo.setDiskOffering(diskOffering);
+
Long size = null;
if (diskOffering.getDiskSize() == 0) {
size = diskSize;
diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index 757fd2d..896a013 100644
--- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -583,7 +583,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
DiskProfile dskCh = null;
if (volume.getVolumeType() == Type.ROOT && Storage.ImageFormat.ISO != template.getFormat()) {
- dskCh = createDiskCharacteristics(volume, template, dc, offering);
+ dskCh = createDiskCharacteristics(volume, template, dc, diskOffering);
storageMgr.setDiskProfileThrottling(dskCh, offering, diskOffering);
} else {
dskCh = createDiskCharacteristics(volume, template, dc, diskOffering);
diff --git a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java
index d2d5fc8..f1cc7d7 100644
--- a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java
+++ b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java
@@ -94,6 +94,9 @@ public class VirtualMachineManagerImplTest {
@Mock
private ServiceOfferingVO serviceOfferingMock;
+ @Mock
+ private DiskOfferingVO diskOfferingMock;
+
private long hostMockId = 1L;
@Mock
private HostVO hostMock;
@@ -217,14 +220,15 @@ public class VirtualMachineManagerImplTest {
when(serviceOfferingMock.getId()).thenReturn(2l);
ServiceOfferingVO mockCurrentServiceOffering = mock(ServiceOfferingVO.class);
+ DiskOfferingVO mockCurrentDiskOffering = mock(DiskOfferingVO.class);
when(serviceOfferingDaoMock.findByIdIncludingRemoved(anyLong(), anyLong())).thenReturn(mockCurrentServiceOffering);
when(mockCurrentServiceOffering.isUseLocalStorage()).thenReturn(true);
when(serviceOfferingMock.isUseLocalStorage()).thenReturn(true);
when(mockCurrentServiceOffering.isSystemUse()).thenReturn(true);
when(serviceOfferingMock.isSystemUse()).thenReturn(true);
- when(mockCurrentServiceOffering.getTags()).thenReturn("x,y");
- when(serviceOfferingMock.getTags()).thenReturn("z,x,y");
+ when(mockCurrentDiskOffering.getTags()).thenReturn("x,y");
+ when(diskOfferingMock.getTags()).thenReturn("z,x,y");
virtualMachineManagerImpl.checkIfCanUpgrade(vmInstanceMock, serviceOfferingMock);
}
diff --git a/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
index a818230..95dbce5 100644
--- a/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
@@ -16,23 +16,65 @@
// under the License.
package com.cloud.service;
+import java.util.Date;
import java.util.Map;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
-
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Enumerated;
+import javax.persistence.EnumType;
+
+import com.cloud.offering.DiskOffering;
import com.cloud.offering.ServiceOffering;
-import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.Storage.ProvisioningType;
+import com.cloud.utils.db.GenericDao;
import com.cloud.vm.VirtualMachine;
@Entity
@Table(name = "service_offering")
-@PrimaryKeyJoinColumn(name = "id")
-public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering {
+public class ServiceOfferingVO implements ServiceOffering {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ long id;
+
+ @Column(name = "uuid")
+ private String uuid;
+
+ @Column(name = "name")
+ private String name = null;
+
+ @Column(name = "unique_name")
+ private String uniqueName;
+
+ @Column(name = "display_text", length = 4096)
+ private String displayText = null;
+
+ @Column(name = "customized")
+ private boolean customized;
+
+ @Column(name = GenericDao.REMOVED_COLUMN)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date removed;
+
+ @Column(name = GenericDao.CREATED_COLUMN)
+ private Date created;
+
+ @Enumerated(EnumType.STRING)
+ @Column(name = "state")
+ DiskOffering.State state = DiskOffering.State.Active;
+
+ @Column(name = "disk_offering_id")
+ private Long diskOfferingId;
@Column(name = "cpu")
private Integer cpu;
@@ -73,6 +115,9 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Column(name = "deployment_planner")
private String deploymentPlanner = null;
+ @Column(name = "system_use")
+ private boolean systemUse;
+
// This is a delayed load value. If the value is null,
// then this field has not been loaded yet.
// Call service offering dao to load it.
@@ -88,9 +133,10 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
super();
}
+ //FR123 split the usage of below constructor to create service offering vo and disk offering vo in different daoImpl.java files. Currently it is only under serviceofferingdaoimpl.java
public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText,
ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, boolean defaultUse) {
- super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
+ //super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
this.cpu = cpu;
this.ramSize = ramSize;
this.speed = speed;
@@ -101,11 +147,14 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
volatileVm = false;
this.defaultUse = defaultUse;
this.vmType = vmType == null ? null : vmType.toString().toLowerCase();
+ uuid = UUID.randomUUID().toString();
+ this.systemUse = systemUse;
}
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, boolean limitCpuUse,
- boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType) {
- super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
+ public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA,
+ boolean limitResourceUse, boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse,
+ VirtualMachine.Type vmType, String hostTag, String deploymentPlanner) {
+ //super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
this.cpu = cpu;
this.ramSize = ramSize;
this.speed = speed;
@@ -115,68 +164,14 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
this.limitCpuUse = limitCpuUse;
this.volatileVm = volatileVm;
this.vmType = vmType == null ? null : vmType.toString().toLowerCase();
- }
-
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA,
- boolean limitResourceUse, boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse,
- VirtualMachine.Type vmType, String hostTag) {
- this(name,
- cpu,
- ramSize,
- speed,
- rateMbps,
- multicastRateMbps,
- offerHA,
- limitResourceUse,
- volatileVm,
- displayText,
- provisioningType,
- useLocalStorage,
- recreatable,
- tags,
- systemUse,
- vmType
- );
this.hostTag = hostTag;
- }
-
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA,
- boolean limitResourceUse, boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse,
- VirtualMachine.Type vmType, String hostTag, String deploymentPlanner) {
- this(name,
- cpu,
- ramSize,
- speed,
- rateMbps,
- multicastRateMbps,
- offerHA,
- limitResourceUse,
- volatileVm,
- displayText,
- provisioningType,
- useLocalStorage,
- recreatable,
- tags,
- systemUse,
- vmType,
- hostTag);
this.deploymentPlanner = deploymentPlanner;
+ uuid = UUID.randomUUID().toString();
+ this.systemUse = systemUse;
}
public ServiceOfferingVO(ServiceOfferingVO offering) {
- super(offering.getId(),
- offering.getName(),
- offering.getDisplayText(),
- offering.getProvisioningType(),
- false,
- offering.getTags(),
- offering.isRecreatable(),
- offering.isUseLocalStorage(),
- offering.isSystemUse(),
- true,
- offering.isCustomizedIops()== null ? false:offering.isCustomizedIops(),
- offering.getMinIops(),
- offering.getMaxIops());
+ diskOfferingId = offering.getDiskOfferingId();
cpu = offering.getCpu();
ramSize = offering.getRamSize();
speed = offering.getSpeed();
@@ -187,6 +182,7 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
volatileVm = offering.isVolatileVm();
hostTag = offering.getHostTag();
vmType = offering.getSystemVmType();
+ systemUse = offering.isSystemUse();
}
@Override
@@ -213,17 +209,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
}
@Override
- @Transient
- public String[] getTagsArray() {
- String tags = getTags();
- if (tags == null || tags.length() == 0) {
- return new String[0];
- }
-
- return tags.split(",");
- }
-
- @Override
public Integer getCpu() {
return cpu;
}
@@ -332,4 +317,101 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
public boolean isCustomCpuSpeedSupported() {
return isCustomized() && getDetail("minCPU") != null;
}
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public boolean isSystemUse() {
+ return systemUse;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getUniqueName() {
+ return uniqueName;
+ }
+
+ @Override
+ public void setUniqueName(String uniqueName) {
+ this.uniqueName = uniqueName;
+ }
+
+ @Override
+ public String getDisplayText() {
+ return displayText;
+ }
+
+ @Override
+ public void setDisplayText(String displayText) {
+ this.displayText = displayText;
+ }
+
+ @Override
+ public boolean isCustomized() {
+ return customized;
+ }
+
+ @Override
+ public void setCustomized(boolean customized) {
+ this.customized = customized;
+ }
+
+ public void setRemoved(Date removed) {
+ this.removed = removed;
+ }
+
+ @Override
+ public Date getRemoved() {
+ return removed;
+ }
+
+ @Override
+ public Date getCreated() {
+ return created;
+ }
+
+ @Override
+ public DiskOffering.State getState() {
+ return state;
+ }
+
+ @Override
+ public void setState(DiskOffering.State state) {
+ this.state = state;
+ }
+
+ @Override
+ public Long getDiskOfferingId() {
+ return diskOfferingId;
+ }
+
+ public void setDiskOfferingId(Long diskOfferingId) {
+ this.diskOfferingId = diskOfferingId;
+ }
+
+ @Override
+ public String getUuid() {
+ return uuid;
+ }
+
+ @Override
+ public boolean isUseLocalStorage() {
+ return false;
+ }
}
diff --git a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
index 1440051..cea69a8 100644
--- a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
@@ -24,6 +24,8 @@ import java.util.Map;
import javax.inject.Inject;
import javax.persistence.EntityExistsException;
+import com.cloud.storage.DiskOfferingVO;
+import com.cloud.storage.dao.DiskOfferingDao;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -48,6 +50,8 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
protected ServiceOfferingDetailsDao detailsDao;
@Inject
protected UserVmDetailsDao userVmDetailsDao;
+ @Inject
+ private DiskOfferingDao diskOfferingDao;
protected final SearchBuilder<ServiceOfferingVO> UniqueNameSearch;
protected final SearchBuilder<ServiceOfferingVO> ServiceOfferingsByKeywordSearch;
@@ -58,7 +62,7 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
UniqueNameSearch = createSearchBuilder();
UniqueNameSearch.and("name", UniqueNameSearch.entity().getUniqueName(), SearchCriteria.Op.EQ);
- UniqueNameSearch.and("system", UniqueNameSearch.entity().isSystemUse(), SearchCriteria.Op.EQ);
+ UniqueNameSearch.and("system_use", UniqueNameSearch.entity().isSystemUse(), SearchCriteria.Op.EQ);
UniqueNameSearch.done();
ServiceOfferingsByKeywordSearch = createSearchBuilder();
@@ -77,7 +81,7 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
public ServiceOfferingVO findByName(String name) {
SearchCriteria<ServiceOfferingVO> sc = UniqueNameSearch.create();
sc.setParameters("name", name);
- sc.setParameters("system", true);
+ sc.setParameters("system_use", true);
List<ServiceOfferingVO> vos = search(sc, null, null, false);
if (vos.size() == 0) {
return null;
@@ -214,10 +218,16 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
public List<ServiceOfferingVO> createSystemServiceOfferings(String name, String uniqueName, int cpuCount, int ramSize, int cpuSpeed,
Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText, ProvisioningType provisioningType,
boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, boolean defaultUse) {
+ DiskOfferingVO diskOfferingVO = new DiskOfferingVO(name, displayText, provisioningType, false, tags, recreatable, false, systemUse, true);
+ diskOfferingVO.setUniqueName(uniqueName);
+ diskOfferingVO = diskOfferingDao.persistDefaultDiskOffering(diskOfferingVO);
+
List<ServiceOfferingVO> list = new ArrayList<ServiceOfferingVO>();
ServiceOfferingVO offering = new ServiceOfferingVO(name, cpuCount, ramSize, cpuSpeed, rateMbps, multicastRateMbps, offerHA, displayText,
provisioningType, false, recreatable, tags, systemUse, vmType, defaultUse);
+ // super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
offering.setUniqueName(uniqueName);
+ offering.setDiskOfferingId(diskOfferingVO.getId());
offering = persistSystemServiceOffering(offering);
if (offering != null) {
list.add(offering);
@@ -228,9 +238,14 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
useLocal = false;
}
+ diskOfferingVO = new DiskOfferingVO(name + (useLocal ? " - Local Storage" : ""), displayText, provisioningType, false, tags, recreatable, useLocal, systemUse, true);
+ diskOfferingVO.setUniqueName(uniqueName + (useLocal ? "-Local" : ""));
+ diskOfferingVO = diskOfferingDao.persistDefaultDiskOffering(diskOfferingVO);
+
offering = new ServiceOfferingVO(name + (useLocal ? " - Local Storage" : ""), cpuCount, ramSize, cpuSpeed, rateMbps, multicastRateMbps, offerHA, displayText,
provisioningType, useLocal, recreatable, tags, systemUse, vmType, defaultUse);
offering.setUniqueName(uniqueName + (useLocal ? "-Local" : ""));
+ offering.setDiskOfferingId(diskOfferingVO.getId());
offering = persistSystemServiceOffering(offering);
if (offering != null) {
list.add(offering);
diff --git a/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
index 98133ab..29b0b60 100644
--- a/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
@@ -150,6 +150,9 @@ public class DiskOfferingVO implements DiskOffering {
@Column(name = "hv_ss_reserve")
Integer hypervisorSnapshotReserve;
+ @Column(name = "disk_size_strictness")
+ boolean diskSizeStrictness = false;
+
public DiskOfferingVO() {
uuid = UUID.randomUUID().toString();
}
@@ -582,4 +585,12 @@ public class DiskOfferingVO implements DiskOffering {
public boolean isShared() {
return !useLocalStorage;
}
+
+ public boolean getDiskSizeStrictness() {
+ return diskSizeStrictness;
+ }
+
+ public void setDiskSizeStrictness(boolean diskSizeStrictness) {
+ this.diskSizeStrictness = diskSizeStrictness;
+ }
}
diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDao.java
index 3305752..481d00c 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDao.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDao.java
@@ -30,7 +30,7 @@ public interface DiskOfferingDao extends GenericDao<DiskOfferingVO, Long> {
DiskOfferingVO findByUniqueName(String uniqueName);
- DiskOfferingVO persistDeafultDiskOffering(DiskOfferingVO offering);
+ DiskOfferingVO persistDefaultDiskOffering(DiskOfferingVO offering);
List<DiskOfferingVO> listAllBySizeAndProvisioningType(long size, Storage.ProvisioningType provisioningType);
diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
index 06ee258..d81635c 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
@@ -36,7 +36,6 @@ import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.exception.CloudRuntimeException;
@@ -69,7 +68,7 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
UniqueNameSearch.and("name", UniqueNameSearch.entity().getUniqueName(), SearchCriteria.Op.EQ);
UniqueNameSearch.done();
- _computeOnlyAttr = _allAttributes.get("compute_only");
+ _computeOnlyAttr = _allAttributes.get("computeOnly");
}
@Override
@@ -81,13 +80,13 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
@Override
public List<DiskOfferingVO> searchIncludingRemoved(SearchCriteria<DiskOfferingVO> sc, final Filter filter, final Boolean lock, final boolean cache) {
- sc.addAnd(_computeOnlyAttr, Op.EQ, false);
+ //sc.addAnd(_computeOnlyAttr, Op.EQ, false);
return super.searchIncludingRemoved(sc, filter, lock, cache);
}
@Override
public <K> List<K> customSearchIncludingRemoved(SearchCriteria<K> sc, final Filter filter) {
- sc.addAnd(_computeOnlyAttr, Op.EQ, false);
+ //sc.addAnd(_computeOnlyAttr, Op.EQ, false);
return super.customSearchIncludingRemoved(sc, filter);
}
@@ -128,7 +127,7 @@ public class DiskOfferingDaoImpl extends GenericDaoBase<DiskOfferingVO, Long> im
}
@Override
- public DiskOfferingVO persistDeafultDiskOffering(DiskOfferingVO offering) {
+ public DiskOfferingVO persistDefaultDiskOffering(DiskOfferingVO offering) {
assert offering.getUniqueName() != null : "unique name shouldn't be null for the disk offering";
DiskOfferingVO vo = findByUniqueName(offering.getUniqueName());
if (vo != null) {
diff --git a/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java b/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java
index e395034..b590329 100644
--- a/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java
+++ b/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java
@@ -70,8 +70,8 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
}
public UserVmVO(long id, String instanceName, String displayName, long templateId, HypervisorType hypervisorType, long guestOsId, boolean haEnabled,
- boolean limitCpuUse, long domainId, long accountId, long userId, long serviceOfferingId, String userData, String name, Long diskOfferingId) {
- super(id, serviceOfferingId, name, instanceName, Type.User, templateId, hypervisorType, guestOsId, domainId, accountId, userId, haEnabled, limitCpuUse, diskOfferingId);
+ boolean limitCpuUse, long domainId, long accountId, long userId, long serviceOfferingId, String userData, String name) {
+ super(id, serviceOfferingId, name, instanceName, Type.User, templateId, hypervisorType, guestOsId, domainId, accountId, userId, haEnabled, limitCpuUse);
this.userData = userData;
this.displayName = displayName;
this.details = new HashMap<String, String>();
diff --git a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
index 5c81e55..926fd86 100644
--- a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
+++ b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
@@ -232,10 +232,9 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, Vi
}
public VMInstanceVO(long id, long serviceOfferingId, String name, String instanceName, Type type, Long vmTemplateId, HypervisorType hypervisorType, long guestOSId,
- long domainId, long accountId, long userId, boolean haEnabled, boolean limitResourceUse, Long diskOfferingId) {
+ long domainId, long accountId, long userId, boolean haEnabled, boolean limitResourceUse) {
this(id, serviceOfferingId, name, instanceName, type, vmTemplateId, hypervisorType, guestOSId, domainId, accountId, userId, haEnabled);
limitCpuUse = limitResourceUse;
- this.diskOfferingId = diskOfferingId;
}
protected VMInstanceVO() {
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
index 6dc62e1..a84b689 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
@@ -29,6 +29,7 @@ ALTER TABLE `cloud`.`service_offering` ADD COLUMN `created` datetime COMMENT 'da
ALTER TABLE `cloud`.`service_offering` ADD COLUMN `removed` datetime COMMENT 'date when service offering was removed';
ALTER TABLE `cloud`.`service_offering` ADD COLUMN `state` CHAR(40) NOT NULL DEFAULT 'Active' COMMENT 'state of service offering either Active or Inactive';
ALTER TABLE `cloud`.`service_offering` ADD COLUMN `disk_offering_id` bigint unsigned;
+ALTER TABLE `cloud`.`service_offering` ADD COLUMN `system_use` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT 'is this offering for system used only';
ALTER TABLE `cloud`.`service_offering` ADD CONSTRAINT `fk_service_offering__disk_offering_id` FOREIGN KEY `fk_service_offering__disk_offering_id`(`disk_offering_id`) REFERENCES `disk_offering`(`id`) ON DELETE CASCADE;
ALTER TABLE `cloud`.`service_offering` ADD COLUMN `disk_offering_strictness` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT 'strict binding with disk offering or not';
diff --git a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
index 0783941..4c1b5ac 100644
--- a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
+++ b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
@@ -16,24 +16,64 @@
//under the License.
package org.apache.cloudstack.quota.vo;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
+import javax.persistence.Id;
+import javax.persistence.GenerationType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.TemporalType;
+import javax.persistence.Temporal;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
import javax.persistence.Transient;
+import com.cloud.offering.DiskOffering;
import com.cloud.offering.ServiceOffering;
-import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.Storage.ProvisioningType;
-import com.cloud.vm.VirtualMachine;
+import com.cloud.utils.db.GenericDao;
@Entity
@Table(name = "service_offering")
-@PrimaryKeyJoinColumn(name = "id")
-public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering {
+public class ServiceOfferingVO implements ServiceOffering {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ long id;
+
+ @Column(name = "uuid")
+ private String uuid;
+
+ @Column(name = "name")
+ private String name = null;
+
+ @Column(name = "unique_name")
+ private String uniqueName;
+
+ @Column(name = "display_text", length = 4096)
+ private String displayText = null;
+
+ @Column(name = "customized")
+ private boolean customized;
+
+ @Column(name = GenericDao.REMOVED_COLUMN)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date removed;
+
+ @Column(name = GenericDao.CREATED_COLUMN)
+ private Date created;
+
+ @Enumerated(EnumType.STRING)
+ @Column(name = "state")
+ DiskOffering.State state = DiskOffering.State.Active;
+
+ @Column(name = "disk_offering_id")
+ private Long diskOfferingId;
+
@Column(name = "cpu")
private Integer cpu;
@@ -83,56 +123,8 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
super();
}
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText,
- ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, boolean defaultUse) {
- super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
- this.cpu = cpu;
- this.ramSize = ramSize;
- this.speed = speed;
- this.rateMbps = rateMbps;
- this.multicastRateMbps = multicastRateMbps;
- this.offerHA = offerHA;
- limitCpuUse = false;
- volatileVm = false;
- this.defaultUse = defaultUse;
- this.vmType = vmType == null ? null : vmType.toString().toLowerCase();
- }
-
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, boolean limitCpuUse,
- boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse,
- VirtualMachine.Type vmType, Long domainId) {
- super(name, displayText, provisioningType, false, tags, recreatable, useLocalStorage, systemUse, true);
- this.cpu = cpu;
- this.ramSize = ramSize;
- this.speed = speed;
- this.rateMbps = rateMbps;
- this.multicastRateMbps = multicastRateMbps;
- this.offerHA = offerHA;
- this.limitCpuUse = limitCpuUse;
- this.volatileVm = volatileVm;
- this.vmType = vmType == null ? null : vmType.toString().toLowerCase();
- }
-
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, boolean limitResourceUse,
- boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse,
- VirtualMachine.Type vmType, Long domainId, String hostTag) {
- this(name, cpu, ramSize, speed, rateMbps, multicastRateMbps, offerHA, limitResourceUse, volatileVm, displayText, provisioningType, useLocalStorage, recreatable, tags,
- systemUse, vmType, domainId);
- this.hostTag = hostTag;
- }
-
- public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, boolean limitResourceUse,
- boolean volatileVm, String displayText, ProvisioningType provisioningType, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse,
- VirtualMachine.Type vmType, Long domainId, String hostTag, String deploymentPlanner) {
- this(name, cpu, ramSize, speed, rateMbps, multicastRateMbps, offerHA, limitResourceUse, volatileVm, displayText, provisioningType, useLocalStorage, recreatable, tags,
- systemUse, vmType, domainId, hostTag);
- this.deploymentPlanner = deploymentPlanner;
- }
-
public ServiceOfferingVO(ServiceOfferingVO offering) {
- super(offering.getId(), offering.getName(), offering.getDisplayText(), offering.getProvisioningType(), false, offering.getTags(), offering.isRecreatable(),
- offering.isUseLocalStorage(), offering.isSystemUse(), true, offering.isCustomizedIops() == null ? false : offering.isCustomizedIops(),
- offering.getMinIops(), offering.getMaxIops());
+ diskOfferingId = offering.getDiskOfferingId();
cpu = offering.getCpu();
ramSize = offering.getRamSize();
speed = offering.getSpeed();
@@ -169,17 +161,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
}
@Override
- @Transient
- public String[] getTagsArray() {
- String tags = getTags();
- if (tags == null || tags.length() == 0) {
- return new String[0];
- }
-
- return tags.split(",");
- }
-
- @Override
public Integer getCpu() {
return cpu;
}
@@ -282,4 +263,101 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
public void setDynamicFlag(boolean isdynamic) {
isDynamic = isdynamic;
}
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public boolean isSystemUse() {
+ return false;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getUniqueName() {
+ return uniqueName;
+ }
+
+ @Override
+ public void setUniqueName(String uniqueName) {
+ this.uniqueName = uniqueName;
+ }
+
+ @Override
+ public String getDisplayText() {
+ return displayText;
+ }
+
+ @Override
+ public void setDisplayText(String displayText) {
+ this.displayText = displayText;
+ }
+
+ @Override
+ public boolean isCustomized() {
+ return customized;
+ }
+
+ @Override
+ public void setCustomized(boolean customized) {
+ this.customized = customized;
+ }
+
+ public void setRemoved(Date removed) {
+ this.removed = removed;
+ }
+
+ @Override
+ public Date getRemoved() {
+ return removed;
+ }
+
+ @Override
+ public Date getCreated() {
+ return created;
+ }
+
+ @Override
+ public DiskOffering.State getState() {
+ return state;
+ }
+
+ @Override
+ public void setState(DiskOffering.State state) {
+ this.state = state;
+ }
+
+ @Override
+ public Long getDiskOfferingId() {
+ return diskOfferingId;
+ }
+
+ public void setDiskOfferingId(Long diskOfferingId) {
+ this.diskOfferingId = diskOfferingId;
+ }
+
+ @Override
+ public String getUuid() {
+ return uuid;
+ }
+
+ @Override
+ public boolean isUseLocalStorage() {
+ return false;
+ }
}
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
index a592126..30afc9a 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
@@ -486,8 +486,14 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru, Co
*/
private ServiceOfferingVO createServiceOfferingForVMImporting(Integer cpus, Integer memory, Integer maxCpuUsage) {
String name = "Imported-" + cpus + "-" + memory;
+
+ DiskOfferingVO diskOfferingVO = new DiskOfferingVO(name, name, Storage.ProvisioningType.THIN, false, null, false, false, false, true);
+ diskOfferingVO = diskOfferingDao.persistDefaultDiskOffering(diskOfferingVO);
+
+
ServiceOfferingVO vo = new ServiceOfferingVO(name, cpus, memory, maxCpuUsage, null, null, false, name, Storage.ProvisioningType.THIN, false, false, null, false, Type.User,
false);
+ vo.setDiskOfferingId(diskOfferingVO.getId());
return serviceOfferingDao.persist(vo);
}
@@ -689,7 +695,7 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru, Co
} else {
long id = userVmDao.getNextInSequence(Long.class, "id");
UserVmVO vmInstanceVO = new UserVmVO(id, vmInternalName, vmInternalName, templateId, HypervisorType.VMware, guestOsId, false, false, domainId, accountId, userId,
- serviceOfferingId, null, vmInternalName, null);
+ serviceOfferingId, null, vmInternalName);
vmInstanceVO.setDataCenterId(zoneId);
return userVmDao.persist(vmInstanceVO);
}
diff --git a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java
index 676afc9..b9a446b 100644
--- a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java
+++ b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java
@@ -23,6 +23,6 @@ import com.cloud.vm.UserVmVO;
public class ServiceVirtualMachine extends UserVmVO {
public ServiceVirtualMachine(long id, String instanceName, String name, long templateId, long serviceOfferingId, HypervisorType hypervisorType, long guestOSId,
long dataCenterId, long domainId, long accountId, long userId, boolean haEnabled) {
- super(id, instanceName, name, templateId, hypervisorType, guestOSId, false, false, domainId, accountId, userId, serviceOfferingId, null, name, null);
+ super(id, instanceName, name, templateId, hypervisorType, guestOSId, false, false, domainId, accountId, userId, serviceOfferingId, null, name);
}
}
diff --git a/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java
index 64a036a..8593300 100644
--- a/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java
+++ b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java
@@ -240,7 +240,7 @@ public class ManagementServerMock {
long id = _userVmDao.getNextInSequence(Long.class, "id");
UserVmVO vm =
new UserVmVO(id, name, name, tmpl.getId(), HypervisorType.XenServer, tmpl.getGuestOSId(), false, false, _zone.getDomainId(), Account.ACCOUNT_ID_SYSTEM,
- 1, small.getId(), null, name, null);
+ 1, small.getId(), null, name);
vm.setState(com.cloud.vm.VirtualMachine.State.Running);
vm.setHostId(_hostId);
vm.setDataCenterId(network.getDataCenterId());
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index c3bcc1d..93e2a01 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -211,10 +211,12 @@ import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.StoragePoolTagVO;
+import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.Volume;
import com.cloud.storage.dao.StoragePoolTagsDao;
import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.tags.ResourceTagVO;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.template.VirtualMachineTemplate.State;
@@ -353,6 +355,9 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
private ServiceOfferingDao _srvOfferingDao;
@Inject
+ private DiskOfferingDao _diskOfferingDao;
+
+ @Inject
private DataCenterJoinDao _dcJoinDao;
@Inject
@@ -2880,7 +2885,8 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
if (currentVmOffering == null) {
return offerings;
}
- List<String> currentTagsList = StringUtils.csvTagsToList(currentVmOffering.getTags());
+ DiskOfferingVO diskOfferingVO = _diskOfferingDao.findById(currentVmOffering.getDiskOfferingId());
+ List<String> currentTagsList = StringUtils.csvTagsToList(diskOfferingVO.getTags());
// New service offering should have all the tags of the current service offering.
List<ServiceOfferingJoinVO> filteredOfferings = new ArrayList<>();
diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index f5de35a..6069e53 100755
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -2522,7 +2522,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
tags = StringUtils.cleanupTags(tags);
- ServiceOfferingVO offering = new ServiceOfferingVO(name, cpu, ramSize, speed, networkRate, null, offerHA,
+ DiskOfferingVO diskOffering = new DiskOfferingVO(name, displayText, typedProvisioningType, false, tags, false, localStorageRequired, isSystem, true);
+
+ ServiceOfferingVO serviceOffering = new ServiceOfferingVO(name, cpu, ramSize, speed, networkRate, null, offerHA,
limitResourceUse, volatileVm, displayText, typedProvisioningType, localStorageRequired, false, tags, isSystem, vmType,
hostTag, deploymentPlanner);
@@ -2552,25 +2554,25 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
throw new InvalidParameterValueException(String.format("The Root disk size is of %s GB but it must be greater than 0.", rootDiskSizeInGiB));
} else if (rootDiskSizeInGiB != null) {
long rootDiskSizeInBytes = rootDiskSizeInGiB * GiB_TO_BYTES;
- offering.setDiskSize(rootDiskSizeInBytes);
+ diskOffering.setDiskSize(rootDiskSizeInBytes);
}
- offering.setCustomizedIops(isCustomizedIops);
- offering.setMinIops(minIops);
- offering.setMaxIops(maxIops);
+ diskOffering.setCustomizedIops(isCustomizedIops);
+ diskOffering.setMinIops(minIops);
+ diskOffering.setMaxIops(maxIops);
- setBytesRate(offering, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength);
- setIopsRate(offering, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength);
+ setBytesRate(diskOffering, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength);
+ setIopsRate(diskOffering, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength);
if(cacheMode != null) {
- offering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
+ diskOffering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
}
if (hypervisorSnapshotReserve != null && hypervisorSnapshotReserve < 0) {
throw new InvalidParameterValueException("If provided, Hypervisor Snapshot Reserve must be greater than or equal to 0.");
}
- offering.setHypervisorSnapshotReserve(hypervisorSnapshotReserve);
+ diskOffering.setHypervisorSnapshotReserve(hypervisorSnapshotReserve);
List<ServiceOfferingDetailsVO> detailsVO = new ArrayList<ServiceOfferingDetailsVO>();
if (details != null) {
@@ -2605,46 +2607,51 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
// Add in disk offering details
continue;
}
- detailsVO.add(new ServiceOfferingDetailsVO(offering.getId(), detailEntry.getKey(), detailEntryValue, true));
+ detailsVO.add(new ServiceOfferingDetailsVO(serviceOffering.getId(), detailEntry.getKey(), detailEntryValue, true));
}
}
if (storagePolicyID != null) {
- detailsVO.add(new ServiceOfferingDetailsVO(offering.getId(), ApiConstants.STORAGE_POLICY, String.valueOf(storagePolicyID), false));
+ detailsVO.add(new ServiceOfferingDetailsVO(serviceOffering.getId(), ApiConstants.STORAGE_POLICY, String.valueOf(storagePolicyID), false));
}
- if ((offering = _serviceOfferingDao.persist(offering)) != null) {
- for (Long domainId : filteredDomainIds) {
- detailsVO.add(new ServiceOfferingDetailsVO(offering.getId(), ApiConstants.DOMAIN_ID, String.valueOf(domainId), false));
- }
- if (CollectionUtils.isNotEmpty(zoneIds)) {
- for (Long zoneId : zoneIds) {
- detailsVO.add(new ServiceOfferingDetailsVO(offering.getId(), ApiConstants.ZONE_ID, String.valueOf(zoneId), false));
- }
- }
- if (!detailsVO.isEmpty()) {
- for (ServiceOfferingDetailsVO detail : detailsVO) {
- detail.setResourceId(offering.getId());
- }
- _serviceOfferingDetailsDao.saveDetails(detailsVO);
- }
-
+ if ((diskOffering = _diskOfferingDao.persist(diskOffering)) != null) {
+ serviceOffering.setDiskOfferingId(diskOffering.getId());
if (details != null && !details.isEmpty()) {
List<DiskOfferingDetailVO> diskDetailsVO = new ArrayList<DiskOfferingDetailVO>();
// Support disk offering details for below parameters
if (details.containsKey(Volume.BANDWIDTH_LIMIT_IN_MBPS)) {
- diskDetailsVO.add(new DiskOfferingDetailVO(offering.getId(), Volume.BANDWIDTH_LIMIT_IN_MBPS, details.get(Volume.BANDWIDTH_LIMIT_IN_MBPS), false));
+ diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), Volume.BANDWIDTH_LIMIT_IN_MBPS, details.get(Volume.BANDWIDTH_LIMIT_IN_MBPS), false));
}
if (details.containsKey(Volume.IOPS_LIMIT)) {
- diskDetailsVO.add(new DiskOfferingDetailVO(offering.getId(), Volume.IOPS_LIMIT, details.get(Volume.IOPS_LIMIT), false));
+ diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), Volume.IOPS_LIMIT, details.get(Volume.IOPS_LIMIT), false));
}
if (!diskDetailsVO.isEmpty()) {
diskOfferingDetailsDao.saveDetails(diskDetailsVO);
}
}
+ } else {
+ return null;
+ }
- CallContext.current().setEventDetails("Service offering id=" + offering.getId());
- return offering;
+ if ((serviceOffering = _serviceOfferingDao.persist(serviceOffering)) != null) {
+ for (Long domainId : filteredDomainIds) {
+ detailsVO.add(new ServiceOfferingDetailsVO(serviceOffering.getId(), ApiConstants.DOMAIN_ID, String.valueOf(domainId), false));
+ }
+ if (CollectionUtils.isNotEmpty(zoneIds)) {
+ for (Long zoneId : zoneIds) {
+ detailsVO.add(new ServiceOfferingDetailsVO(serviceOffering.getId(), ApiConstants.ZONE_ID, String.valueOf(zoneId), false));
+ }
+ }
+ if (!detailsVO.isEmpty()) {
+ for (ServiceOfferingDetailsVO detail : detailsVO) {
+ detail.setResourceId(serviceOffering.getId());
+ }
+ _serviceOfferingDetailsDao.saveDetails(detailsVO);
+ }
+
+ CallContext.current().setEventDetails("Service offering id=" + serviceOffering.getId());
+ return serviceOffering;
} else {
return null;
}
diff --git a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index fed29aa..2515525 100644
--- a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -17,7 +17,6 @@
package com.cloud.deploy;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
@@ -103,7 +102,6 @@ import com.cloud.service.dao.ServiceOfferingDetailsDao;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.GuestOSVO;
import com.cloud.storage.ScopeType;
-import com.cloud.storage.Storage;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolHostVO;
@@ -1557,9 +1555,10 @@ StateListener<State, VirtualMachine.Event, VirtualMachine> {
DiskOfferingVO diskOffering = _diskOfferingDao.findById(toBeCreated.getDiskOfferingId());
- if (vmProfile.getTemplate().getFormat() == Storage.ImageFormat.ISO && vmProfile.getServiceOffering().getTagsArray().length != 0) {
- diskOffering.setTagsArray(Arrays.asList(vmProfile.getServiceOffering().getTagsArray()));
- }
+ //FR123 check how is it different for service offering getTagsArray and disk offering's
+ //if (vmProfile.getTemplate().getFormat() == Storage.ImageFormat.ISO && vmProfile.getServiceOffering().getTagsArray().length != 0) {
+ // diskOffering.setTagsArray(Arrays.asList(vmProfile.getServiceOffering().getTagsArray()));
+ //}
DiskProfile diskProfile = new DiskProfile(toBeCreated, diskOffering, vmProfile.getHypervisorType());
boolean useLocalStorage = false;
diff --git a/server/src/main/java/com/cloud/network/security/SecurityManagerMBeanImpl.java b/server/src/main/java/com/cloud/network/security/SecurityManagerMBeanImpl.java
index 7b768ab..307a44c 100644
--- a/server/src/main/java/com/cloud/network/security/SecurityManagerMBeanImpl.java
+++ b/server/src/main/java/com/cloud/network/security/SecurityManagerMBeanImpl.java
@@ -128,7 +128,7 @@ public class SecurityManagerMBeanImpl extends StandardMBean implements SecurityG
@Override
public void simulateVmStart(Long vmId) {
//all we need is the vmId
- VMInstanceVO vm = new VMInstanceVO(vmId, 5, "foo", "foo", Type.User, null, HypervisorType.Any, 8, 1, 1, 1, false, false, null);
+ VMInstanceVO vm = new VMInstanceVO(vmId, 5, "foo", "foo", Type.User, null, HypervisorType.Any, 8, 1, 1, 1, false, false);
_sgMgr.handleVmStarted(vm);
}
diff --git a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
index 1d5b582..bfd50a2 100644
--- a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
@@ -926,16 +926,21 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
newDiskOffering.setUniqueName("Cloud.Com-" + name);
// leaving the above reference to cloud.com in as it is an identifyer and has no real world relevance
newDiskOffering.setSystemUse(isSystemUse);
- newDiskOffering = _diskOfferingDao.persistDeafultDiskOffering(newDiskOffering);
+ newDiskOffering = _diskOfferingDao.persistDefaultDiskOffering(newDiskOffering);
return newDiskOffering;
}
private ServiceOfferingVO createServiceOffering(long userId, String name, int cpu, int ramSize, int speed, String displayText,
ProvisioningType provisioningType, boolean localStorageRequired, boolean offerHA, String tags) {
tags = cleanupTags(tags);
+ DiskOfferingVO diskOfferingVO = new DiskOfferingVO(name, displayText, provisioningType, false, tags, false, false, false, true);
+ diskOfferingVO.setUniqueName("Cloud.Com-" + name);
+ diskOfferingVO = _diskOfferingDao.persistDefaultDiskOffering(diskOfferingVO);
+
ServiceOfferingVO offering =
new ServiceOfferingVO(name, cpu, ramSize, speed, null, null, offerHA, displayText, provisioningType, localStorageRequired, false, tags, false, null, false);
offering.setUniqueName("Cloud.Com-" + name);
+ offering.setDiskOfferingId(diskOfferingVO.getId());
// leaving the above reference to cloud.com in as it is an identifyer and has no real world relevance
offering = _serviceOfferingDao.persistSystemServiceOffering(offering);
return offering;
diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
index 62119ff..80d72dd 100644
--- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
@@ -2788,8 +2788,8 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
// get bytesReadRate from service_offering, disk_offering and vm.disk.throttling.bytes_read_rate
@Override
public Long getDiskBytesReadRate(final ServiceOffering offering, final DiskOffering diskOffering) {
- if ((offering != null) && (offering.getBytesReadRate() != null) && (offering.getBytesReadRate() > 0)) {
- return offering.getBytesReadRate();
+ if ((diskOffering != null) && (diskOffering.getBytesReadRate() != null) && (diskOffering.getBytesReadRate() > 0)) {
+ return diskOffering.getBytesReadRate();
} else if ((diskOffering != null) && (diskOffering.getBytesReadRate() != null) && (diskOffering.getBytesReadRate() > 0)) {
return diskOffering.getBytesReadRate();
} else {
@@ -2804,9 +2804,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
// get bytesWriteRate from service_offering, disk_offering and vm.disk.throttling.bytes_write_rate
@Override
public Long getDiskBytesWriteRate(final ServiceOffering offering, final DiskOffering diskOffering) {
- if ((offering != null) && (offering.getBytesWriteRate() != null) && (offering.getBytesWriteRate() > 0)) {
- return offering.getBytesWriteRate();
- } else if ((diskOffering != null) && (diskOffering.getBytesWriteRate() != null) && (diskOffering.getBytesWriteRate() > 0)) {
+ if ((diskOffering != null) && (diskOffering.getBytesWriteRate() != null) && (diskOffering.getBytesWriteRate() > 0)) {
return diskOffering.getBytesWriteRate();
} else {
Long bytesWriteRate = Long.parseLong(_configDao.getValue(Config.VmDiskThrottlingBytesWriteRate.key()));
@@ -2820,9 +2818,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
// get iopsReadRate from service_offering, disk_offering and vm.disk.throttling.iops_read_rate
@Override
public Long getDiskIopsReadRate(final ServiceOffering offering, final DiskOffering diskOffering) {
- if ((offering != null) && (offering.getIopsReadRate() != null) && (offering.getIopsReadRate() > 0)) {
- return offering.getIopsReadRate();
- } else if ((diskOffering != null) && (diskOffering.getIopsReadRate() != null) && (diskOffering.getIopsReadRate() > 0)) {
+ if ((diskOffering != null) && (diskOffering.getIopsReadRate() != null) && (diskOffering.getIopsReadRate() > 0)) {
return diskOffering.getIopsReadRate();
} else {
Long iopsReadRate = Long.parseLong(_configDao.getValue(Config.VmDiskThrottlingIopsReadRate.key()));
@@ -2836,9 +2832,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
// get iopsWriteRate from service_offering, disk_offering and vm.disk.throttling.iops_write_rate
@Override
public Long getDiskIopsWriteRate(final ServiceOffering offering, final DiskOffering diskOffering) {
- if ((offering != null) && (offering.getIopsWriteRate() != null) && (offering.getIopsWriteRate() > 0)) {
- return offering.getIopsWriteRate();
- } else if ((diskOffering != null) && (diskOffering.getIopsWriteRate() != null) && (diskOffering.getIopsWriteRate() > 0)) {
+ if ((diskOffering != null) && (diskOffering.getIopsWriteRate() != null) && (diskOffering.getIopsWriteRate() > 0)) {
return diskOffering.getIopsWriteRate();
} else {
Long iopsWriteRate = Long.parseLong(_configDao.getValue(Config.VmDiskThrottlingIopsWriteRate.key()));
diff --git a/server/src/main/java/com/cloud/test/DatabaseConfig.java b/server/src/main/java/com/cloud/test/DatabaseConfig.java
index 4e0cbac..3d2e726 100644
--- a/server/src/main/java/com/cloud/test/DatabaseConfig.java
+++ b/server/src/main/java/com/cloud/test/DatabaseConfig.java
@@ -932,6 +932,7 @@ public class DatabaseConfig {
} else {
useLocalStorage = false;
}
+ DiskOfferingVO diskOfferingVO = new DiskOfferingVO(name, displayText, provisioningType, false, null, false, false, false, true);
ServiceOfferingVO serviceOffering =
new ServiceOfferingVO(name, cpu, ramSize, speed, null, null, ha, displayText,
@@ -939,23 +940,30 @@ public class DatabaseConfig {
Long bytesReadRate = Long.parseLong(_currentObjectParams.get("bytesReadRate"));
if ((bytesReadRate != null) && (bytesReadRate > 0))
- serviceOffering.setBytesReadRate(bytesReadRate);
+ diskOfferingVO.setBytesReadRate(bytesReadRate);
Long bytesWriteRate = Long.parseLong(_currentObjectParams.get("bytesWriteRate"));
if ((bytesWriteRate != null) && (bytesWriteRate > 0))
- serviceOffering.setBytesWriteRate(bytesWriteRate);
+ diskOfferingVO.setBytesWriteRate(bytesWriteRate);
Long iopsReadRate = Long.parseLong(_currentObjectParams.get("iopsReadRate"));
if ((iopsReadRate != null) && (iopsReadRate > 0))
- serviceOffering.setIopsReadRate(iopsReadRate);
+ diskOfferingVO.setIopsReadRate(iopsReadRate);
Long iopsWriteRate = Long.parseLong(_currentObjectParams.get("iopsWriteRate"));
if ((iopsWriteRate != null) && (iopsWriteRate > 0))
- serviceOffering.setIopsWriteRate(iopsWriteRate);
+ diskOfferingVO.setIopsWriteRate(iopsWriteRate);
- ServiceOfferingDaoImpl dao = ComponentContext.inject(ServiceOfferingDaoImpl.class);
+ DiskOfferingDaoImpl DiskOfferinDao = ComponentContext.inject(DiskOfferingDaoImpl.class);
try {
- dao.persist(serviceOffering);
+ DiskOfferinDao.persist(diskOfferingVO);
} catch (Exception e) {
- s_logger.error("error creating service offering", e);
+ s_logger.error("error creating disk offering", e);
+ }
+ serviceOffering.setDiskOfferingId(diskOfferingVO.getId());
+ ServiceOfferingDaoImpl serviceOfferingDao = ComponentContext.inject(ServiceOfferingDaoImpl.class);
+ try {
+ serviceOfferingDao.persist(serviceOffering);
+ } catch (Exception e) {
+ s_logger.error("error creating service offering", e);
}
/*
String insertSql = "INSERT INTO `cloud`.`service_offering` (id, name, cpu, ram_size, speed, nw_rate, mc_rate, created, ha_enabled, mirrored, display_text, guest_ip_type, use_local_storage) " +
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index b188fac..af4102e 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -1220,7 +1220,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
ServiceOffering newSvcOffering = _offeringDao.findById(svcOffId);
_accountMgr.checkAccess(owner, newSvcOffering, _dcDao.findById(vmInstance.getDataCenterId()));
- DiskOfferingVO newRootDiskOffering = _diskOfferingDao.findById(newServiceOffering.getId());
+ DiskOfferingVO newRootDiskOffering = _diskOfferingDao.findById(newServiceOffering.getDiskOfferingId());
List<VolumeVO> vols = _volsDao.findReadyRootVolumesByInstance(vmInstance.getId());
@@ -1293,7 +1293,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
private void resizeRootVolumeOfVmWithNewOffering(VMInstanceVO vmInstance, ServiceOfferingVO newServiceOffering)
throws ResourceAllocationException {
- DiskOfferingVO newROOTDiskOffering = _diskOfferingDao.findById(newServiceOffering.getId());
+ DiskOfferingVO newROOTDiskOffering = _diskOfferingDao.findById(newServiceOffering.getDiskOfferingId());
List<VolumeVO> vols = _volsDao.findReadyRootVolumesByInstance(vmInstance.getId());
for (final VolumeVO rootVolumeOfVm : vols) {
@@ -3957,7 +3957,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
*/
protected long configureCustomRootDiskSize(Map<String, String> customParameters, VMTemplateVO template, HypervisorType hypervisorType, ServiceOfferingVO serviceOffering) {
verifyIfHypervisorSupportsRootdiskSizeOverride(hypervisorType);
- DiskOfferingVO diskOffering = _diskOfferingDao.findById(serviceOffering.getId());
+ DiskOfferingVO diskOffering = _diskOfferingDao.findById(serviceOffering.getDiskOfferingId());
long rootDiskSizeInBytes = diskOffering.getDiskSize();
if (rootDiskSizeInBytes > 0) { //if the size at DiskOffering is not zero then the Service Offering had it configured, it holds priority over the User custom size
long rootDiskSizeInGiB = rootDiskSizeInBytes / GiB_TO_BYTES;
@@ -4024,6 +4024,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
return _instance + "-" + uuidName;
}
+ // FR123 check where this diskOfferingId is coming from
private UserVmVO commitUserVm(final boolean isImport, final DataCenter zone, final Host host, final Host lastHost, final VirtualMachineTemplate template, final String hostName, final String displayName, final Account owner,
final Long diskOfferingId, final Long diskSize, final String userData, final Account caller, final Boolean isDisplayVm, final String keyboard,
final long accountId, final long userId, final ServiceOffering offering, final boolean isIso, final String sshPublicKey, final LinkedHashMap<String, List<NicProfile>> networkNicMap,
@@ -4034,7 +4035,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
@Override
public UserVmVO doInTransaction(TransactionStatus status) throws InsufficientCapacityException {
UserVmVO vm = new UserVmVO(id, instanceName, displayName, template.getId(), hypervisorType, template.getGuestOSId(), offering.isOfferHA(),
- offering.getLimitCpuUse(), owner.getDomainId(), owner.getId(), userId, offering.getId(), userData, hostName, diskOfferingId);
+ offering.getLimitCpuUse(), owner.getDomainId(), owner.getId(), userId, offering.getId(), userData, hostName);
vm.setUuid(uuidName);
vm.setDynamicallyScalable(template.isDynamicallyScalable());
@@ -4148,7 +4149,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
computeTags.add(offering.getHostTag());
List<String> rootDiskTags = new ArrayList<String>();
- rootDiskTags.add(offering.getTags());
+ DiskOfferingVO diskOfferingVO = _diskOfferingDao.findById(offering.getDiskOfferingId());
+ rootDiskTags.add(diskOfferingVO.getTags());
if (isIso) {
_orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), Long.toString(owner.getAccountId()), vm.getIsoId().toString(), hostName, displayName,
diff --git a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
index 501ca63..fdb366d 100644
--- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
@@ -101,6 +101,7 @@ import com.cloud.serializer.GsonHelper;
import com.cloud.server.ManagementService;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
+import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.GuestOS;
import com.cloud.storage.GuestOSHypervisor;
import com.cloud.storage.StoragePool;
@@ -400,16 +401,6 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
return volumeApiService.doesTargetStorageSupportDiskOffering(pool, diskOffering.getTags());
}
- private boolean storagePoolSupportsServiceOffering(StoragePool pool, ServiceOffering serviceOffering) {
- if (pool == null) {
- return false;
- }
- if (serviceOffering == null) {
- return false;
- }
- return volumeApiService.doesTargetStorageSupportDiskOffering(pool, serviceOffering.getTags());
- }
-
private ServiceOfferingVO getUnmanagedInstanceServiceOffering(final UnmanagedInstanceTO instance, ServiceOfferingVO serviceOffering, final Account owner, final DataCenter zone, final Map<String, String> details)
throws ServerApiException, PermissionDeniedException, ResourceAllocationException {
if (instance == null) {
@@ -568,9 +559,6 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
if (diskOffering != null && !migrateAllowed && !storagePoolSupportsDiskOffering(storagePool, diskOffering)) {
throw new InvalidParameterValueException(String.format("Disk offering: %s is not compatible with storage pool: %s of unmanaged disk: %s", diskOffering.getUuid(), storagePool.getUuid(), disk.getDiskId()));
}
- if (serviceOffering != null && !migrateAllowed && !storagePoolSupportsServiceOffering(storagePool, serviceOffering)) {
- throw new InvalidParameterValueException(String.format("Service offering: %s is not compatible with storage pool: %s of unmanaged disk: %s", serviceOffering.getUuid(), storagePool.getUuid(), disk.getDiskId()));
- }
}
private void checkUnmanagedDiskAndOfferingForImport(List<UnmanagedInstanceTO.Disk> disks, final Map<String, Long> diskOfferingMap, final Account owner, final DataCenter zone, final Cluster cluster, final boolean migrateAllowed)
@@ -818,9 +806,9 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
continue;
}
boolean poolSupportsOfferings = storagePoolSupportsDiskOffering(diskProfileStoragePool.second(), dOffering);
- if (poolSupportsOfferings && profile.getType() == Volume.Type.ROOT) {
- poolSupportsOfferings = storagePoolSupportsServiceOffering(diskProfileStoragePool.second(), serviceOffering);
- }
+ //FR123 get confirmation from Abhishek if (poolSupportsOfferings && profile.getType() == Volume.Type.ROOT) {
+ // poolSupportsOfferings = storagePoolSupportsServiceOffering(diskProfileStoragePool.second(), serviceOffering);
+ //}
if (poolSupportsOfferings) {
continue;
}
@@ -835,9 +823,11 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
if (CollectionUtils.isNotEmpty(storagePools)) {
for (StoragePool pool : storagePools) {
if (diskProfileStoragePool.second().getId() != pool.getId() &&
- storagePoolSupportsDiskOffering(pool, dOffering) &&
- (!profile.getType().equals(Volume.Type.ROOT) ||
- profile.getType().equals(Volume.Type.ROOT) && storagePoolSupportsServiceOffering(pool, serviceOffering))) {
+ storagePoolSupportsDiskOffering(pool, dOffering)
+ //FR123 get confirmation from Abhishek
+ //(!profile.getType().equals(Volume.Type.ROOT) ||
+ //profile.getType().equals(Volume.Type.ROOT) && storagePoolSupportsServiceOffering(pool, serviceOffering))
+ ) {
storagePool = pool;
break;
}
@@ -848,9 +838,10 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
storagePools = poolsPair.first();
for (StoragePool pool : storagePools) {
if (diskProfileStoragePool.second().getId() != pool.getId() &&
- storagePoolSupportsDiskOffering(pool, dOffering) &&
- (!profile.getType().equals(Volume.Type.ROOT) ||
- profile.getType().equals(Volume.Type.ROOT) && storagePoolSupportsServiceOffering(pool, serviceOffering))) {
+ storagePoolSupportsDiskOffering(pool, dOffering)
+ //FR123 get confimration from Abhishek(!profile.getType().equals(Volume.Type.ROOT) ||
+ //profile.getType().equals(Volume.Type.ROOT) && storagePoolSupportsServiceOffering(pool, serviceOffering))
+ ) {
storagePool = pool;
break;
}
@@ -1024,7 +1015,8 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
if (details.containsKey("maxIops")) {
maxIops = Long.parseLong(details.get("maxIops"));
}
- diskProfileStoragePoolList.add(importDisk(rootDisk, userVm, cluster, serviceOffering, Volume.Type.ROOT, String.format("ROOT-%d", userVm.getId()),
+ DiskOfferingVO diskOffering = diskOfferingDao.findById(serviceOffering.getDiskOfferingId());
+ diskProfileStoragePoolList.add(importDisk(rootDisk, userVm, cluster, diskOffering, Volume.Type.ROOT, String.format("ROOT-%d", userVm.getId()),
(rootDisk.getCapacity() / Resource.ResourceType.bytesToGiB), minIops, maxIops,
template, owner, null));
for (UnmanagedInstanceTO.Disk disk : dataDisks) {
diff --git a/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java
index 8ec24af..32e993c 100644
--- a/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java
+++ b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java
@@ -209,7 +209,7 @@ public class VolumeApiServiceImplTest {
VolumeVO volumeOfRunningVm = new VolumeVO("root", 1L, 1L, 1L, 1L, 1L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
when(volumeDaoMock.findById(1L)).thenReturn(volumeOfRunningVm);
- UserVmVO runningVm = new UserVmVO(1L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
+ UserVmVO runningVm = new UserVmVO(1L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm");
runningVm.setState(State.Running);
runningVm.setDataCenterId(1L);
when(userVmDaoMock.findById(1L)).thenReturn(runningVm);
@@ -219,13 +219,13 @@ public class VolumeApiServiceImplTest {
volumeOfStoppedVm.setPoolId(1L);
when(volumeDaoMock.findById(2L)).thenReturn(volumeOfStoppedVm);
- UserVmVO stoppedVm = new UserVmVO(2L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
+ UserVmVO stoppedVm = new UserVmVO(2L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm");
stoppedVm.setState(State.Stopped);
stoppedVm.setDataCenterId(1L);
when(userVmDaoMock.findById(2L)).thenReturn(stoppedVm);
// volume of hyperV vm id=3
- UserVmVO hyperVVm = new UserVmVO(3L, "vm", "vm", 1, HypervisorType.Hyperv, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
+ UserVmVO hyperVVm = new UserVmVO(3L, "vm", "vm", 1, HypervisorType.Hyperv, 1L, false, false, 1L, 1L, 1, 1L, null, "vm");
hyperVVm.setState(State.Stopped);
hyperVVm.setDataCenterId(1L);
when(userVmDaoMock.findById(3L)).thenReturn(hyperVVm);
@@ -281,7 +281,7 @@ public class VolumeApiServiceImplTest {
when(volumeDaoMock.findById(7L)).thenReturn(managedVolume1);
// vm having root volume
- UserVmVO vmHavingRootVolume = new UserVmVO(4L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
+ UserVmVO vmHavingRootVolume = new UserVmVO(4L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm");
vmHavingRootVolume.setState(State.Stopped);
vmHavingRootVolume.setDataCenterId(1L);
when(userVmDaoMock.findById(4L)).thenReturn(vmHavingRootVolume);
diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
index da59f07..cb0ab80 100644
--- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
+++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
@@ -93,9 +93,6 @@ public class UserVmManagerImplTest {
private DiskOfferingDao diskOfferingDao;
@Mock
- private ServiceOfferingVO serviceOfferingVO;
-
- @Mock
private DataCenterDao _dcDao;
@Mock
private DataCenterVO _dcMock;
@@ -211,8 +208,12 @@ public class UserVmManagerImplTest {
boolean ha = false;
boolean useLocalStorage = false;
+ DiskOfferingVO diskOfferingVO = new DiskOfferingVO(name, displayText, Storage.ProvisioningType.THIN, false, null, false, false, false, true);
+ diskOfferingVO = diskOfferingDao.persistDefaultDiskOffering(diskOfferingVO);
+
ServiceOfferingVO serviceOffering = new ServiceOfferingVO(name, cpu, ramSize, speed, null, null, ha, displayText, Storage.ProvisioningType.THIN, useLocalStorage, false, null, false, null,
false);
+ serviceOffering.setDiskOfferingId(diskOfferingVO.getId());
return serviceOffering;
}
@@ -456,7 +457,6 @@ public class UserVmManagerImplTest {
Mockito.when(template.getId()).thenReturn(1l);
Mockito.when(template.getSize()).thenReturn(99L * GiB_TO_BYTES);
ServiceOfferingVO offering = Mockito.mock(ServiceOfferingVO.class);
- Mockito.when(offering.getId()).thenReturn(1l);
Mockito.when(templateDao.findById(Mockito.anyLong())).thenReturn(template);
DiskOfferingVO diskfferingVo = Mockito.mock(DiskOfferingVO.class);
diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
index 9d58f4f..e699d79 100644
--- a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
+++ b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
@@ -519,7 +519,7 @@ public class UserVmManagerTest {
AccountVO newAccount = new AccountVO("testaccount", 1, "networkdomain", (short)1, UUID.randomUUID().toString());
newAccount.setId(2L);
- UserVmVO vm = new UserVmVO(10L, "test", "test", 1L, HypervisorType.Any, 1L, false, false, 1L, 1L, 1, 5L, "test", "test", 1L);
+ UserVmVO vm = new UserVmVO(10L, "test", "test", 1L, HypervisorType.Any, 1L, false, false, 1L, 1L, 1, 5L, "test", "test");
vm.setState(VirtualMachine.State.Stopped);
when(_vmDao.findById(anyLong())).thenReturn(vm);
diff --git a/server/src/test/java/com/cloud/vm/dao/UserVmDaoImplTest.java b/server/src/test/java/com/cloud/vm/dao/UserVmDaoImplTest.java
index 49de99a..7dbfba3 100644
--- a/server/src/test/java/com/cloud/vm/dao/UserVmDaoImplTest.java
+++ b/server/src/test/java/com/cloud/vm/dao/UserVmDaoImplTest.java
@@ -48,7 +48,7 @@ public class UserVmDaoImplTest extends TestCase {
// Persist the data.
UserVmVO vo =
new UserVmVO(vmId, instanceName, displayName, templateId, hypervisor, guestOsId, haEnabled, limitCpuUse, domainId, accountId, 1, serviceOfferingId, userdata,
- name, diskOfferingId);
+ name);
dao.persist(vo);
vo = dao.findById(vmId);
diff --git a/server/src/test/java/org/apache/cloudstack/affinity/AffinityApiUnitTest.java b/server/src/test/java/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
index 0d36648..8d7a645 100644
--- a/server/src/test/java/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
+++ b/server/src/test/java/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
@@ -205,7 +205,7 @@ public class AffinityApiUnitTest {
@Test(expected = InvalidParameterValueException.class)
public void updateAffinityGroupVMRunning() throws ResourceInUseException {
- UserVmVO vm = new UserVmVO(10L, "test", "test", 101L, HypervisorType.Any, 21L, false, false, domainId, 200L, 1, 5L, "", "test", 1L);
+ UserVmVO vm = new UserVmVO(10L, "test", "test", 101L, HypervisorType.Any, 21L, false, false, domainId, 200L, 1, 5L, "", "test");
vm.setState(VirtualMachine.State.Running);
when(_vmDao.findById(10L)).thenReturn(vm);
diff --git a/server/src/test/java/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java b/server/src/test/java/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java
index 8aa4aa8..607bf04 100644
--- a/server/src/test/java/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java
+++ b/server/src/test/java/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java
@@ -270,7 +270,7 @@ public class AffinityGroupServiceImplTest {
@Test(expected = InvalidParameterValueException.class)
public void updateAffinityGroupVMRunning() throws ResourceInUseException {
when(_acctMgr.finalizeOwner((Account)anyObject(), anyString(), anyLong(), anyLong())).thenReturn(acct);
- UserVmVO vm = new UserVmVO(10L, "test", "test", 101L, HypervisorType.Any, 21L, false, false, DOMAIN_ID, 200L, 1, 5L, "", "test", 1L);
+ UserVmVO vm = new UserVmVO(10L, "test", "test", 101L, HypervisorType.Any, 21L, false, false, DOMAIN_ID, 200L, 1, 5L, "", "test");
vm.setState(VirtualMachine.State.Running);
when(_vmDao.findById(10L)).thenReturn(vm);
diff --git a/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
index 32b0e43..38198e3 100644
--- a/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
+++ b/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
@@ -262,13 +262,13 @@ public class UnmanagedVMsManagerImplTest {
when(templateDao.findByName(Mockito.anyString())).thenReturn(template);
ServiceOfferingVO serviceOffering = Mockito.mock(ServiceOfferingVO.class);
when(serviceOffering.getId()).thenReturn(1L);
- when(serviceOffering.getTags()).thenReturn("");
when(serviceOffering.isDynamic()).thenReturn(false);
when(serviceOffering.getCpu()).thenReturn(instance.getCpuCores());
when(serviceOffering.getRamSize()).thenReturn(instance.getMemory());
when(serviceOffering.getSpeed()).thenReturn(instance.getCpuSpeed());
when(serviceOfferingDao.findById(Mockito.anyLong())).thenReturn(serviceOffering);
DiskOfferingVO diskOfferingVO = Mockito.mock(DiskOfferingVO.class);
+ when(diskOfferingVO.getTags()).thenReturn("");
when(diskOfferingVO.isCustomized()).thenReturn(false);
when(diskOfferingVO.getDiskSize()).thenReturn(Long.MAX_VALUE);
when(diskOfferingDao.findById(Mockito.anyLong())).thenReturn(diskOfferingVO);