mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Allocation logic to skip datastore cluster and consider only storagepools inside the datastore cluster
This commit is contained in:
		
							parent
							
								
									53fa3beecf
								
							
						
					
					
						commit
						b4a23ea5f6
					
				| @ -238,4 +238,6 @@ public interface StorageManager extends StorageService { | ||||
| 
 | ||||
|     DiskTO getDiskWithThrottling(DataTO volTO, Volume.Type volumeType, long deviceId, String path, long offeringId, long diskOfferingId); | ||||
| 
 | ||||
|     boolean isStoragePoolDatastoreClusterParent(StoragePool pool); | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -123,4 +123,6 @@ public interface PrimaryDataStoreDao extends GenericDao<StoragePoolVO, Long> { | ||||
|     List<StoragePoolVO> listLocalStoragePoolByPath(long datacenterId, String path); | ||||
| 
 | ||||
|     void deletePoolTags(long poolId); | ||||
| 
 | ||||
|     List<StoragePoolVO> listChildStoragePoolsInDatastoreCluster(long poolId); | ||||
| } | ||||
|  | ||||
| @ -552,4 +552,10 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<StoragePoolVO, Long> | ||||
|     public void deletePoolTags(long poolId) { | ||||
|         _tagsDao.deleteTags(poolId); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public List<StoragePoolVO> listChildStoragePoolsInDatastoreCluster(long poolId) { | ||||
|         QueryBuilder<StoragePoolVO> sc = QueryBuilder.create(StoragePoolVO.class); | ||||
|         sc.and(sc.entity().getParent(), Op.EQ, poolId); | ||||
|         return sc.list();    } | ||||
| } | ||||
|  | ||||
| @ -119,6 +119,9 @@ public class StoragePoolVO implements StoragePool { | ||||
|     @Enumerated(value = EnumType.STRING) | ||||
|     private HypervisorType hypervisor; | ||||
| 
 | ||||
|     @Column(name = "parent") | ||||
|     private Long parent; | ||||
| 
 | ||||
|     @Override | ||||
|     public long getId() { | ||||
|         return id; | ||||
| @ -373,6 +376,14 @@ public class StoragePoolVO implements StoragePool { | ||||
|         return !isShared(); | ||||
|     } | ||||
| 
 | ||||
|     public Long getParent() { | ||||
|         return parent; | ||||
|     } | ||||
| 
 | ||||
|     public void setParent(Long parent) { | ||||
|         this.parent = parent; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean isInMaintenance() { | ||||
|         return status == StoragePoolStatus.PrepareForMaintenance || status == StoragePoolStatus.Maintenance || status == StoragePoolStatus.ErrorInMaintenance || | ||||
|  | ||||
| @ -217,6 +217,11 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement | ||||
|         List<Volume> requestVolumes = new ArrayList<>(); | ||||
|         requestVolumes.add(volume); | ||||
|         if (dskCh.getHypervisorType() == HypervisorType.VMware) { | ||||
|             // Skip the parent datastore cluster, consider only child storage pools in it | ||||
|             if (pool.getPoolType() == Storage.StoragePoolType.DatastoreCluster && storageMgr.isStoragePoolDatastoreClusterParent(pool)) { | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|             try { | ||||
|                 boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolComplaintWithStoragePolicy(requestVolumes, pool); | ||||
|                 if (!isStoragePoolStoragepolicyComplaince) { | ||||
|  | ||||
| @ -2613,6 +2613,15 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C | ||||
|         return disk; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean isStoragePoolDatastoreClusterParent(StoragePool pool) { | ||||
|         List<StoragePoolVO> childStoragePools = _storagePoolDao.listChildStoragePoolsInDatastoreCluster(pool.getId()); | ||||
|         if (childStoragePools != null && !childStoragePools.isEmpty()) { | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     private void setVolumeObjectTOThrottling(VolumeObjectTO volumeTO, final ServiceOffering offering, final DiskOffering diskOffering) { | ||||
|         volumeTO.setBytesReadRate(getDiskBytesReadRate(offering, diskOffering)); | ||||
|         volumeTO.setBytesWriteRate(getDiskBytesWriteRate(offering, diskOffering)); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user