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;
}