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