Fix vsphere storage policy when compute offering uses the disk offering attached to it (#9203)

This commit is contained in:
Harikrishna 2024-06-11 17:19:58 +05:30 committed by GitHub
parent acae5c5b9e
commit 6edcf32c5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 20 deletions

View File

@ -3269,10 +3269,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
DiskOfferingVO diskOffering = null;
if (diskOfferingId == null) {
diskOffering = createDiskOfferingInternal(userId, isSystem, vmType,
name, cpu, ramSize, speed, displayText, typedProvisioningType, localStorageRequired,
offerHA, limitResourceUse, volatileVm, tags, domainIds, zoneIds, hostTag,
networkRate, deploymentPlanner, details, rootDiskSizeInGiB, isCustomizedIops, minIops, maxIops,
diskOffering = createDiskOfferingInternal(
name, displayText, typedProvisioningType, localStorageRequired,
tags, details, rootDiskSizeInGiB, isCustomizedIops, minIops, maxIops,
bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength,
bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength,
iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength,
@ -3280,6 +3279,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
hypervisorSnapshotReserve, cacheMode, storagePolicyID, encryptRoot);
} else {
diskOffering = _diskOfferingDao.findById(diskOfferingId);
String diskStoragePolicyId = diskOfferingDetailsDao.getDetail(diskOfferingId, ApiConstants.STORAGE_POLICY);
if (storagePolicyID != null && diskStoragePolicyId != null) {
throw new InvalidParameterValueException("Storage policy cannot be defined on both compute and disk offering");
}
}
if (diskOffering != null) {
serviceOffering.setDiskOfferingId(diskOffering.getId());
@ -3319,10 +3322,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
}
private DiskOfferingVO createDiskOfferingInternal(final long userId, final boolean isSystem, final VirtualMachine.Type vmType,
final String name, final Integer cpu, final Integer ramSize, final Integer speed, final String displayText, final ProvisioningType typedProvisioningType, final boolean localStorageRequired,
final boolean offerHA, final boolean limitResourceUse, final boolean volatileVm, String tags, final List<Long> domainIds, List<Long> zoneIds, final String hostTag,
final Integer networkRate, final String deploymentPlanner, final Map<String, String> details, Long rootDiskSizeInGiB, final Boolean isCustomizedIops, Long minIops, Long maxIops,
private DiskOfferingVO createDiskOfferingInternal(final String name, final String displayText, final ProvisioningType typedProvisioningType, final boolean localStorageRequired,
String tags, final Map<String, String> details, Long rootDiskSizeInGiB, final Boolean isCustomizedIops, Long minIops, Long maxIops,
Long bytesReadRate, Long bytesReadRateMax, Long bytesReadRateMaxLength,
Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength,
Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength,
@ -3383,8 +3384,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
diskOffering.setHypervisorSnapshotReserve(hypervisorSnapshotReserve);
if ((diskOffering = _diskOfferingDao.persist(diskOffering)) != null) {
if (details != null && !details.isEmpty()) {
List<DiskOfferingDetailVO> diskDetailsVO = new ArrayList<DiskOfferingDetailVO>();
if ((details != null && !details.isEmpty()) || (storagePolicyID != null)) {
List<DiskOfferingDetailVO> diskDetailsVO = new ArrayList<>();
// Support disk offering details for below parameters
if (details.containsKey(Volume.BANDWIDTH_LIMIT_IN_MBPS)) {
diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), Volume.BANDWIDTH_LIMIT_IN_MBPS, details.get(Volume.BANDWIDTH_LIMIT_IN_MBPS), false));
@ -3392,6 +3393,11 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
if (details.containsKey(Volume.IOPS_LIMIT)) {
diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), Volume.IOPS_LIMIT, details.get(Volume.IOPS_LIMIT), false));
}
if (storagePolicyID != null) {
diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), ApiConstants.STORAGE_POLICY, String.valueOf(storagePolicyID), false));
}
if (!diskDetailsVO.isEmpty()) {
diskOfferingDetailsDao.saveDetails(diskDetailsVO);
}

View File

@ -2824,18 +2824,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
List<Pair<Volume, Answer>> answers = new ArrayList<Pair<Volume, Answer>>();
for (Pair<Volume, DiskProfile> volumeDiskProfilePair : volumes) {
String storagePolicyId = null;
Volume volume = volumeDiskProfilePair.first();
DiskProfile diskProfile = volumeDiskProfilePair.second();
if (volume.getVolumeType() == Type.ROOT) {
Long vmId = volume.getInstanceId();
if (vmId != null) {
VMInstanceVO vm = _vmInstanceDao.findByIdIncludingRemoved(vmId);
storagePolicyId = _serviceOfferingDetailsDao.getDetail(vm.getServiceOfferingId(), ApiConstants.STORAGE_POLICY);
}
} else {
storagePolicyId = _diskOfferingDetailsDao.getDetail(diskProfile.getDiskOfferingId(), ApiConstants.STORAGE_POLICY);
}
String storagePolicyId = _diskOfferingDetailsDao.getDetail(diskProfile.getDiskOfferingId(), ApiConstants.STORAGE_POLICY);
if (StringUtils.isNotEmpty(storagePolicyId)) {
VsphereStoragePolicyVO storagePolicyVO = _vsphereStoragePolicyDao.findById(Long.parseLong(storagePolicyId));
List<Long> hostIds = getUpHostsInPool(pool.getId());