private RPRecommendation buildSourceRecommendation(String associatedStorageSystem,VirtualArray varray,VirtualPool vpool,ProtectionSystem ps,StoragePool sourcePool,VirtualPoolCapabilityValuesWrapper capabilities,int satisfiedSourceVolCount,PlacementStatus placementStat,Volume vpoolChangeVolume,boolean isMPStandby){
  String sourceInternalSiteName=ProtectionSystem.getAssociatedStorageSystemSiteName(associatedStorageSystem);
  URI sourceStorageSytemUri=ConnectivityUtil.findStorageSystemBySerialNumber(ProtectionSystem.getAssociatedStorageSystemSerialNumber(associatedStorageSystem),dbClient,StorageSystemType.BLOCK);
  if (!isRpSiteConnectedToVarray(sourceStorageSytemUri,ps.getId(),sourceInternalSiteName,varray)) {
    _log.info(String.format("RP Placement: Disqualified RP site [%s] because its initiators are not in a network configured " + "for use by the virtual array [%s]",sourceInternalSiteName,varray.getLabel()));
    return null;
  }
  URI storageSystemUri=ConnectivityUtil.findStorageSystemBySerialNumber(ProtectionSystem.getAssociatedStorageSystemSerialNumber(associatedStorageSystem),dbClient,StorageSystemType.BLOCK);
  StorageSystem storageSystem=dbClient.queryObject(StorageSystem.class,storageSystemUri);
  String type=storageSystem.getSystemType();
  RPRecommendation rpRecommendation=buildRpRecommendation(associatedStorageSystem,varray,vpool,sourcePool,capabilities,satisfiedSourceVolCount,sourceInternalSiteName,sourceStorageSytemUri,type,ps);
  String rpPlacementType="Source recommendation ";
  if (isMPStandby) {
    rpPlacementType="Standby recommendation";
  }
  _log.info(String.format("RP Placement : %s %s %n",rpPlacementType,rpRecommendation.toString(dbClient,ps)));
  return rpRecommendation;
}

private RPRecommendation buildSourceRecommendation ( String associatedStorageSystem , VirtualArray varray , VirtualPool vpool , ProtectionSystem ps , StoragePool sourcePool , VirtualPoolCapabilityValuesWrapper capabilities , int satisfiedSourceVolCount , PlacementStatus placementStat , Volume vpoolChangeVolume , boolean isMPStandby ) { String sourceInternalSiteName = ProtectionSystem . getAssociatedStorageSystemSiteName ( associatedStorageSystem ) ; URI sourceStorageSytemUri = ConnectivityUtil . findStorageSystemBySerialNumber ( ProtectionSystem . getAssociatedStorageSystemSerialNumber ( associatedStorageSystem ) , dbClient , StorageSystemType . BLOCK ) ; if ( ! isRpSiteConnectedToVarray ( sourceStorageSytemUri , ps . getId ( ) , sourceInternalSiteName , varray ) ) { _log . info ( String . format ( "RP Placement: Disqualified RP site [%s] because its initiators are not in a network configured " + "for use by the virtual array [%s]" , sourceInternalSiteName , varray . getLabel ( ) ) ) ; return null ; } URI storageSystemUri = ConnectivityUtil . findStorageSystemBySerialNumber ( ProtectionSystem . getAssociatedStorageSystemSerialNumber ( associatedStorageSystem ) , dbClient , StorageSystemType . BLOCK ) ; StorageSystem storageSystem = dbClient . queryObject ( StorageSystem . class , storageSystemUri ) ; String type = storageSystem . getSystemType ( ) ; RPRecommendation rpRecommendation = buildRpRecommendation ( associatedStorageSystem , varray , vpool , sourcePool , capabilities , satisfiedSourceVolCount , sourceInternalSiteName , sourceStorageSytemUri , type , ps ) ; String rpPlacementType = "Source recommendation " ; if ( isMPStandby ) { rpPlacementType = "Standby recommendation" ; } _log . info ( String . format ( "RP Placement : %s %s %n" , rpPlacementType , rpRecommendation . toString ( dbClient , ps ) ) ) ; return rpRecommendation ; }
builds the source placement recommendation based on the source pool and its associated storage system / rp site .
