@@ -465,10 +465,13 @@ public Answer sendToPool(StoragePool pool, long[] hostIdsToTryFirst, Command cmd
465465
466466 @ Override
467467 public Answer sendToPool (StoragePool pool , Command cmd ) throws StorageUnavailableException {
468- if (cmd instanceof GetStorageStatsCommand && pool .getPoolType () == StoragePoolType .PowerFlex ) {
469- // Get stats from the pool directly instead of sending cmd to host
470- // Added support for ScaleIO/PowerFlex pool only
471- return getStoragePoolStats (pool , (GetStorageStatsCommand ) cmd );
468+ if (cmd instanceof GetStorageStatsCommand ) {
469+ DataStoreProvider storeProvider = _dataStoreProviderMgr .getDataStoreProvider (pool .getStorageProviderName ());
470+ DataStoreDriver storeDriver = storeProvider .getDataStoreDriver ();
471+ if (storeDriver instanceof PrimaryDataStoreDriver && ((PrimaryDataStoreDriver )storeDriver ).canProvideStorageStats ()) {
472+ // Get stats from the pool directly instead of sending cmd to host
473+ return getStoragePoolStats (pool , (GetStorageStatsCommand ) cmd );
474+ }
472475 }
473476
474477 Answer [] answers = sendToPool (pool , new Commands (cmd ));
@@ -479,49 +482,40 @@ public Answer sendToPool(StoragePool pool, Command cmd) throws StorageUnavailabl
479482 }
480483
481484 private GetStorageStatsAnswer getStoragePoolStats (StoragePool pool , GetStorageStatsCommand cmd ) {
482- DataStoreProvider storeProvider = _dataStoreProviderMgr .getDataStoreProvider (pool .getStorageProviderName ());
483- DataStoreDriver storeDriver = storeProvider .getDataStoreDriver ();
484485 GetStorageStatsAnswer answer = null ;
485486
486- if ( storeDriver instanceof PrimaryDataStoreDriver && (( PrimaryDataStoreDriver ) storeDriver ). canProvideStorageStats ()) {
487- PrimaryDataStoreDriver primaryStoreDriver = ( PrimaryDataStoreDriver ) storeDriver ;
488- Pair < Long , Long > storageStats = primaryStoreDriver . getStorageStats ( pool ) ;
489- if ( storageStats == null ) {
490- answer = new GetStorageStatsAnswer (( GetStorageStatsCommand ) cmd , "Failed to get storage stats for pool: " + pool . getId ());
491- } else {
492- answer = new GetStorageStatsAnswer (( GetStorageStatsCommand ) cmd , storageStats . first (), storageStats . second ());
493- }
487+ DataStoreProvider storeProvider = _dataStoreProviderMgr . getDataStoreProvider ( pool . getStorageProviderName ());
488+ DataStoreDriver storeDriver = storeProvider . getDataStoreDriver () ;
489+ PrimaryDataStoreDriver primaryStoreDriver = ( PrimaryDataStoreDriver ) storeDriver ;
490+ Pair < Long , Long > storageStats = primaryStoreDriver . getStorageStats ( pool );
491+ if ( storageStats == null ) {
492+ answer = new GetStorageStatsAnswer (( GetStorageStatsCommand ) cmd , "Failed to get storage stats for pool: " + pool . getId ());
493+ } else {
494+ answer = new GetStorageStatsAnswer (( GetStorageStatsCommand ) cmd , storageStats . first (), storageStats . second ());
494495 }
495496
496497 return answer ;
497498 }
498499
499500 @ Override
500501 public Answer getVolumeStats (StoragePool pool , Command cmd ) {
501- if (!(cmd instanceof GetVolumeStatsCommand )) {
502- return null ;
503- }
504-
505502 DataStoreProvider storeProvider = _dataStoreProviderMgr .getDataStoreProvider (pool .getStorageProviderName ());
506503 DataStoreDriver storeDriver = storeProvider .getDataStoreDriver ();
507-
508- if (storeDriver instanceof PrimaryDataStoreDriver && ((PrimaryDataStoreDriver )storeDriver ).canProvideVolumeStats ()) {
509- PrimaryDataStoreDriver primaryStoreDriver = (PrimaryDataStoreDriver )storeDriver ;
510- HashMap <String , VolumeStatsEntry > statEntry = new HashMap <String , VolumeStatsEntry >();
511- GetVolumeStatsCommand getVolumeStatsCommand = (GetVolumeStatsCommand ) cmd ;
512- for (String volumeUuid : getVolumeStatsCommand .getVolumeUuids ()) {
513- Pair <Long , Long > volumeStats = primaryStoreDriver .getVolumeStats (pool , volumeUuid );
514- if (volumeStats == null ) {
515- return new GetVolumeStatsAnswer (getVolumeStatsCommand , "Failed to get stats for volume: " + volumeUuid , null );
516- } else {
517- VolumeStatsEntry volumeStatsEntry = new VolumeStatsEntry (volumeUuid , volumeStats .first (), volumeStats .second ());
518- statEntry .put (volumeUuid , volumeStatsEntry );
519- }
504+ PrimaryDataStoreDriver primaryStoreDriver = (PrimaryDataStoreDriver ) storeDriver ;
505+ HashMap <String , VolumeStatsEntry > statEntry = new HashMap <String , VolumeStatsEntry >();
506+ GetVolumeStatsCommand getVolumeStatsCommand = (GetVolumeStatsCommand ) cmd ;
507+ for (String volumeUuid : getVolumeStatsCommand .getVolumeUuids ()) {
508+ Pair <Long , Long > volumeStats = primaryStoreDriver .getVolumeStats (pool , volumeUuid );
509+ if (volumeStats == null ) {
510+ return new GetVolumeStatsAnswer (getVolumeStatsCommand , "Failed to get stats for volume: " + volumeUuid ,
511+ null );
512+ } else {
513+ VolumeStatsEntry volumeStatsEntry = new VolumeStatsEntry (volumeUuid , volumeStats .first (),
514+ volumeStats .second ());
515+ statEntry .put (volumeUuid , volumeStatsEntry );
520516 }
521- return new GetVolumeStatsAnswer (getVolumeStatsCommand , "" , statEntry );
522517 }
523-
524- return null ;
518+ return new GetVolumeStatsAnswer (getVolumeStatsCommand , "" , statEntry );
525519 }
526520
527521 public Long chooseHostForStoragePool (StoragePoolVO poolVO , List <Long > avoidHosts , boolean sendToVmResidesOn , Long vmId ) {
0 commit comments