diff --git a/compute/src/main/java/org/zstack/compute/allocator/AttachedVolumePrimaryStorageAllocatorFlow.java b/compute/src/main/java/org/zstack/compute/allocator/AttachedVolumePrimaryStorageAllocatorFlow.java index ed8ff7c9e0..ffeda2c86b 100755 --- a/compute/src/main/java/org/zstack/compute/allocator/AttachedVolumePrimaryStorageAllocatorFlow.java +++ b/compute/src/main/java/org/zstack/compute/allocator/AttachedVolumePrimaryStorageAllocatorFlow.java @@ -31,7 +31,7 @@ public class AttachedVolumePrimaryStorageAllocatorFlow extends AbstractHostAlloc public void allocate() { throwExceptionIfIAmTheFirstFlow(); - if (VmOperation.NewCreate.toString().equals(spec.getVmOperation())) { + if (VmOperation.NewCreate.toString().equals(spec.getVmOperation()) || VmOperation.MigrateStorage.toString().equals(spec.getVmOperation())) { next(candidates); return; } diff --git a/compute/src/main/java/org/zstack/compute/allocator/HostPrimaryStorageAllocatorFlow.java b/compute/src/main/java/org/zstack/compute/allocator/HostPrimaryStorageAllocatorFlow.java index b2ace6d403..085cd065d7 100755 --- a/compute/src/main/java/org/zstack/compute/allocator/HostPrimaryStorageAllocatorFlow.java +++ b/compute/src/main/java/org/zstack/compute/allocator/HostPrimaryStorageAllocatorFlow.java @@ -141,11 +141,11 @@ private List filterHostHavingAccessiblePrimaryStorage(List huuid private List allocateFromCandidates() { List huuids = getHostUuidsFromCandidates(); Set requiredPsUuids = spec.getRequiredPrimaryStorageUuids(); - if (!VmOperation.NewCreate.toString().equals(spec.getVmOperation())) { - return filterHostHavingAccessiblePrimaryStorage(huuids, spec); - } else { + if (VmOperation.NewCreate.toString().equals(spec.getVmOperation()) || VmOperation.MigrateStorage.toString().equals(spec.getVmOperation())) { huuids = filterHostHavingAccessiblePrimaryStorage(huuids, spec) .stream().map(ResourceVO::getUuid).collect(Collectors.toList()); + } else { + return filterHostHavingAccessiblePrimaryStorage(huuids, spec); } if (huuids.isEmpty()) { diff --git a/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java b/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java index 896e60e414..4809cea710 100755 --- a/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java +++ b/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java @@ -59,6 +59,7 @@ enum VmOperation { Reboot, Destroy, Migrate, + MigrateStorage, AttachVolume, AttachNic, ChangeNicNetwork, diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostAllocatorFilterExtensionPoint.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostAllocatorFilterExtensionPoint.java index 5c12980bb5..5d4f250c25 100644 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostAllocatorFilterExtensionPoint.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostAllocatorFilterExtensionPoint.java @@ -5,6 +5,7 @@ import org.zstack.header.allocator.HostAllocatorSpec; import org.zstack.header.host.HostVO; import org.zstack.header.vm.VmInstanceConstant; +import org.zstack.header.vm.VmInstanceConstant.VmOperation; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; @@ -171,7 +172,7 @@ public List filterHostCandidates(List candidates, HostAllocatorS return candidates; } - if (!VmInstanceConstant.VmOperation.Migrate.toString().equals(spec.getVmOperation())) { + if (!VmOperation.Migrate.toString().equals(spec.getVmOperation()) && !VmOperation.MigrateStorage.toString().equals(spec.getVmOperation())) { return candidates; } diff --git a/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java b/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java index 9d84ec2a0f..711a203fc3 100755 --- a/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java +++ b/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java @@ -107,7 +107,7 @@ public boolean stop() { public List filterHostCandidates(List candidates, HostAllocatorSpec spec) { long reservedCapacity = SizeUtils.sizeStringToBytes(PrimaryStorageGlobalConfig.RESERVED_CAPACITY.value()); - if (VmOperation.NewCreate.toString().equals(spec.getVmOperation())) { + if (VmOperation.NewCreate.toString().equals(spec.getVmOperation()) || VmOperation.MigrateStorage.toString().equals(spec.getVmOperation())) { List huuids = getNeedCheckHostLocalStorageList(candidates, spec); if (huuids.isEmpty()) { return candidates;