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

Reply via email to