This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new 6f3e4e63022 fix_filter_and_pagination (#8306)
6f3e4e63022 is described below

commit 6f3e4e6302265c78273256d743ac407c77106888
Author: GaOrtiga <[email protected]>
AuthorDate: Fri Feb 16 07:15:55 2024 -0300

    fix_filter_and_pagination (#8306)
    
    Co-authored-by: Gabriel <[email protected]>
---
 .../java/com/cloud/server/ManagementService.java   |  3 ++-
 .../storage/FindStoragePoolsForMigrationCmd.java   |  5 ++--
 .../api/storage/StoragePoolAllocator.java          |  3 +++
 .../storage/datastore/db/PrimaryDataStoreDao.java  |  8 ++++++-
 .../datastore/db/PrimaryDataStoreDaoImpl.java      | 28 ++++++++++++++++++++--
 .../allocator/AbstractStoragePoolAllocator.java    | 10 +++++---
 .../ClusterScopeStoragePoolAllocator.java          |  2 +-
 .../GarbageCollectingStoragePoolAllocator.java     |  2 +-
 .../allocator/LocalStoragePoolAllocator.java       |  4 ++--
 .../allocator/ZoneWideStoragePoolAllocator.java    |  2 +-
 .../AbstractStoragePoolAllocatorTest.java          |  2 +-
 .../allocator/RandomStoragePoolAllocator.java      |  2 +-
 .../com/cloud/server/ManagementServerImpl.java     | 22 ++++++++---------
 13 files changed, 66 insertions(+), 27 deletions(-)

diff --git a/api/src/main/java/com/cloud/server/ManagementService.java 
b/api/src/main/java/com/cloud/server/ManagementService.java
index e87f6b362da..18f3e901cd9 100644
--- a/api/src/main/java/com/cloud/server/ManagementService.java
+++ b/api/src/main/java/com/cloud/server/ManagementService.java
@@ -449,10 +449,11 @@ public interface ManagementService {
      * this method removes the child storage pools and adds the corresponding 
parent datastore cluster for API response listing
      *
      * @param Long volumeId
+     * @param String keyword if passed, will only return storage pools that 
contain this keyword in the name
      * @return Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
List of storage pools in cluster and list
      *         of pools with enough capacity.
      */
-    Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForMigrationOfVolume(Long volumeId);
+    Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForMigrationOfVolume(Long volumeId, String keyword);
 
     Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForSystemMigrationOfVolume(Long volumeId, Long 
newDiskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, boolean 
keepSourceStoragePool, boolean bypassStorageTypeCheck);
 
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
index 699f4831415..b19fa78bdd4 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
@@ -67,7 +67,7 @@ public class FindStoragePoolsForMigrationCmd extends 
BaseListCmd {
 
     @Override
     public void execute() {
-        Pair<List<? extends StoragePool>, List<? extends StoragePool>> pools = 
_mgr.listStoragePoolsForMigrationOfVolume(getId());
+        Pair<List<? extends StoragePool>, List<? extends StoragePool>> pools = 
_mgr.listStoragePoolsForMigrationOfVolume(getId(), getKeyword());
         ListResponse<StoragePoolResponse> response = new 
ListResponse<StoragePoolResponse>();
         List<StoragePoolResponse> poolResponses = new 
ArrayList<StoragePoolResponse>();
 
@@ -87,7 +87,8 @@ public class FindStoragePoolsForMigrationCmd extends 
BaseListCmd {
             poolResponses.add(poolResponse);
         }
         sortPoolsBySuitabilityAndName(poolResponses);
-        response.setResponses(poolResponses);
+        List<StoragePoolResponse> pagingList = 
com.cloud.utils.StringUtils.applyPagination(poolResponses, 
this.getStartIndex(), this.getPageSizeVal());
+        response.setResponses(pagingList, poolResponses.size());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }
diff --git 
a/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
 
b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
index fde71fe0d4c..6a78f6fe253 100644
--- 
a/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
+++ 
b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
@@ -52,9 +52,12 @@ public interface StoragePoolAllocator extends Adapter {
      *            avoid
      * @param int returnUpTo (use -1 to return all possible pools)
      * @param boolean bypassStorageTypeCheck allows bypassing useLocalStorage 
check for provided DiskProfile when true
+     * @param String keyword if passed, will only return storage pools that 
contain this keyword in the name
      * @return List<StoragePool> List of storage pools that are suitable for 
the
      *         VM
      **/
+    List<StoragePool> allocateToPool(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck, String keyword);
+
     List<StoragePool> allocateToPool(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck);
 
 
diff --git 
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
 
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
index 8f77b4ba63e..92b7ad27e45 100644
--- 
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
+++ 
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
@@ -39,6 +39,8 @@ public interface PrimaryDataStoreDao extends 
GenericDao<StoragePoolVO, Long> {
      */
     List<StoragePoolVO> listBy(long datacenterId, Long podId, Long clusterId, 
ScopeType scope);
 
+    List<StoragePoolVO> listBy(long datacenterId, Long podId, Long clusterId, 
ScopeType scope, String keyword);
+
     /**
      * Set capacity of storage pool in bytes
      * @param id pool id.
@@ -114,15 +116,19 @@ public interface PrimaryDataStoreDao extends 
GenericDao<StoragePoolVO, Long> {
 
     List<StoragePoolVO> findLocalStoragePoolsByTags(long dcId, long podId, 
Long clusterId, String[] tags, boolean validateTagRule);
 
+    List<StoragePoolVO> findLocalStoragePoolsByTags(long dcId, long podId, 
Long clusterId, String[] tags, boolean validateTagRule, String keyword);
+
     List<StoragePoolVO> findZoneWideStoragePoolsByTags(long dcId, String[] 
tags, boolean validateTagRule);
 
     List<StoragePoolVO> findZoneWideStoragePoolsByHypervisor(long 
dataCenterId, HypervisorType hypervisorType);
 
+    List<StoragePoolVO> findZoneWideStoragePoolsByHypervisor(long 
dataCenterId, HypervisorType hypervisorType, String keyword);
+
     List<StoragePoolVO> findLocalStoragePoolsByHostAndTags(long hostId, 
String[] tags);
 
     List<StoragePoolVO> listLocalStoragePoolByPath(long datacenterId, String 
path);
 
-    List<StoragePoolVO> findPoolsInClusters(List<Long> clusterIds);
+    List<StoragePoolVO> findPoolsInClusters(List<Long> clusterIds, String 
keyword);
 
     void deletePoolTags(long poolId);
 
diff --git 
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
 
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
index af7dbdc0225..554500e2b34 100644
--- 
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
+++ 
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
@@ -243,6 +243,11 @@ public class PrimaryDataStoreDaoImpl extends 
GenericDaoBase<StoragePoolVO, Long>
 
     @Override
     public List<StoragePoolVO> listBy(long datacenterId, Long podId, Long 
clusterId, ScopeType scope) {
+        return listBy(datacenterId, podId, clusterId, scope, null);
+    }
+
+    @Override
+    public List<StoragePoolVO> listBy(long datacenterId, Long podId, Long 
clusterId, ScopeType scope, String keyword) {
         SearchCriteria<StoragePoolVO> sc = null;
         if (clusterId != null) {
             sc = DcPodSearch.create();
@@ -254,6 +259,9 @@ public class PrimaryDataStoreDaoImpl extends 
GenericDaoBase<StoragePoolVO, Long>
         sc.setParameters("datacenterId", datacenterId);
         sc.setParameters("podId", podId);
         sc.setParameters("status", Status.Up);
+        if (keyword != null) {
+            sc.addAnd("name", Op.LIKE,  "%" + keyword + "%");
+        }
         if (scope != null) {
             sc.setParameters("scope", scope);
         }
@@ -443,9 +451,14 @@ public class PrimaryDataStoreDaoImpl extends 
GenericDaoBase<StoragePoolVO, Long>
 
     @Override
     public List<StoragePoolVO> findLocalStoragePoolsByTags(long dcId, long 
podId, Long clusterId, String[] tags, boolean validateTagRule) {
+        return findLocalStoragePoolsByTags(dcId, podId, clusterId, tags, 
validateTagRule, null);
+    }
+
+    @Override
+    public List<StoragePoolVO> findLocalStoragePoolsByTags(long dcId, long 
podId, Long clusterId, String[] tags, boolean validateTagRule, String keyword) {
         List<StoragePoolVO> storagePools = null;
         if (tags == null || tags.length == 0) {
-            storagePools = listBy(dcId, podId, clusterId, ScopeType.HOST);
+            storagePools = listBy(dcId, podId, clusterId, ScopeType.HOST, 
keyword);
 
             if (validateTagRule) {
                 storagePools = getPoolsWithoutTagRule(storagePools);
@@ -582,11 +595,19 @@ public class PrimaryDataStoreDaoImpl extends 
GenericDaoBase<StoragePoolVO, Long>
 
     @Override
     public List<StoragePoolVO> findZoneWideStoragePoolsByHypervisor(long 
dataCenterId, HypervisorType hypervisorType) {
+        return findZoneWideStoragePoolsByHypervisor(dataCenterId, 
hypervisorType, null);
+    }
+
+    @Override
+    public List<StoragePoolVO> findZoneWideStoragePoolsByHypervisor(long 
dataCenterId, HypervisorType hypervisorType, String keyword) {
         QueryBuilder<StoragePoolVO> sc = 
QueryBuilder.create(StoragePoolVO.class);
         sc.and(sc.entity().getDataCenterId(), Op.EQ, dataCenterId);
         sc.and(sc.entity().getStatus(), Op.EQ, Status.Up);
         sc.and(sc.entity().getScope(), Op.EQ, ScopeType.ZONE);
         sc.and(sc.entity().getHypervisor(), Op.EQ, hypervisorType);
+        if (keyword != null) {
+            sc.and(sc.entity().getName(), Op.LIKE,  "%" + keyword + "%");
+        }
         return sc.list();
     }
 
@@ -611,10 +632,13 @@ public class PrimaryDataStoreDaoImpl extends 
GenericDaoBase<StoragePoolVO, Long>
     }
 
     @Override
-    public List<StoragePoolVO> findPoolsInClusters(List<Long> clusterIds) {
+    public List<StoragePoolVO> findPoolsInClusters(List<Long> clusterIds, 
String keyword) {
         SearchCriteria<StoragePoolVO> sc = ClustersSearch.create();
         sc.setParameters("clusterIds", clusterIds.toArray());
         sc.setParameters("status", StoragePoolStatus.Up);
+        if (keyword != null) {
+            sc.addAnd("name", Op.LIKE, "%" + keyword + "%");
+        }
         return listBy(sc);
     }
 
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
index 89a7b577ae7..2a65fad8e8b 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
@@ -106,16 +106,20 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
         return false;
     }
 
-    protected abstract List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck);
+    protected abstract List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck, String keyword);
 
     @Override
     public List<StoragePool> allocateToPool(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo) {
-        return allocateToPool(dskCh, vmProfile, plan, avoid, returnUpTo, 
false);
+        return allocateToPool(dskCh, vmProfile, plan, avoid, returnUpTo, 
false, null);
     }
 
     @Override
     public List<StoragePool> allocateToPool(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck) {
-        List<StoragePool> pools = select(dskCh, vmProfile, plan, avoid, 
returnUpTo, bypassStorageTypeCheck);
+        return allocateToPool(dskCh, vmProfile, plan, avoid, returnUpTo, 
bypassStorageTypeCheck, null);
+    }
+
+    public List<StoragePool> allocateToPool(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck, String keyword) {
+        List<StoragePool> pools = select(dskCh, vmProfile, plan, avoid, 
returnUpTo, bypassStorageTypeCheck, keyword);
         return reorderPools(pools, vmProfile, plan, dskCh);
     }
 
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
index 9c0f84ab14a..da35baf9366 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
@@ -46,7 +46,7 @@ public class ClusterScopeStoragePoolAllocator extends 
AbstractStoragePoolAllocat
     DiskOfferingDao _diskOfferingDao;
 
     @Override
-    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck) {
+    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck, String keyword) {
         logStartOfSearch(dskCh, vmProfile, plan, returnUpTo, 
bypassStorageTypeCheck);
 
         if (!bypassStorageTypeCheck && dskCh.useLocalStorage()) {
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
index 3fa69499ff1..9b9f56d4aa5 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
@@ -47,7 +47,7 @@ public class GarbageCollectingStoragePoolAllocator extends 
AbstractStoragePoolAl
     boolean _storagePoolCleanupEnabled;
 
     @Override
-    public List<StoragePool> select(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck) {
+    public List<StoragePool> select(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck, String keyword) {
         logStartOfSearch(dskCh, vmProfile, plan, returnUpTo, 
bypassStorageTypeCheck);
         if (!_storagePoolCleanupEnabled) {
             s_logger.debug("Storage pool cleanup is not enabled, so 
GarbageCollectingStoragePoolAllocator is being skipped.");
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
index 4ec15b9e43f..7ec2f26d956 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
@@ -60,7 +60,7 @@ public class LocalStoragePoolAllocator extends 
AbstractStoragePoolAllocator {
     ConfigurationDao _configDao;
 
     @Override
-    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck) {
+    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck, String keyword) {
         logStartOfSearch(dskCh, vmProfile, plan, returnUpTo, 
bypassStorageTypeCheck);
 
         if (!bypassStorageTypeCheck && !dskCh.useLocalStorage()) {
@@ -101,7 +101,7 @@ public class LocalStoragePoolAllocator extends 
AbstractStoragePoolAllocator {
                 return null;
             }
             List<StoragePoolVO> availablePools =
-                
storagePoolDao.findLocalStoragePoolsByTags(plan.getDataCenterId(), 
plan.getPodId(), plan.getClusterId(), dskCh.getTags(), true);
+                
storagePoolDao.findLocalStoragePoolsByTags(plan.getDataCenterId(), 
plan.getPodId(), plan.getClusterId(), dskCh.getTags(), true, keyword);
             
availablePools.addAll(storagePoolJoinDao.findStoragePoolByScopeAndRuleTags(plan.getDataCenterId(),
 plan.getPodId(), plan.getClusterId(), ScopeType.HOST, 
List.of(dskCh.getTags())));
             for (StoragePoolVO pool : availablePools) {
                 if (suitablePools.size() == returnUpTo) {
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
index ba130b4e2e5..b02d437207e 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
@@ -50,7 +50,7 @@ public class ZoneWideStoragePoolAllocator extends 
AbstractStoragePoolAllocator {
     private CapacityDao capacityDao;
 
     @Override
-    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck) {
+    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int 
returnUpTo, boolean bypassStorageTypeCheck, String keyword) {
         logStartOfSearch(dskCh, vmProfile, plan, returnUpTo, 
bypassStorageTypeCheck);
 
         if (!bypassStorageTypeCheck && dskCh.useLocalStorage()) {
diff --git 
a/engine/storage/src/test/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocatorTest.java
 
b/engine/storage/src/test/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocatorTest.java
index 466ae7db9bc..cddbc9e93cb 100644
--- 
a/engine/storage/src/test/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocatorTest.java
+++ 
b/engine/storage/src/test/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocatorTest.java
@@ -137,7 +137,7 @@ public class AbstractStoragePoolAllocatorTest {
 class MockStorapoolAllocater extends AbstractStoragePoolAllocator {
 
     @Override
-    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, 
DeploymentPlanner.ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck) {
+    protected List<StoragePool> select(DiskProfile dskCh, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, 
DeploymentPlanner.ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck, String keyword) {
         return null;
     }
 }
diff --git 
a/plugins/storage-allocators/random/src/main/java/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
 
b/plugins/storage-allocators/random/src/main/java/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
index 9787e618f0f..87a6bf56a6e 100644
--- 
a/plugins/storage-allocators/random/src/main/java/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
+++ 
b/plugins/storage-allocators/random/src/main/java/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
@@ -35,7 +35,7 @@ public class RandomStoragePoolAllocator extends 
AbstractStoragePoolAllocator {
     private static final Logger s_logger = 
Logger.getLogger(RandomStoragePoolAllocator.class);
 
     @Override
-    public List<StoragePool> select(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck) {
+    public List<StoragePool> select(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo, boolean 
bypassStorageTypeCheck, String keyword) {
         logStartOfSearch(dskCh, vmProfile, plan, returnUpTo, 
bypassStorageTypeCheck);
 
         List<StoragePool> suitablePools = new ArrayList<StoragePool>();
diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java 
b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
index f794736a4d5..430222a78ac 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -1630,9 +1630,9 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
     }
 
     @Override
-    public Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForMigrationOfVolume(final Long volumeId) {
+    public Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForMigrationOfVolume(final Long volumeId, String keyword) {
 
-        Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
allPoolsAndSuitablePoolsPair = 
listStoragePoolsForMigrationOfVolumeInternal(volumeId, null, null, null, null, 
false, true, false);
+        Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
allPoolsAndSuitablePoolsPair = 
listStoragePoolsForMigrationOfVolumeInternal(volumeId, null, null, null, null, 
false, true, false, keyword);
         List<? extends StoragePool> allPools = 
allPoolsAndSuitablePoolsPair.first();
         List<? extends StoragePool> suitablePools = 
allPoolsAndSuitablePoolsPair.second();
         List<StoragePool> avoidPools = new ArrayList<>();
@@ -1650,10 +1650,10 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
 
     @Override
     public Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForSystemMigrationOfVolume(final Long volumeId, Long 
newDiskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, boolean 
keepSourceStoragePool, boolean bypassStorageTypeCheck) {
-        return listStoragePoolsForMigrationOfVolumeInternal(volumeId, 
newDiskOfferingId, newSize, newMinIops, newMaxIops, keepSourceStoragePool, 
bypassStorageTypeCheck, true);
+        return listStoragePoolsForMigrationOfVolumeInternal(volumeId, 
newDiskOfferingId, newSize, newMinIops, newMaxIops, keepSourceStoragePool, 
bypassStorageTypeCheck, true, null);
     }
 
-    public Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForMigrationOfVolumeInternal(final Long volumeId, Long 
newDiskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, boolean 
keepSourceStoragePool, boolean bypassStorageTypeCheck, boolean 
bypassAccountCheck) {
+    public Pair<List<? extends StoragePool>, List<? extends StoragePool>> 
listStoragePoolsForMigrationOfVolumeInternal(final Long volumeId, Long 
newDiskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, boolean 
keepSourceStoragePool, boolean bypassStorageTypeCheck, boolean 
bypassAccountCheck, String keyword) {
         if (!bypassAccountCheck) {
             final Account caller = getCaller();
             if (!_accountMgr.isRootAdmin(caller.getId())) {
@@ -1728,7 +1728,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         Pair<Host, List<Cluster>> hostClusterPair = 
getVolumeVmHostClusters(srcVolumePool, vm, hypervisorType);
         Host vmHost = hostClusterPair.first();
         List<Cluster> clusters = hostClusterPair.second();
-        allPools = 
getAllStoragePoolCompatibleWithVolumeSourceStoragePool(srcVolumePool, 
hypervisorType, clusters);
+        allPools = 
getAllStoragePoolCompatibleWithVolumeSourceStoragePool(srcVolumePool, 
hypervisorType, clusters, keyword);
         ExcludeList avoid = new ExcludeList();
         if (!keepSourceStoragePool) {
             allPools.remove(srcVolumePool);
@@ -1736,7 +1736,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         }
         if (vm != null) {
             suitablePools = findAllSuitableStoragePoolsForVm(volume, 
diskOfferingId, newSize, newMinIops, newMaxIops, vm, vmHost, avoid,
-                    CollectionUtils.isNotEmpty(clusters) ? clusters.get(0) : 
null, hypervisorType, bypassStorageTypeCheck);
+                    CollectionUtils.isNotEmpty(clusters) ? clusters.get(0) : 
null, hypervisorType, bypassStorageTypeCheck, keyword);
         } else {
             suitablePools = 
findAllSuitableStoragePoolsForDetachedVolume(volume, diskOfferingId, allPools);
         }
@@ -1803,15 +1803,15 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
      *  <li>We also all storage available filtering by data center, pod and 
cluster as the current storage pool used by the given volume.</li>
      * </ul>
      */
-    private List<? extends StoragePool> 
getAllStoragePoolCompatibleWithVolumeSourceStoragePool(StoragePool 
srcVolumePool, HypervisorType hypervisorType, List<Cluster> clusters) {
+    private List<? extends StoragePool> 
getAllStoragePoolCompatibleWithVolumeSourceStoragePool(StoragePool 
srcVolumePool, HypervisorType hypervisorType, List<Cluster> clusters, String 
keyword) {
         List<StoragePoolVO> storagePools = new ArrayList<>();
-        List<StoragePoolVO> zoneWideStoragePools = 
_poolDao.findZoneWideStoragePoolsByHypervisor(srcVolumePool.getDataCenterId(), 
hypervisorType);
+        List<StoragePoolVO> zoneWideStoragePools = 
_poolDao.findZoneWideStoragePoolsByHypervisor(srcVolumePool.getDataCenterId(), 
hypervisorType, keyword);
         if (CollectionUtils.isNotEmpty(zoneWideStoragePools)) {
             storagePools.addAll(zoneWideStoragePools);
         }
         if (CollectionUtils.isNotEmpty(clusters)) {
             List<Long> clusterIds = 
clusters.stream().map(Cluster::getId).collect(Collectors.toList());
-            List<StoragePoolVO> clusterAndLocalStoragePools = 
_poolDao.findPoolsInClusters(clusterIds);
+            List<StoragePoolVO> clusterAndLocalStoragePools = 
_poolDao.findPoolsInClusters(clusterIds, keyword);
             if (CollectionUtils.isNotEmpty(clusterAndLocalStoragePools)) {
                 storagePools.addAll(clusterAndLocalStoragePools);
             }
@@ -1827,7 +1827,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
      *
      *  Side note: the idea behind this method is to provide power for 
administrators of manually overriding deployments defined by CloudStack.
      */
-    private List<StoragePool> findAllSuitableStoragePoolsForVm(final VolumeVO 
volume, Long diskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, 
VMInstanceVO vm, Host vmHost, ExcludeList avoid, Cluster srcCluster, 
HypervisorType hypervisorType, boolean bypassStorageTypeCheck) {
+    private List<StoragePool> findAllSuitableStoragePoolsForVm(final VolumeVO 
volume, Long diskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, 
VMInstanceVO vm, Host vmHost, ExcludeList avoid, Cluster srcCluster, 
HypervisorType hypervisorType, boolean bypassStorageTypeCheck, String keyword) {
         List<StoragePool> suitablePools = new ArrayList<>();
         Long clusterId = null;
         Long podId = null;
@@ -1849,7 +1849,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         }
 
         for (StoragePoolAllocator allocator : _storagePoolAllocators) {
-            List<StoragePool> pools = allocator.allocateToPool(diskProfile, 
profile, plan, avoid, StoragePoolAllocator.RETURN_UPTO_ALL, 
bypassStorageTypeCheck);
+            List<StoragePool> pools = allocator.allocateToPool(diskProfile, 
profile, plan, avoid, StoragePoolAllocator.RETURN_UPTO_ALL, 
bypassStorageTypeCheck, keyword);
             if (CollectionUtils.isEmpty(pools)) {
                 continue;
             }

Reply via email to