diff --git a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java index cc6ceca5d60..38ef8ddde2b 100644 --- a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java +++ b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java @@ -208,6 +208,8 @@ public class StorageSystemDataMotionStrategy implements DataMotionStrategy { private VolumeDataFactory _volFactory; @Inject ResourceManager resourceManager; + @Inject + private ClvmLockManager clvmLockManager; @Override public StrategyPriority canHandle(DataObject srcData, DataObject destData) { @@ -2073,6 +2075,13 @@ public class StorageSystemDataMotionStrategy implements DataMotionStrategy { setVolumeMigrationOptions(srcVolumeInfo, destVolumeInfo, vmTO, srcHost, destStoragePool, migrationType); + if (ClvmLockManager.isClvmPoolType(destStoragePool.getPoolType())) { + destVolumeInfo.setDestinationHostId(destHost.getId()); + clvmLockManager.setClvmLockHostId(destVolume.getId(), destHost.getId()); + logger.info("Set CLVM lock host {} for volume {} during migration to ensure creation on destination host", + destHost.getId(), destVolumeInfo.getUuid()); + } + // create a volume on the destination storage destDataStore.getDriver().createAsync(destDataStore, destVolumeInfo, null); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index 695b7caa60c..c85499e8b0b 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -2652,10 +2652,11 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { throw new CloudRuntimeException("Failed to create QCOW2 on CLVM_NG volume: " + result); } + long actualSize = getClvmVolumeSize(volumePath); KVMPhysicalDisk disk = new KVMPhysicalDisk(volumePath, volumeUuid, pool); disk.setFormat(PhysicalDiskFormat.QCOW2); - disk.setSize(lvSize); - disk.setVirtualSize(virtualSize); + disk.setSize(actualSize); + disk.setVirtualSize(actualSize); logger.info("Successfully created CLVM_NG volume {} with backing file (LV size: {}, virtual size: {}, provisioning: {}, preallocation: {})", volumeUuid, lvSize, virtualSize, provisioningType, preallocation);