wip changes

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2019-04-03 16:10:10 +05:30 committed by Abhishek Kumar
parent 7721126076
commit 5988884bd1
9 changed files with 216 additions and 53 deletions

View File

@ -35,8 +35,6 @@ import com.cloud.vm.VirtualMachine;
@DiscriminatorValue(value = "Service")
@PrimaryKeyJoinColumn(name = "id")
public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering {
@Column(name = "domain_id")
Long domainId;
@Column(name = "cpu")
private Integer cpu;
@ -77,6 +75,9 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Column(name = "deployment_planner")
private String deploymentPlanner = null;
@Column(name = "domain_id")
private Long domainId = null;
// 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.
@ -110,7 +111,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
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.domainId = domainId;
this.cpu = cpu;
this.ramSize = ramSize;
this.speed = speed;
@ -183,7 +183,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
offering.isCustomizedIops()== null ? false:offering.isCustomizedIops(),
offering.getMinIops(),
offering.getMaxIops());
domainId = offering.getDomainId();
cpu = offering.getCpu();
ramSize = offering.getRamSize();
speed = offering.getSpeed();
@ -198,6 +197,7 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Override
public Long getDomainId() {
// TODO: get rid of me
return domainId;
}

View File

@ -20,5 +20,104 @@
--;
-- Move domain_id to disk offering details and drop the domain_id column
INSERT INTO `cloud`.`disk_offering_details` (offering_id, name, value) SELECT id, 'domainids', domain_id FROM `cloud`.`disk_offering` WHERE domain_id IS NOT NULL;
INSERT INTO `cloud`.`disk_offering_details` (offering_id, name, value) SELECT id, 'domainid', domain_id FROM `cloud`.`disk_offering` WHERE domain_id IS NOT NULL;
ALTER TABLE `cloud`.`disk_offering` DROP COLUMN `domain_id`;
-- Disk offering with multi-domains and multi-zones
DROP VIEW IF EXISTS `cloud`.`disk_offering_view`;
CREATE VIEW `cloud`.`disk_offering_view` AS
select
disk_offering.id,
disk_offering.uuid,
disk_offering.name,
disk_offering.display_text,
disk_offering.provisioning_type,
disk_offering.disk_size,
disk_offering.min_iops,
disk_offering.max_iops,
disk_offering.created,
disk_offering.tags,
disk_offering.customized,
disk_offering.customized_iops,
disk_offering.removed,
disk_offering.use_local_storage,
disk_offering.system_use,
disk_offering.hv_ss_reserve,
disk_offering.bytes_read_rate,
disk_offering.bytes_write_rate,
disk_offering.iops_read_rate,
disk_offering.iops_write_rate,
disk_offering.cache_mode,
disk_offering.sort_key,
disk_offering.type,
disk_offering.display_offering,
disk_offering.state,
GROUP_CONCAT(domain_details.value) AS domain_id,
GROUP_CONCAT(domain.uuid) AS domain_uuid,
GROUP_CONCAT(domain.name) AS domain_name,
GROUP_CONCAT(domain.path) AS domain_path,
GROUP_CONCAT(zone_details.value) AS zone_id,
GROUP_CONCAT(zone.uuid) AS zone_uuid,
GROUP_CONCAT(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 `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 `zone`.`id` = `zone_details`.`value`
where
disk_offering.state='ACTIVE' GROUP BY id;
-- Service offering with multi-domains and multi-zones
DROP VIEW IF EXISTS `cloud`.`service_offering_view`;
CREATE VIEW `cloud`.`service_offering_view` AS
select
service_offering.id,
disk_offering.uuid,
disk_offering.name,
disk_offering.display_text,
disk_offering.provisioning_type,
disk_offering.created,
disk_offering.tags,
disk_offering.removed,
disk_offering.use_local_storage,
disk_offering.system_use,
disk_offering.customized_iops,
disk_offering.min_iops,
disk_offering.max_iops,
disk_offering.hv_ss_reserve,
disk_offering.bytes_read_rate,
disk_offering.bytes_write_rate,
disk_offering.iops_read_rate,
disk_offering.iops_write_rate,
disk_offering.cache_mode,
service_offering.cpu,
service_offering.speed,
service_offering.ram_size,
service_offering.nw_rate,
service_offering.mc_rate,
service_offering.ha_enabled,
service_offering.limit_cpu_use,
service_offering.host_tag,
service_offering.default_use,
service_offering.vm_type,
service_offering.sort_key,
service_offering.is_volatile,
service_offering.deployment_planner,
disk_offering.domain_id,
disk_offering.domain_uuid,
disk_offering.domain_name,
disk_offering.domain_path,
disk_offering.zone_id,
disk_offering.zone_uuid,
disk_offering.zone_name
from
`cloud`.`service_offering`
inner join
`cloud`.`disk_offering_view` AS `disk_offering` ON service_offering.id = disk_offering.id
where
disk_offering.state='Active';

View File

@ -36,9 +36,6 @@ import com.cloud.vm.VirtualMachine;
@DiscriminatorValue(value = "Service")
@PrimaryKeyJoinColumn(name = "id")
public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering {
@Column(name = "domain_id")
Long domainId;
@Column(name = "cpu")
private Integer cpu;
@ -107,7 +104,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
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.domainId = domainId;
this.cpu = cpu;
this.ramSize = ramSize;
this.speed = speed;
@ -139,7 +135,6 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
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());
domainId = offering.getDomainId();
cpu = offering.getCpu();
ramSize = offering.getRamSize();
speed = offering.getSpeed();
@ -233,7 +228,7 @@ public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering
@Override
public Long getDomainId() {
return domainId;
return null;
}
public void setHostTag(String hostTag) {

View File

@ -33,7 +33,6 @@ import org.apache.cloudstack.affinity.AffinityGroup;
import org.apache.cloudstack.affinity.AffinityGroupResponse;
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
import org.apache.cloudstack.api.ApiCommandJobType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiConstants.DomainDetails;
import org.apache.cloudstack.api.ApiConstants.HostDetails;
import org.apache.cloudstack.api.ApiConstants.VMDetails;
@ -72,7 +71,6 @@ import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao;
import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.commons.collections.MapUtils;
import com.cloud.agent.api.VgpuTypesInfo;
import com.cloud.api.query.dao.AccountJoinDao;
@ -1913,29 +1911,7 @@ public class ApiDBUtils {
}
public static DiskOfferingResponse newDiskOfferingResponse(DiskOfferingJoinVO offering) {
DiskOfferingResponse diskOfferingResponse = s_diskOfferingJoinDao.newDiskOfferingResponse(offering);
if (diskOfferingResponse != null) {
Map<String, String> details = s_diskOfferingDetailsDao.listDetailsKeyPairs(offering.getId());
if (MapUtils.isNotEmpty(details)) {
// Domains
String[] domainIds = details.getOrDefault(ApiConstants.DOMAIN_ID_LIST, "").split(",");
final Map<String, String> domains = new HashMap<>();
for (DomainVO domain : s_domainDao.list(domainIds)) {
domains.put(domain.getName(), domain.getUuid());
}
diskOfferingResponse.setDomain(String.join(", ", domains.keySet()));
diskOfferingResponse.setDomainId(String.join(", ", domains.values()));
// Zones
String[] zoneIds = details.getOrDefault(ApiConstants.ZONE_ID_LIST, "").split(",");
final Map<String, String> zones = new HashMap<>();
for (DataCenterVO zone : s_zoneDao.list(zoneIds)) {
zones.put(zone.getName(), zone.getUuid());
}
diskOfferingResponse.setZone(String.join(", ", zones.keySet()));
diskOfferingResponse.setZoneId(String.join(", ", zones.values()));
}
}
return diskOfferingResponse;
return s_diskOfferingJoinDao.newDiskOfferingResponse(offering);
}
public static DiskOfferingJoinVO newDiskOfferingView(DiskOffering offering) {

View File

@ -64,6 +64,10 @@ public class DiskOfferingJoinDaoImpl extends GenericDaoBase<DiskOfferingJoinVO,
diskOfferingResponse.setMaxIops(offering.getMaxIops());
diskOfferingResponse.setDisplayOffering(offering.isDisplayOffering());
diskOfferingResponse.setDomainId(offering.getDomainUuid());
diskOfferingResponse.setDomain(offering.getDomainPath());
diskOfferingResponse.setZoneId(offering.getZoneUuid());
diskOfferingResponse.setZone(offering.getZoneName());
diskOfferingResponse.setTags(offering.getTags());
diskOfferingResponse.setCustomized(offering.isCustomized());

View File

@ -67,8 +67,9 @@ public class ServiceOfferingJoinDaoImpl extends GenericDaoBase<ServiceOfferingJo
offeringResponse.setLimitCpuUse(offering.isLimitCpuUse());
offeringResponse.setVolatileVm(offering.getVolatileVm());
offeringResponse.setTags(offering.getTags());
offeringResponse.setDomain(offering.getDomainName());
offeringResponse.setDomainId(offering.getDomainUuid());
//TODO: get domain for offering from details table
//offeringResponse.setDomain(offering.getDomainName());
//offeringResponse.setDomainId(offering.getDomainUuid());
offeringResponse.setNetworkRate(offering.getRateMbps());
offeringResponse.setHostTag(offering.getHostTag());
offeringResponse.setDeploymentPlanner(offering.getDeploymentPlanner());

View File

@ -20,12 +20,15 @@ import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;
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;
@ -128,9 +131,34 @@ public class DiskOfferingJoinVO extends BaseViewVO implements InternalIdentity,
@Column(name = GenericDao.REMOVED_COLUMN)
private Date removed;
@Column(name = "domain_id")
private String domainId = null;
@Column(name = "domain_uuid")
private String domainUuid = null;
@Column(name = "domain_name")
private String domainName = null;
@Column(name = "domain_path")
private String domainPath = null;
@Column(name = "zone_id")
private String zoneId = null;
@Column(name = "zone_uuid")
private String zoneUuid = null;
@Column(name = "zone_name")
private String zoneName = null;
@Column(name = "display_offering")
boolean displayOffering;
@Enumerated(EnumType.STRING)
@Column(name = "state")
DiskOffering.State state;
public DiskOfferingJoinVO() {
}
@ -251,4 +279,68 @@ public class DiskOfferingJoinVO extends BaseViewVO implements InternalIdentity,
public Long getIopsWriteRateMax() { return iopsWriteRateMax; }
public Long getIopsWriteRateMaxLength() { return iopsWriteRateMaxLength; }
public String getDomainId() {
return domainId;
}
public void setDomainId(String domainId) {
this.domainId = domainId;
}
public String getDomainUuid() {
return domainUuid;
}
public void setDomainUuid(String domainUuid) {
this.domainUuid = domainUuid;
}
public String getDomainName() {
return domainName;
}
public void setDomainName(String domainName) {
this.domainName = domainName;
}
public String getDomainPath() {
return domainPath;
}
public void setDomainPath(String domainPath) {
this.domainPath = domainPath;
}
public String getZoneId() {
return zoneId;
}
public void setZoneId(String zoneId) {
this.zoneId = zoneId;
}
public String getZoneUuid() {
return zoneUuid;
}
public void setZoneUuid(String zoneUuid) {
this.zoneUuid = zoneUuid;
}
public String getZoneName() {
return zoneName;
}
public void setZoneName(String zoneName) {
this.zoneName = zoneName;
}
public DiskOffering.State getState() {
return state;
}
public void setState(DiskOffering.State state) {
this.state = state;
}
}

View File

@ -23,11 +23,10 @@ import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import com.cloud.storage.Storage;
import org.apache.cloudstack.api.Identity;
import org.apache.cloudstack.api.InternalIdentity;
import com.cloud.storage.Storage;
import com.cloud.utils.db.GenericDao;
@Entity
@ -221,10 +220,6 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
return domainName;
}
public String getDomainPath() {
return domainPath;
}
public Boolean isCustomizedIops() {
return customizedIops;
}

View File

@ -37,6 +37,16 @@ import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.cloudstack.utils.security.DigestHelper;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.cloud.host.Status;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDaoImpl;
@ -52,15 +62,6 @@ import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.db.TransactionStatus;
import com.cloud.utils.net.NfsUtils;
import org.apache.cloudstack.utils.security.DigestHelper;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class DatabaseConfig {
private static final Logger s_logger = Logger.getLogger(DatabaseConfig.class.getName());