mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	fix_filter_and_pagination (#8306)
Co-authored-by: Gabriel <gabriel.fernandes@scclouds.com.br>
This commit is contained in:
		
							parent
							
								
									f86c62e49a
								
							
						
					
					
						commit
						6f3e4e6302
					
				@ -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);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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()) {
 | 
			
		||||
 | 
			
		||||
@ -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.");
 | 
			
		||||
 | 
			
		||||
@ -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) {
 | 
			
		||||
 | 
			
		||||
@ -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()) {
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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>();
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user