Skip to content

Commit af58284

Browse files
server,config: respect storage.max.volume.size and make it dynamic (apache#5857)
* server,config: respect storage.max.volume.size and make it dynamic Fixes apache#5830 * fix test * size change * fix check * server: donot include ISO size while checking volume sizes * revert size check * refactor Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> Co-authored-by: sureshanaparti <12028987+sureshanaparti@users.noreply.github.com>
1 parent eeaad0b commit af58284

8 files changed

Lines changed: 82 additions & 62 deletions

File tree

api/src/main/java/com/cloud/storage/VolumeApiService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,6 @@ Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account acc
152152
Volume destroyVolume(long volumeId, Account caller, boolean expunge, boolean forceExpunge);
153153

154154
Volume recoverVolume(long volumeId);
155+
156+
boolean validateVolumeSizeInBytes(long size);
155157
}

engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ public interface VolumeOrchestrationService {
7575
true
7676
);
7777

78+
ConfigKey<Long> MaxVolumeSize = new ConfigKey<Long>("Storage",
79+
Long.class,
80+
"storage.max.volume.size",
81+
"2000",
82+
"The maximum size for a volume (in GB).",
83+
true);
84+
7885
VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType)
7986
throws ConcurrentOperationException, StorageUnavailableException;
8087

engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
*/
1919
package org.apache.cloudstack.engine.orchestration;
2020

21+
import static com.cloud.storage.resource.StorageProcessor.REQUEST_TEMPLATE_RELOAD;
2122
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
2223

2324
import java.util.ArrayList;
2425
import java.util.Comparator;
26+
import java.util.Date;
2527
import java.util.HashMap;
2628
import java.util.HashSet;
2729
import java.util.List;
@@ -35,14 +37,6 @@
3537
import javax.inject.Inject;
3638
import javax.naming.ConfigurationException;
3739

38-
import com.cloud.agent.api.to.DatadiskTO;
39-
import com.cloud.utils.StringUtils;
40-
import com.cloud.vm.SecondaryStorageVmVO;
41-
import com.cloud.vm.UserVmDetailVO;
42-
import com.cloud.vm.VMInstanceVO;
43-
import com.cloud.vm.VmDetailConstants;
44-
import com.cloud.vm.dao.SecondaryStorageVmDao;
45-
import com.cloud.vm.dao.UserVmDetailsDao;
4640
import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;
4741
import org.apache.cloudstack.api.command.admin.volume.MigrateVolumeCmdByAdmin;
4842
import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd;
@@ -84,11 +78,12 @@
8478
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
8579
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
8680
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
87-
import org.apache.commons.collections.MapUtils;
8881
import org.apache.commons.collections.CollectionUtils;
82+
import org.apache.commons.collections.MapUtils;
8983
import org.apache.log4j.Logger;
9084

9185
import com.cloud.agent.api.to.DataTO;
86+
import com.cloud.agent.api.to.DatadiskTO;
9287
import com.cloud.agent.api.to.DiskTO;
9388
import com.cloud.agent.api.to.VirtualMachineTO;
9489
import com.cloud.agent.manager.allocator.PodAllocator;
@@ -139,6 +134,7 @@
139134
import com.cloud.user.ResourceLimitService;
140135
import com.cloud.uservm.UserVm;
141136
import com.cloud.utils.Pair;
137+
import com.cloud.utils.StringUtils;
142138
import com.cloud.utils.component.ManagerBase;
143139
import com.cloud.utils.db.DB;
144140
import com.cloud.utils.db.EntityManager;
@@ -150,21 +146,24 @@
150146
import com.cloud.utils.fsm.NoTransitionException;
151147
import com.cloud.utils.fsm.StateMachine2;
152148
import com.cloud.vm.DiskProfile;
149+
import com.cloud.vm.SecondaryStorageVmVO;
153150
import com.cloud.vm.UserVmCloneSettingVO;
151+
import com.cloud.vm.UserVmDetailVO;
154152
import com.cloud.vm.UserVmVO;
153+
import com.cloud.vm.VMInstanceVO;
155154
import com.cloud.vm.VirtualMachine;
156155
import com.cloud.vm.VirtualMachine.State;
157156
import com.cloud.vm.VirtualMachineProfile;
158157
import com.cloud.vm.VirtualMachineProfileImpl;
158+
import com.cloud.vm.VmDetailConstants;
159159
import com.cloud.vm.VmWorkAttachVolume;
160160
import com.cloud.vm.VmWorkMigrateVolume;
161161
import com.cloud.vm.VmWorkSerializer;
162162
import com.cloud.vm.VmWorkTakeVolumeSnapshot;
163+
import com.cloud.vm.dao.SecondaryStorageVmDao;
163164
import com.cloud.vm.dao.UserVmCloneSettingDao;
164165
import com.cloud.vm.dao.UserVmDao;
165-
166-
import static com.cloud.storage.resource.StorageProcessor.REQUEST_TEMPLATE_RELOAD;
167-
import java.util.Date;
166+
import com.cloud.vm.dao.UserVmDetailsDao;
168167

169168
public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrationService, Configurable {
170169

@@ -1749,8 +1748,6 @@ public boolean canVmRestartOnAnotherServer(long vmId) {
17491748
return true;
17501749
}
17511750

1752-
public static final ConfigKey<Long> MaxVolumeSize = new ConfigKey<Long>(Long.class, "storage.max.volume.size", "Storage", "2000", "The maximum size for a volume (in GB).", true);
1753-
17541751
public static final ConfigKey<Boolean> RecreatableSystemVmEnabled = new ConfigKey<Boolean>(Boolean.class, "recreate.systemvm.enabled", "Advanced", "false",
17551752
"If true, will recreate system vm root disk whenever starting system vm", true);
17561753

server/src/main/java/com/cloud/configuration/Config.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616
// under the License.
1717
package com.cloud.configuration;
1818

19+
import java.util.ArrayList;
20+
import java.util.HashMap;
21+
import java.util.List;
22+
import java.util.StringTokenizer;
23+
24+
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
25+
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
26+
import org.apache.cloudstack.framework.config.ConfigKey;
27+
1928
import com.cloud.agent.AgentManager;
2029
import com.cloud.consoleproxy.ConsoleProxyManager;
2130
import com.cloud.ha.HighAvailabilityManager;
@@ -29,14 +38,6 @@
2938
import com.cloud.template.TemplateManager;
3039
import com.cloud.vm.UserVmManager;
3140
import com.cloud.vm.snapshot.VMSnapshotManager;
32-
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
33-
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
34-
import org.apache.cloudstack.framework.config.ConfigKey;
35-
36-
import java.util.ArrayList;
37-
import java.util.HashMap;
38-
import java.util.List;
39-
import java.util.StringTokenizer;
4041

4142
/**
4243
* @deprecated use the more dynamic ConfigKey
@@ -144,7 +145,6 @@ public enum Config {
144145
"60000",
145146
"The interval (in milliseconds) when storage stats (per host) are retrieved from agents.",
146147
null),
147-
MaxVolumeSize("Storage", ManagementServer.class, Integer.class, "storage.max.volume.size", "2000", "The maximum size for a volume (in GB).", null),
148148
StorageCacheReplacementLRUTimeInterval(
149149
"Storage",
150150
ManagementServer.class,

server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import javax.inject.Inject;
4444
import javax.naming.ConfigurationException;
4545

46-
import com.googlecode.ipv6.IPv6Address;
4746
import org.apache.cloudstack.acl.SecurityChecker;
4847
import org.apache.cloudstack.affinity.AffinityGroup;
4948
import org.apache.cloudstack.affinity.AffinityGroupService;
@@ -85,6 +84,7 @@
8584
import org.apache.cloudstack.config.Configuration;
8685
import org.apache.cloudstack.context.CallContext;
8786
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
87+
import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
8888
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
8989
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
9090
import org.apache.cloudstack.framework.config.ConfigDepot;
@@ -271,6 +271,7 @@
271271
import com.google.common.base.Preconditions;
272272
import com.google.common.base.Strings;
273273
import com.google.common.collect.Sets;
274+
import com.googlecode.ipv6.IPv6Address;
274275

275276
public class ConfigurationManagerImpl extends ManagerBase implements ConfigurationManager, ConfigurationService, Configurable {
276277
public static final Logger s_logger = Logger.getLogger(ConfigurationManagerImpl.class);
@@ -422,7 +423,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
422423
@Inject
423424
protected DataCenterLinkLocalIpAddressDao _linkLocalIpAllocDao;
424425

425-
private int _maxVolumeSizeInGb = Integer.parseInt(Config.MaxVolumeSize.getDefaultValue());
426426
private long _defaultPageSize = Long.parseLong(Config.DefaultPageSize.getDefaultValue());
427427
private static final String DOMAIN_NAME_PATTERN = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{1,63}$";
428428
protected Set<String> configValuesForValidation;
@@ -478,9 +478,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
478478

479479
@Override
480480
public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
481-
final String maxVolumeSizeInGbString = _configDao.getValue(Config.MaxVolumeSize.key());
482-
_maxVolumeSizeInGb = NumbersUtil.parseInt(maxVolumeSizeInGbString, Integer.parseInt(Config.MaxVolumeSize.getDefaultValue()));
483-
484481
final String defaultPageSizeString = _configDao.getValue(Config.DefaultPageSize.key());
485482
_defaultPageSize = NumbersUtil.parseLong(defaultPageSizeString, Long.parseLong(Config.DefaultPageSize.getDefaultValue()));
486483

@@ -2943,6 +2940,10 @@ protected ServiceOfferingVO createServiceOffering(final long userId, final boole
29432940
if (rootDiskSizeInGiB != null && rootDiskSizeInGiB <= 0L) {
29442941
throw new InvalidParameterValueException(String.format("The Root disk size is of %s GB but it must be greater than 0.", rootDiskSizeInGiB));
29452942
} else if (rootDiskSizeInGiB != null) {
2943+
long maxVolumeSizeInGb = VolumeOrchestrationService.MaxVolumeSize.value();
2944+
if (rootDiskSizeInGiB > maxVolumeSizeInGb) {
2945+
throw new InvalidParameterValueException(String.format("The maximum size for a disk is %d GB.", maxVolumeSizeInGb));
2946+
}
29462947
long rootDiskSizeInBytes = rootDiskSizeInGiB * GiB_TO_BYTES;
29472948
offering.setDiskSize(rootDiskSizeInBytes);
29482949
}
@@ -3264,10 +3265,11 @@ protected DiskOfferingVO createDiskOffering(final Long userId, final List<Long>
32643265
Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength,
32653266
final Integer hypervisorSnapshotReserve, String cacheMode, final Map<String, String> details, final Long storagePolicyID) {
32663267
long diskSize = 0;// special case for custom disk offerings
3268+
long maxVolumeSizeInGb = VolumeOrchestrationService.MaxVolumeSize.value();
32673269
if (numGibibytes != null && numGibibytes <= 0) {
3268-
throw new InvalidParameterValueException("Please specify a disk size of at least 1 Gb.");
3269-
} else if (numGibibytes != null && numGibibytes > _maxVolumeSizeInGb) {
3270-
throw new InvalidParameterValueException("The maximum size for a disk is " + _maxVolumeSizeInGb + " Gb.");
3270+
throw new InvalidParameterValueException("Please specify a disk size of at least 1 GB.");
3271+
} else if (numGibibytes != null && numGibibytes > maxVolumeSizeInGb) {
3272+
throw new InvalidParameterValueException(String.format("The maximum size for a disk is %d GB.", maxVolumeSizeInGb));
32713273
}
32723274
final ProvisioningType typedProvisioningType = ProvisioningType.getProvisioningType(provisioningType);
32733275

server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
311311
public static final ConfigKey<Boolean> AllowUserExpungeRecoverVolume = new ConfigKey<Boolean>("Advanced", Boolean.class, "allow.user.expunge.recover.volume", "true",
312312
"Determines whether users can expunge or recover their volume", true, ConfigKey.Scope.Account);
313313

314-
private long _maxVolumeSizeInGb;
315314
private final StateMachine2<Volume.State, Volume.Event, Volume> _volStateMachine;
316315

317316
private static final Set<Volume.State> STATES_VOLUME_CANNOT_BE_DESTROYED = new HashSet<>(Arrays.asList(Volume.State.Destroy, Volume.State.Expunging, Volume.State.Expunged, Volume.State.Allocated));
@@ -730,9 +729,8 @@ public VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationExcept
730729
maxIops = diskOffering.getMaxIops();
731730
}
732731

733-
if (!validateVolumeSizeRange(size)) {// convert size from mb to gb
734-
// for validation
735-
throw new InvalidParameterValueException("Invalid size for custom volume creation: " + size + " ,max volume size is:" + _maxVolumeSizeInGb);
732+
if (!validateVolumeSizeInBytes(size)) {
733+
throw new InvalidParameterValueException(String.format("Invalid size for custom volume creation: %s, max volume size is: %s GB", NumbersUtil.toReadableSize(size), VolumeOrchestrationService.MaxVolumeSize.value()));
736734
}
737735
}
738736

@@ -886,11 +884,13 @@ public VolumeVO doInTransaction(TransactionStatus status) {
886884
});
887885
}
888886

889-
public boolean validateVolumeSizeRange(long size) {
887+
@Override
888+
public boolean validateVolumeSizeInBytes(long size) {
889+
long maxVolumeSize = VolumeOrchestrationService.MaxVolumeSize.value();
890890
if (size < 0 || (size > 0 && size < (1024 * 1024 * 1024))) {
891891
throw new InvalidParameterValueException("Please specify a size of at least 1 GB.");
892-
} else if (size > (_maxVolumeSizeInGb * 1024 * 1024 * 1024)) {
893-
throw new InvalidParameterValueException("Requested volume size is " + size + ", but the maximum size allowed is " + _maxVolumeSizeInGb + " GB.");
892+
} else if (size > (maxVolumeSize * 1024 * 1024 * 1024)) {
893+
throw new InvalidParameterValueException(String.format("Requested volume size is %s, but the maximum size allowed is %d GB.", NumbersUtil.toReadableSize(size), maxVolumeSize));
894894
}
895895

896896
return true;
@@ -1117,7 +1117,7 @@ public VolumeVO resizeVolume(ResizeVolumeCmd cmd) throws ResourceAllocationExcep
11171117
}
11181118
}
11191119

1120-
if (!validateVolumeSizeRange(newSize)) {
1120+
if (!validateVolumeSizeInBytes(newSize)) {
11211121
throw new InvalidParameterValueException("Requested size out of range");
11221122
}
11231123

@@ -3534,8 +3534,6 @@ private Long getDeviceId(UserVmVO vm, Long deviceId) {
35343534

35353535
@Override
35363536
public boolean configure(String name, Map<String, Object> params) {
3537-
String maxVolumeSizeInGbString = _configDao.getValue(Config.MaxVolumeSize.toString());
3538-
_maxVolumeSizeInGb = NumbersUtil.parseLong(maxVolumeSizeInGbString, 2000);
35393537
supportingDefaultHV = _hypervisorCapabilitiesDao.getHypervisorsWithDefaultEntries();
35403538
return true;
35413539
}

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package com.cloud.vm;
1818

19+
import static com.cloud.configuration.ConfigurationManagerImpl.VM_USERDATA_MAX_LENGTH;
1920
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
2021

2122
import java.io.IOException;
@@ -26,6 +27,7 @@
2627
import java.util.Arrays;
2728
import java.util.Date;
2829
import java.util.HashMap;
30+
import java.util.HashSet;
2931
import java.util.LinkedHashMap;
3032
import java.util.LinkedHashSet;
3133
import java.util.List;
@@ -50,8 +52,6 @@
5052
import javax.xml.parsers.DocumentBuilderFactory;
5153
import javax.xml.parsers.ParserConfigurationException;
5254

53-
import com.cloud.network.router.CommandSetupHelper;
54-
import com.cloud.network.router.NetworkHelper;
5555
import org.apache.cloudstack.acl.ControlledEntity;
5656
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
5757
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -117,6 +117,7 @@
117117
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
118118
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
119119
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
120+
import org.apache.cloudstack.utils.bytescale.ByteScaleUtils;
120121
import org.apache.commons.codec.binary.Base64;
121122
import org.apache.commons.collections.CollectionUtils;
122123
import org.apache.commons.collections.MapUtils;
@@ -247,6 +248,8 @@
247248
import com.cloud.network.element.UserDataServiceProvider;
248249
import com.cloud.network.guru.NetworkGuru;
249250
import com.cloud.network.lb.LoadBalancingRulesManager;
251+
import com.cloud.network.router.CommandSetupHelper;
252+
import com.cloud.network.router.NetworkHelper;
250253
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
251254
import com.cloud.network.rules.FirewallManager;
252255
import com.cloud.network.rules.FirewallRuleVO;
@@ -355,10 +358,6 @@
355358
import com.cloud.vm.snapshot.VMSnapshotManager;
356359
import com.cloud.vm.snapshot.VMSnapshotVO;
357360
import com.cloud.vm.snapshot.dao.VMSnapshotDao;
358-
import java.util.HashSet;
359-
import org.apache.cloudstack.utils.bytescale.ByteScaleUtils;
360-
361-
import static com.cloud.configuration.ConfigurationManagerImpl.VM_USERDATA_MAX_LENGTH;
362361

363362
public class UserVmManagerImpl extends ManagerBase implements UserVmManager, VirtualMachineGuru, UserVmService, Configurable {
364363
private static final Logger s_logger = Logger.getLogger(UserVmManagerImpl.class);
@@ -3831,11 +3830,15 @@ private UserVm createVirtualMachine(DataCenter zone, ServiceOffering serviceOffe
38313830
// check if account/domain is with in resource limits to create a new vm
38323831
boolean isIso = Storage.ImageFormat.ISO == template.getFormat();
38333832

3834-
long size = configureCustomRootDiskSize(customParameters, template, hypervisorType, offering);
3833+
long volumesSize = configureCustomRootDiskSize(customParameters, template, hypervisorType, offering);
38353834

38363835
if (diskOfferingId != null) {
3836+
long size = 0;
38373837
DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId);
3838-
if (diskOffering != null && diskOffering.isCustomized()) {
3838+
if (diskOffering == null) {
3839+
throw new InvalidParameterValueException("Specified disk offering cannot be found");
3840+
}
3841+
if (diskOffering.isCustomized()) {
38393842
if (diskSize == null) {
38403843
throw new InvalidParameterValueException("This disk offering requires a custom size specified");
38413844
}
@@ -3845,16 +3848,19 @@ private UserVm createVirtualMachine(DataCenter zone, ServiceOffering serviceOffe
38453848
throw new InvalidParameterValueException("VM Creation failed. Volume size: " + diskSize + "GB is out of allowed range. Max: " + customDiskOfferingMaxSize
38463849
+ " Min:" + customDiskOfferingMinSize);
38473850
}
3848-
size += diskSize * GiB_TO_BYTES;
3851+
size = diskSize * GiB_TO_BYTES;
3852+
} else {
3853+
size = diskOffering.getDiskSize();
38493854
}
3850-
size += _diskOfferingDao.findById(diskOfferingId).getDiskSize();
3855+
_volumeService.validateVolumeSizeInBytes(size);
3856+
volumesSize += size;
38513857
}
38523858
if (! VirtualMachineManager.ResourceCountRunningVMsonly.value()) {
38533859
resourceLimitCheck(owner, isDisplayVm, new Long(offering.getCpu()), new Long(offering.getRamSize()));
38543860
}
38553861

38563862
_resourceLimitMgr.checkResourceLimit(owner, ResourceType.volume, (isIso || diskOfferingId == null ? 1 : 2));
3857-
_resourceLimitMgr.checkResourceLimit(owner, ResourceType.primary_storage, size);
3863+
_resourceLimitMgr.checkResourceLimit(owner, ResourceType.primary_storage, volumesSize);
38583864

38593865
// verify security group ids
38603866
if (securityGroupIdList != null) {
@@ -4177,6 +4183,7 @@ protected long configureCustomRootDiskSize(Map<String, String> customParameters,
41774183
DiskOfferingVO diskOffering = _diskOfferingDao.findById(serviceOffering.getId());
41784184
long rootDiskSizeInBytes = diskOffering.getDiskSize();
41794185
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
4186+
_volumeService.validateVolumeSizeInBytes(rootDiskSizeInBytes);
41804187
long rootDiskSizeInGiB = rootDiskSizeInBytes / GiB_TO_BYTES;
41814188
customParameters.put(VmDetailConstants.ROOT_DISK_SIZE, String.valueOf(rootDiskSizeInGiB));
41824189
return rootDiskSizeInBytes;
@@ -4187,7 +4194,9 @@ protected long configureCustomRootDiskSize(Map<String, String> customParameters,
41874194
if (rootDiskSize <= 0) {
41884195
throw new InvalidParameterValueException("Root disk size should be a positive number.");
41894196
}
4190-
return rootDiskSize * GiB_TO_BYTES;
4197+
rootDiskSize *= GiB_TO_BYTES;
4198+
_volumeService.validateVolumeSizeInBytes(rootDiskSize);
4199+
return rootDiskSize;
41914200
} else {
41924201
// For baremetal, size can be 0 (zero)
41934202
Long templateSize = _templateDao.findById(template.getId()).getSize();

0 commit comments

Comments
 (0)