This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 3936f7c2cf0 vm-import: kvm import and fix volume size when lesser than
1GiB (#8500)
3936f7c2cf0 is described below
commit 3936f7c2cf04bd09f5fe9598c4d3628d7319356f
Author: Abhishek Kumar <[email protected]>
AuthorDate: Fri Jan 12 18:02:02 2024 +0530
vm-import: kvm import and fix volume size when lesser than 1GiB (#8500)
Signed-off-by: Abhishek Kumar <[email protected]>
Co-authored-by: Daan Hoogland <[email protected]>
---
.../orchestration/service/VolumeOrchestrationService.java | 4 ++--
.../cloudstack/engine/orchestration/VolumeOrchestrator.java | 10 ++++------
.../java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java | 8 ++++----
3 files changed, 10 insertions(+), 12 deletions(-)
diff --git
a/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
b/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
index 01123401fac..c4fbc2505aa 100644
---
a/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
+++
b/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
@@ -153,7 +153,7 @@ public interface VolumeOrchestrationService {
* @param type Type of the volume - ROOT, DATADISK, etc
* @param name Name of the volume
* @param offering DiskOffering for the volume
- * @param size DiskOffering for the volume
+ * @param sizeInBytes size of the volume in bytes
* @param minIops minimum IOPS for the disk, if not passed DiskOffering
value will be used
* @param maxIops maximum IOPS for the disk, if not passed DiskOffering
value will be used
* @param vm VirtualMachine this volume is attached to
@@ -165,7 +165,7 @@ public interface VolumeOrchestrationService {
* @param chainInfo chain info for the volume. Hypervisor specific.
* @return DiskProfile of imported volume
*/
- DiskProfile importVolume(Type type, String name, DiskOffering offering,
Long size, Long minIops, Long maxIops, VirtualMachine vm,
VirtualMachineTemplate template,
+ DiskProfile importVolume(Type type, String name, DiskOffering offering,
Long sizeInBytes, Long minIops, Long maxIops, VirtualMachine vm,
VirtualMachineTemplate template,
Account owner, Long deviceId, Long poolId, String
path, String chainInfo);
DiskProfile updateImportedVolume(Type type, DiskOffering offering,
VirtualMachine vm, VirtualMachineTemplate template,
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 b8f3e5a10e5..e95085d53f6 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
@@ -2172,19 +2172,17 @@ public class VolumeOrchestrator extends ManagerBase
implements VolumeOrchestrati
}
@Override
- public DiskProfile importVolume(Type type, String name, DiskOffering
offering, Long size, Long minIops, Long maxIops,
+ public DiskProfile importVolume(Type type, String name, DiskOffering
offering, Long sizeInBytes, Long minIops, Long maxIops,
VirtualMachine vm, VirtualMachineTemplate
template, Account owner,
Long deviceId, Long poolId, String path,
String chainInfo) {
- if (size == null) {
- size = offering.getDiskSize();
- } else {
- size = (size * 1024 * 1024 * 1024);
+ if (sizeInBytes == null) {
+ sizeInBytes = offering.getDiskSize();
}
minIops = minIops != null ? minIops : offering.getMinIops();
maxIops = maxIops != null ? maxIops : offering.getMaxIops();
- VolumeVO vol = new VolumeVO(type, name, vm.getDataCenterId(),
owner.getDomainId(), owner.getId(), offering.getId(),
offering.getProvisioningType(), size, minIops, maxIops, null);
+ VolumeVO vol = new VolumeVO(type, name, vm.getDataCenterId(),
owner.getDomainId(), owner.getId(), offering.getId(),
offering.getProvisioningType(), sizeInBytes, minIops, maxIops, null);
if (vm != null) {
vol.setInstanceId(vm.getId());
}
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 3179bf12fea..22aa36e6931 100644
--- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
@@ -1113,7 +1113,8 @@ public class UnmanagedVMsManagerImpl implements
UnmanagedVMsManager {
}
allDetails.put(VmDetailConstants.ROOT_DISK_CONTROLLER,
rootDisk.getController());
if (cluster.getHypervisorType() == Hypervisor.HypervisorType.KVM &&
isImportUnmanagedFromSameHypervisor) {
- allDetails.put(VmDetailConstants.ROOT_DISK_SIZE,
String.valueOf(rootDisk.getCapacity() / Resource.ResourceType.bytesToGiB));
+ long size =
Double.valueOf(Math.ceil((double)rootDisk.getCapacity() /
Resource.ResourceType.bytesToGiB)).longValue();
+ allDetails.put(VmDetailConstants.ROOT_DISK_SIZE,
String.valueOf(size));
}
try {
@@ -1172,8 +1173,7 @@ public class UnmanagedVMsManagerImpl implements
UnmanagedVMsManager {
}
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));
+ rootDisk.getCapacity(), minIops, maxIops, template, owner,
null));
long deviceId = 1L;
for (UnmanagedInstanceTO.Disk disk : dataDisks) {
if (disk.getCapacity() == null || disk.getCapacity() == 0) {
@@ -1181,7 +1181,7 @@ public class UnmanagedVMsManagerImpl implements
UnmanagedVMsManager {
}
DiskOffering offering =
diskOfferingDao.findById(dataDiskOfferingMap.get(disk.getDiskId()));
diskProfileStoragePoolList.add(importDisk(disk, userVm,
cluster, offering, Volume.Type.DATADISK, String.format("DATA-%d-%s",
userVm.getId(), disk.getDiskId()),
- (disk.getCapacity() /
Resource.ResourceType.bytesToGiB), offering.getMinIops(), offering.getMaxIops(),
+ disk.getCapacity(), offering.getMinIops(),
offering.getMaxIops(),
template, owner, deviceId));
deviceId++;
}