Amit Aviram has uploaded a new change for review.

Change subject: webadmin: MoveOrCopyDiskModel: postInitStorageDomains 
refactoring.
......................................................................

webadmin: MoveOrCopyDiskModel: postInitStorageDomains refactoring.

postInitStorageDomains function was using multiple filtering on the same
list of storage domains to create destination storage domain list for
each disk model in this model. Going through this list again and again
is redundant, thus this patch changes it to makes a single run on the
domains list and builds the destination array in one iteration.

Change-Id: I7538a341c3a7059b0a6ee369ca1a9b33648df456
Signed-off-by: Amit Aviram <aavi...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
2 files changed, 42 insertions(+), 52 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/55/36555/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
index 07cf87f..9a14754 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
@@ -792,7 +792,7 @@
         for (Guid storageId : storageIds) {
             StorageDomain storageDomain = getStorageById(storageId, 
storageDomains);
             if (storageDomain != null) {
-                list.add(getStorageById(storageId, storageDomains));
+                list.add(storageDomain);
             }
         }
         return list;
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 638639d..2500b1c 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
@@ -183,20 +183,10 @@
             ArrayList<StorageDomain> sourceStorageDomains =
                     Linq.getStorageDomainsByIds(diskStorageIds, 
getActiveStorageDomains());
 
-            // Destination storage domains
-            ArrayList<StorageDomain> destStorageDomains =
-                    Linq.except(getActiveStorageDomains(), 
sourceStorageDomains);
-            destStorageDomains = 
filterStoragesByDatacenterId(destStorageDomains, diskImage.getStoragePoolId());
-
-            if (isFilterDestinationDomainsBySourceType(disk)) {
-                destStorageDomains = 
filterDestinationDomainsByDiskStorageSubtype(destStorageDomains, diskImage);
-            }
-
-            // Filter storage domains with missing template disk
             boolean isDiskBasedOnTemplate = 
!diskImage.getParentId().equals(Guid.Empty);
-            if (isDiskBasedOnTemplate) {
-                destStorageDomains = Linq.except(destStorageDomains, 
getMissingStorages(destStorageDomains, disk));
-            }
+            ArrayList<StorageDomain> destStorageDomains = 
filterDestinationDomains(getActiveStorageDomains(),
+                    sourceStorageDomains,
+                    disk, isDiskBasedOnTemplate);
 
             // Add prohibition reasons
             if (sourceStorageDomains.isEmpty() || 
destStorageDomains.isEmpty()) {
@@ -215,6 +205,44 @@
 
         sortDisks();
         postCopyOrMoveInit();
+    }
+
+    private ArrayList<StorageDomain> 
filterDestinationDomains(ArrayList<StorageDomain> activeStorageDomains,
+            ArrayList<StorageDomain> sourceStorageDomainsToExclude, DiskModel 
diskModel, boolean isDiskBasedOnTemplate) {
+
+        boolean shouldFilterBySourceType = 
isFilterDestinationDomainsBySourceType(diskModel);
+        DiskImage diskImage = ((DiskImage) diskModel.getDisk());
+
+        DiskModel templateDisk = null;
+        if (isDiskBasedOnTemplate) {
+            templateDisk = getTemplateDiskByVmDisk(diskModel);
+        }
+
+        ArrayList<StorageDomain> destinationDomains = new ArrayList<>();
+        for (StorageDomain sd : activeStorageDomains ) {
+            // Storage domain destination should not be a domain which the 
disk is attached to.
+            if (!sourceStorageDomainsToExclude.contains(sd)) {
+                // Destination should be in the same pool as the disk.
+                boolean connectedToSamePool = 
sd.getStoragePoolId().equals(diskImage.getStoragePoolId());
+
+                if (connectedToSamePool) {
+                    boolean hasSameSubType = 
sd.getStorageType().getStorageSubtype() == 
diskImage.getStorageTypes().get(0).getStorageSubtype();
+
+                    if (!shouldFilterBySourceType || (shouldFilterBySourceType 
&& hasSameSubType)) {
+                        boolean isDomainValidForDiskTemplate = true;
+                        if ( templateDisk != null ) {
+                            isDomainValidForDiskTemplate = ((DiskImage) 
templateDisk.getDisk()).getStorageIds().contains(sd.getId());
+                        }
+
+                        if (isDomainValidForDiskTemplate) {
+                            destinationDomains.add(sd);
+                        }
+                    }
+                }
+            }
+        }
+
+        return destinationDomains;
     }
 
     private void updateChangeability(DiskModel disk, boolean 
isDiskBasedOnTemplate, boolean noSources, boolean noTargets) {
@@ -262,34 +290,6 @@
         }
 
         stopProgress();
-    }
-
-    protected ArrayList<StorageDomain> 
filterStoragesByDatacenterId(ArrayList<StorageDomain> storageDomains,
-            Guid diskDatacenterId) {
-
-        ArrayList<StorageDomain> storages = new ArrayList<StorageDomain>();
-        for (StorageDomain storage : storageDomains) {
-            if (storage.getStoragePoolId().equals(diskDatacenterId)) {
-                storages.add(storage);
-            }
-        }
-
-        return storages;
-    }
-
-    protected ArrayList<StorageDomain> 
getMissingStorages(ArrayList<StorageDomain> storageDomains, DiskModel vmdisk) {
-        ArrayList<StorageDomain> missingStorageDomains = new 
ArrayList<StorageDomain>();
-        DiskModel templateDisk = getTemplateDiskByVmDisk(vmdisk);
-
-        if (templateDisk != null) {
-            for (StorageDomain storageDomain : storageDomains) {
-                if (!((DiskImage) 
templateDisk.getDisk()).getStorageIds().contains(storageDomain.getId())) {
-                    missingStorageDomains.add(storageDomain);
-                }
-            }
-        }
-
-        return missingStorageDomains;
     }
 
     protected DiskModel getTemplateDiskByVmDisk(DiskModel vmdisk) {
@@ -355,16 +355,6 @@
         params.setDiskProfileId(disk.getDiskProfileId());
 
         parameters.add(params);
-    }
-
-    protected ArrayList<StorageDomain> 
filterDestinationDomainsByDiskStorageSubtype(List<StorageDomain> destDomains, 
DiskImage disk) {
-        ArrayList<StorageDomain> filteredDomains = new 
ArrayList<StorageDomain>();
-        for (StorageDomain sd : destDomains) {
-            if (sd.getStorageType().getStorageSubtype() == 
disk.getStorageTypes().get(0).getStorageSubtype()) {
-                filteredDomains.add(sd);
-            }
-        }
-        return filteredDomains;
     }
 
     protected boolean isFilterDestinationDomainsBySourceType(DiskModel model) {


-- 
To view, visit http://gerrit.ovirt.org/36555
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7538a341c3a7059b0a6ee369ca1a9b33648df456
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Amit Aviram <aavi...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to