Tal Nisan has uploaded a new change for review. Change subject: webadmin: Filter domains on disk move dialog from main disk tab ......................................................................
webadmin: Filter domains on disk move dialog from main disk tab Since we currently do not support live storage migration from block domains to file domains and vice versa, the destination domains list will be filtered when moving a disk that is plugged to a running VM (from the main disks tab) Change-Id: Ia28d3acd7ceeaff07745f16af920f8d225e485c7 Signed-off-by: Tal Nisan <[email protected]> Bug-Url: https://bugzilla.redhat.com/1073343 --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java 4 files changed, 59 insertions(+), 21 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/02/26002/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java index b006e895..74a013d 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; @@ -14,9 +15,15 @@ import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; +import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.ICommandTarget; import org.ovirt.engine.ui.uicommonweb.Linq; @@ -26,6 +33,8 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.SelectedQuotaValidation; +import org.ovirt.engine.ui.uicompat.FrontendMultipleQueryAsyncResult; +import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; public abstract class MoveOrCopyDiskModel extends DisksAllocationModel implements ICommandTarget @@ -88,14 +97,47 @@ } protected void onInitDisks() { - ArrayList<DiskModel> disks = new ArrayList<DiskModel>(); + final ArrayList<DiskModel> disks = new ArrayList<DiskModel>(); + + List<VdcQueryType> queries = new ArrayList<VdcQueryType>(); + List<VdcQueryParametersBase> params = new ArrayList<VdcQueryParametersBase>(); + for (DiskImage disk : getDiskImages()) { disks.add(Linq.diskToModel(disk)); + queries.add(VdcQueryType.GetVmsByDiskGuid); + params.add(new IdQueryParameters(disk.getId())); } - setDisks(disks); - initStorageDomains(); + if (getActionType() == VdcActionType.MoveDisks) { + Frontend.getInstance().runMultipleQueries(queries, params, new IFrontendMultipleQueryAsyncCallback() { + @Override + public void executed(FrontendMultipleQueryAsyncResult result) { + for (int i = 0; i < result.getReturnValues().size(); i++) { + Map<Boolean, List<VM>> resultValue = result.getReturnValues().get(i).getReturnValue(); + disks.get(i).setPluggedToRunningVm(!isAllVmsDown(resultValue)); + } + + setDisks(disks); + initStorageDomains(); + } + }); + } + else { + setDisks(disks); + initStorageDomains(); + } + } + + private boolean isAllVmsDown(Map<Boolean, List<VM>> vmsMap) { + if (vmsMap.get(Boolean.TRUE) != null) { + for (VM vm : vmsMap.get(Boolean.TRUE)) { + if (vm.getStatus() != VMStatus.Down) { + return false; + } + } + } + return true; } protected void onInitAllDisks(ArrayList<Disk> disks) { @@ -146,7 +188,7 @@ Linq.except(getActiveStorageDomains(), sourceStorageDomains); destStorageDomains = filterStoragesByDatacenterId(destStorageDomains, diskImage.getStoragePoolId()); - if (isFilterDestinationDomainsBySourceType()) { + if (isFilterDestinationDomainsBySourceType(disk)) { destStorageDomains = filterDestinationDomainsByDiskStorageSubtype(destStorageDomains, diskImage); } @@ -322,7 +364,7 @@ return filteredDomains; } - protected boolean isFilterDestinationDomainsBySourceType() { + protected boolean isFilterDestinationDomainsBySourceType(DiskModel model) { return false; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java index 129d8e1..8d1cd12 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java @@ -23,6 +23,8 @@ private ListModel storageDomain; private ListModel quota; + private boolean pluggedToRunningVm; + public Disk getDisk() { return disk; } @@ -111,6 +113,14 @@ this.quota = quota; } + public boolean isPluggedToRunningVm() { + return pluggedToRunningVm; + } + + public void setPluggedToRunningVm(boolean pluggedToRunningVm) { + this.pluggedToRunningVm = pluggedToRunningVm; + } + public DiskModel() { setSize(new EntityModel()); setAlias(new EntityModel()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java index f2ed339..f4e0171 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java @@ -92,22 +92,9 @@ destStorageDomainGuid); } - - boolean isVmUp; - - // If the VM is up we are in fact performing a live storage migration, in the case the destination storage domain - // to move to has to be the same type (file/block) of the source storage domain - public boolean isVmUp() { - return isVmUp; - } - - public void setVmUp(boolean isVmUp) { - this.isVmUp = isVmUp; - } - @Override - protected boolean isFilterDestinationDomainsBySourceType() { - return isVmUp; + protected boolean isFilterDestinationDomainsBySourceType(DiskModel model) { + return model.isPluggedToRunningVm(); } @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java index 5f01c41..553da78 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java @@ -526,7 +526,6 @@ MoveDiskModel model = new MoveDiskModel(); setWindow(model); boolean vmIsUp = vm.getStatus() == VMStatus.Up; - model.setVmUp(vmIsUp); model.setWarningAvailable(vmIsUp); if (vmIsUp) { model.setMessage(ConstantsManager.getInstance().getConstants().liveStorageMigrationWarning()); -- To view, visit http://gerrit.ovirt.org/26002 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia28d3acd7ceeaff07745f16af920f8d225e485c7 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
