9595import org .apache .cloudstack .storage .datastore .db .VolumeDataStoreDao ;
9696import org .apache .cloudstack .storage .datastore .db .VolumeDataStoreVO ;
9797import org .apache .cloudstack .storage .image .datastore .ImageStoreEntity ;
98+ import org .apache .cloudstack .storage .to .VolumeObjectTO ;
9899
99100import com .cloud .agent .AgentManager ;
100101import com .cloud .agent .api .Answer ;
101102import com .cloud .agent .api .Command ;
102103import com .cloud .agent .api .StoragePoolInfo ;
104+ import com .cloud .agent .api .to .DataTO ;
105+ import com .cloud .agent .api .to .DiskTO ;
103106import com .cloud .agent .manager .Commands ;
104107import com .cloud .api .ApiDBUtils ;
105108import com .cloud .api .query .dao .TemplateJoinDao ;
138141import com .cloud .host .dao .HostDao ;
139142import com .cloud .hypervisor .Hypervisor .HypervisorType ;
140143import com .cloud .hypervisor .HypervisorGuruManager ;
144+ import com .cloud .offering .DiskOffering ;
145+ import com .cloud .offering .ServiceOffering ;
141146import com .cloud .org .Grouping ;
142147import com .cloud .org .Grouping .AllocationState ;
143148import com .cloud .resource .ResourceState ;
144149import com .cloud .server .ConfigurationServer ;
145150import com .cloud .server .ManagementServer ;
146151import com .cloud .server .StatsCollector ;
147- import com .cloud .service .ServiceOfferingVO ;
148152import com .cloud .storage .Storage .ImageFormat ;
149153import com .cloud .storage .Storage .StoragePoolType ;
150154import com .cloud .storage .Volume .Type ;
173177import com .cloud .utils .component .ManagerBase ;
174178import com .cloud .utils .concurrency .NamedThreadFactory ;
175179import com .cloud .utils .db .DB ;
180+ import com .cloud .utils .db .EntityManager ;
176181import com .cloud .utils .db .GenericSearchBuilder ;
177182import com .cloud .utils .db .GlobalLock ;
178183import com .cloud .utils .db .JoinBuilder ;
185190import com .cloud .utils .db .TransactionLegacy ;
186191import com .cloud .utils .db .TransactionStatus ;
187192import com .cloud .utils .exception .CloudRuntimeException ;
193+ import com .cloud .vm .DiskProfile ;
188194import com .cloud .vm .VMInstanceVO ;
189195import com .cloud .vm .VirtualMachine .State ;
190196import com .cloud .vm .dao .VMInstanceDao ;
@@ -280,6 +286,8 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
280286 private DiskOfferingDao _diskOfferingDao ;
281287 @ Inject
282288 ResourceLimitService _resourceLimitMgr ;
289+ @ Inject
290+ EntityManager _entityMgr ;
283291
284292 protected List <StoragePoolDiscoverer > _discoverers ;
285293
@@ -2237,7 +2245,7 @@ public void cleanupDownloadUrls(){
22372245
22382246 // get bytesReadRate from service_offering, disk_offering and vm.disk.throttling.bytes_read_rate
22392247 @ Override
2240- public Long getDiskBytesReadRate (ServiceOfferingVO offering , DiskOfferingVO diskOffering ) {
2248+ public Long getDiskBytesReadRate (final ServiceOffering offering , final DiskOffering diskOffering ) {
22412249 if ((offering != null ) && (offering .getBytesReadRate () != null ) && (offering .getBytesReadRate () > 0 )) {
22422250 return offering .getBytesReadRate ();
22432251 } else if ((diskOffering != null ) && (diskOffering .getBytesReadRate () != null ) && (diskOffering .getBytesReadRate () > 0 )) {
@@ -2253,7 +2261,7 @@ public Long getDiskBytesReadRate(ServiceOfferingVO offering, DiskOfferingVO disk
22532261
22542262 // get bytesWriteRate from service_offering, disk_offering and vm.disk.throttling.bytes_write_rate
22552263 @ Override
2256- public Long getDiskBytesWriteRate (ServiceOfferingVO offering , DiskOfferingVO diskOffering ) {
2264+ public Long getDiskBytesWriteRate (final ServiceOffering offering , final DiskOffering diskOffering ) {
22572265 if ((offering != null ) && (offering .getBytesWriteRate () != null ) && (offering .getBytesWriteRate () > 0 )) {
22582266 return offering .getBytesWriteRate ();
22592267 } else if ((diskOffering != null ) && (diskOffering .getBytesWriteRate () != null ) && (diskOffering .getBytesWriteRate () > 0 )) {
@@ -2269,7 +2277,7 @@ public Long getDiskBytesWriteRate(ServiceOfferingVO offering, DiskOfferingVO dis
22692277
22702278 // get iopsReadRate from service_offering, disk_offering and vm.disk.throttling.iops_read_rate
22712279 @ Override
2272- public Long getDiskIopsReadRate (ServiceOfferingVO offering , DiskOfferingVO diskOffering ) {
2280+ public Long getDiskIopsReadRate (final ServiceOffering offering , final DiskOffering diskOffering ) {
22732281 if ((offering != null ) && (offering .getIopsReadRate () != null ) && (offering .getIopsReadRate () > 0 )) {
22742282 return offering .getIopsReadRate ();
22752283 } else if ((diskOffering != null ) && (diskOffering .getIopsReadRate () != null ) && (diskOffering .getIopsReadRate () > 0 )) {
@@ -2285,7 +2293,7 @@ public Long getDiskIopsReadRate(ServiceOfferingVO offering, DiskOfferingVO diskO
22852293
22862294 // get iopsWriteRate from service_offering, disk_offering and vm.disk.throttling.iops_write_rate
22872295 @ Override
2288- public Long getDiskIopsWriteRate (ServiceOfferingVO offering , DiskOfferingVO diskOffering ) {
2296+ public Long getDiskIopsWriteRate (final ServiceOffering offering , final DiskOffering diskOffering ) {
22892297 if ((offering != null ) && (offering .getIopsWriteRate () != null ) && (offering .getIopsWriteRate () > 0 )) {
22902298 return offering .getIopsWriteRate ();
22912299 } else if ((diskOffering != null ) && (diskOffering .getIopsWriteRate () != null ) && (diskOffering .getIopsWriteRate () > 0 )) {
@@ -2308,4 +2316,39 @@ public String getConfigComponentName() {
23082316 public ConfigKey <?>[] getConfigKeys () {
23092317 return new ConfigKey <?>[] {StorageCleanupInterval , StorageCleanupDelay , StorageCleanupEnabled };
23102318 }
2319+
2320+ @ Override
2321+ public void setDiskProfileThrottling (DiskProfile dskCh , final ServiceOffering offering , final DiskOffering diskOffering ) {
2322+ dskCh .setBytesReadRate (getDiskBytesReadRate (offering , diskOffering ));
2323+ dskCh .setBytesWriteRate (getDiskBytesWriteRate (offering , diskOffering ));
2324+ dskCh .setIopsReadRate (getDiskIopsReadRate (offering , diskOffering ));
2325+ dskCh .setIopsWriteRate (getDiskIopsWriteRate (offering , diskOffering ));
2326+ }
2327+
2328+ @ Override
2329+ public DiskTO getDiskWithThrottling (final DataTO volTO , final Volume .Type volumeType , final long deviceId , final String path , final long offeringId , final long diskOfferingId ) {
2330+ DiskTO disk = null ;
2331+ if (volTO != null && volTO instanceof VolumeObjectTO ) {
2332+ VolumeObjectTO volumeTO = (VolumeObjectTO ) volTO ;
2333+ ServiceOffering offering = _entityMgr .findById (ServiceOffering .class , offeringId );
2334+ DiskOffering diskOffering = _entityMgr .findById (DiskOffering .class , diskOfferingId );
2335+ if (volumeType == Volume .Type .ROOT ) {
2336+ setVolumeObjectTOThrottling (volumeTO , offering , diskOffering );
2337+ } else {
2338+ setVolumeObjectTOThrottling (volumeTO , null , diskOffering );
2339+ }
2340+ disk = new DiskTO (volumeTO , deviceId , path , volumeType );
2341+ } else {
2342+ disk = new DiskTO (volTO , deviceId , path , volumeType );
2343+ }
2344+ return disk ;
2345+ }
2346+
2347+ private void setVolumeObjectTOThrottling (VolumeObjectTO volumeTO , final ServiceOffering offering , final DiskOffering diskOffering ) {
2348+ volumeTO .setBytesReadRate (getDiskBytesReadRate (offering , diskOffering ));
2349+ volumeTO .setBytesWriteRate (getDiskBytesWriteRate (offering , diskOffering ));
2350+ volumeTO .setIopsReadRate (getDiskIopsReadRate (offering , diskOffering ));
2351+ volumeTO .setIopsWriteRate (getDiskIopsWriteRate (offering , diskOffering ));
2352+ }
2353+
23112354}
0 commit comments