private static boolean isSupportedAddMirrorsVirtualPoolChangeForVplexDistributed(Volume volume,VirtualPool currentVpool,VirtualPool newVpool,DbClient dbClient,StringBuffer notSuppReasonBuff){
  s_logger.info(String.format("Checking isSupportedAddMirrorsVirtualPoolChangeForVplexDistributed from [%s] to [%s]...",currentVpool.getLabel(),newVpool.getLabel()));
  boolean supported=false;
  if (newVpool.getMaxNativeContinuousCopies() > 0 && newVpool.getMirrorVirtualPool() != null) {
    String[] include=new String[]{TYPE,VARRAYS,REF_VPOOL,HIGH_AVAILABILITY,PROTECTION_VARRAY_SETTINGS,FAST_EXPANSION,ACLS,INACTIVE,DRIVE_TYPE,ARRAY_INFO,PROVISIONING_TYPE,PROTOCOLS};
    String[] contain=new String[]{MATCHED_POOLS,ASSIGNED_STORAGE_POOLS};
    Map<String,Change> changes=analyzeChanges(currentVpool,newVpool,include,null,contain);
    if (!changes.isEmpty()) {
      notSuppReasonBuff.append("These target virtual pool differences are invalid: ");
      fillInNotSupportedReasons(changes,notSuppReasonBuff);
      return false;
    }
    supported=true;
  }
  VirtualPool currentHaVpool=VirtualPool.getHAVPool(currentVpool,dbClient);
  if (currentHaVpool == null) {
    currentHaVpool=currentVpool;
  }
  VirtualPool newHaVpool=VirtualPool.getHAVPool(newVpool,dbClient);
  if (currentHaVpool != null && newHaVpool != null) {
    if (newHaVpool.getMaxNativeContinuousCopies() > 0 && newHaVpool.getMirrorVirtualPool() != null) {
      String[] include=new String[]{TYPE,VARRAYS,REF_VPOOL,PROTECTION_VARRAY_SETTINGS,FAST_EXPANSION,ACLS,INACTIVE,DRIVE_TYPE,ARRAY_INFO,PROVISIONING_TYPE,PROTOCOLS};
      String[] contain=new String[]{MATCHED_POOLS,ASSIGNED_STORAGE_POOLS};
      Map<String,Change> changes=analyzeChanges(currentHaVpool,newHaVpool,include,null,contain);
      if (!changes.isEmpty()) {
        notSuppReasonBuff.append("These target virtual pool differences are invalid: ");
        fillInNotSupportedReasons(changes,notSuppReasonBuff);
        return false;
      }
      supported=true;
    }
  }
  return supported;
}

private static boolean isSupportedAddMirrorsVirtualPoolChangeForVplexDistributed ( Volume volume , VirtualPool currentVpool , VirtualPool newVpool , DbClient dbClient , StringBuffer notSuppReasonBuff ) { s_logger . info ( String . format ( "Checking isSupportedAddMirrorsVirtualPoolChangeForVplexDistributed from [%s] to [%s]..." , currentVpool . getLabel ( ) , newVpool . getLabel ( ) ) ) ; boolean supported = false ; if ( newVpool . getMaxNativeContinuousCopies ( ) > 0 && newVpool . getMirrorVirtualPool ( ) != null ) { String [ ] include = new String [ ] { TYPE , VARRAYS , REF_VPOOL , HIGH_AVAILABILITY , PROTECTION_VARRAY_SETTINGS , FAST_EXPANSION , ACLS , INACTIVE , DRIVE_TYPE , ARRAY_INFO , PROVISIONING_TYPE , PROTOCOLS } ; String [ ] contain = new String [ ] { MATCHED_POOLS , ASSIGNED_STORAGE_POOLS } ; Map < String , Change > changes = analyzeChanges ( currentVpool , newVpool , include , null , contain ) ; if ( ! changes . isEmpty ( ) ) { notSuppReasonBuff . append ( "These target virtual pool differences are invalid: " ) ; fillInNotSupportedReasons ( changes , notSuppReasonBuff ) ; return false ; } supported = true ; } VirtualPool currentHaVpool = VirtualPool . getHAVPool ( currentVpool , dbClient ) ; if ( currentHaVpool == null ) { currentHaVpool = currentVpool ; } VirtualPool newHaVpool = VirtualPool . getHAVPool ( newVpool , dbClient ) ; if ( currentHaVpool != null && newHaVpool != null ) { if ( newHaVpool . getMaxNativeContinuousCopies ( ) > 0 && newHaVpool . getMirrorVirtualPool ( ) != null ) { String [ ] include = new String [ ] { TYPE , VARRAYS , REF_VPOOL , PROTECTION_VARRAY_SETTINGS , FAST_EXPANSION , ACLS , INACTIVE , DRIVE_TYPE , ARRAY_INFO , PROVISIONING_TYPE , PROTOCOLS } ; String [ ] contain = new String [ ] { MATCHED_POOLS , ASSIGNED_STORAGE_POOLS } ; Map < String , Change > changes = analyzeChanges ( currentHaVpool , newHaVpool , include , null , contain ) ; if ( ! changes . isEmpty ( ) ) { notSuppReasonBuff . append ( "These target virtual pool differences are invalid: " ) ; fillInNotSupportedReasons ( changes , notSuppReasonBuff ) ; return false ; } supported = true ; } } return supported ; }
this method is used for the vplex distributed volume to check if add mirror ( s ) is supported by changing vpool to newvpool .
