protected List<VolumeDescriptor> createChangeVirtualPoolDescriptors(StorageSystem vplexSystem,Volume volume,VirtualPool newVpool,String taskId,List<Recommendation> recommendations,VirtualPoolCapabilityValuesWrapper capabilities,ControllerOperationValuesWrapper operationsWrapper) throws InternalException {
  URI volumeVarrayURI=volume.getVirtualArray();
  VirtualArray volumeVarray=_dbClient.queryObject(VirtualArray.class,volumeVarrayURI);
  s_logger.info("Virtual volume varray is {}",volumeVarrayURI);
  URI volumeVpoolURI=volume.getVirtualPool();
  VirtualPool currentVpool=_dbClient.queryObject(VirtualPool.class,volumeVpoolURI);
  List<VolumeDescriptor> descriptors=new ArrayList<VolumeDescriptor>();
  VolumeDescriptor vplexVirtualVolumeDesc=new VolumeDescriptor(VolumeDescriptor.Type.VPLEX_VIRT_VOLUME,volume.getStorageController(),volume.getId(),volume.getPool(),null);
  Map<String,Object> volumeParams=new HashMap<String,Object>();
  volumeParams.put(VolumeDescriptor.PARAM_VPOOL_CHANGE_EXISTING_VOLUME_ID,volume.getId());
  volumeParams.put(VolumeDescriptor.PARAM_VPOOL_CHANGE_NEW_VPOOL_ID,newVpool.getId());
  volumeParams.put(VolumeDescriptor.PARAM_VPOOL_CHANGE_OLD_VPOOL_ID,volume.getVirtualPool());
  if (operationsWrapper != null) {
    if (operationsWrapper.getMigrationSuspendBeforeCommit() != null) {
      volumeParams.put(VolumeDescriptor.PARAM_MIGRATION_SUSPEND_BEFORE_COMMIT,operationsWrapper.getMigrationSuspendBeforeCommit());
    }
    if (operationsWrapper.getMigrationSuspendBeforeDeleteSource() != null) {
      volumeParams.put(VolumeDescriptor.PARAM_MIGRATION_SUSPEND_BEFORE_DELETE_SOURCE,operationsWrapper.getMigrationSuspendBeforeDeleteSource());
    }
  }
  vplexVirtualVolumeDesc.setParameters(volumeParams);
  descriptors.add(vplexVirtualVolumeDesc);
  if (VirtualPoolChangeAnalyzer.vpoolChangeRequiresMigration(currentVpool,newVpool)) {
    Volume migSrcVolume=getAssociatedVolumeInVArray(volume,volumeVarrayURI);
    descriptors.addAll(createBackendVolumeMigrationDescriptors(vplexSystem,volume,migSrcVolume,volumeVarray,newVpool,getVolumeCapacity(migSrcVolume != null ? migSrcVolume : volume),taskId,recommendations,false,capabilities));
  }
  URI haVarrayURI=VirtualPoolChangeAnalyzer.getHaVarrayURI(currentVpool);
  if (haVarrayURI != null) {
    VirtualArray haVarray=_dbClient.queryObject(VirtualArray.class,haVarrayURI);
    VirtualPool currentHaVpool=VirtualPoolChangeAnalyzer.getHaVpool(currentVpool,_dbClient);
    VirtualPool newHaVpool=VirtualPoolChangeAnalyzer.getNewHaVpool(currentVpool,newVpool,_dbClient);
    if (VirtualPoolChangeAnalyzer.vpoolChangeRequiresMigration(currentHaVpool,newHaVpool)) {
      Volume migSrcVolume=getAssociatedVolumeInVArray(volume,haVarrayURI);
      descriptors.addAll(createBackendVolumeMigrationDescriptors(vplexSystem,volume,migSrcVolume,haVarray,newHaVpool,getVolumeCapacity(migSrcVolume != null ? migSrcVolume : volume),taskId,recommendations,true,capabilities));
    }
  }
  return descriptors;
}

protected List < VolumeDescriptor > createChangeVirtualPoolDescriptors ( StorageSystem vplexSystem , Volume volume , VirtualPool newVpool , String taskId , List < Recommendation > recommendations , VirtualPoolCapabilityValuesWrapper capabilities , ControllerOperationValuesWrapper operationsWrapper ) throws InternalException { URI volumeVarrayURI = volume . getVirtualArray ( ) ; VirtualArray volumeVarray = _dbClient . queryObject ( VirtualArray . class , volumeVarrayURI ) ; s_logger . info ( "Virtual volume varray is {}" , volumeVarrayURI ) ; URI volumeVpoolURI = volume . getVirtualPool ( ) ; VirtualPool currentVpool = _dbClient . queryObject ( VirtualPool . class , volumeVpoolURI ) ; List < VolumeDescriptor > descriptors = new ArrayList < VolumeDescriptor > ( ) ; VolumeDescriptor vplexVirtualVolumeDesc = new VolumeDescriptor ( VolumeDescriptor . Type . VPLEX_VIRT_VOLUME , volume . getStorageController ( ) , volume . getId ( ) , volume . getPool ( ) , null ) ; Map < String , Object > volumeParams = new HashMap < String , Object > ( ) ; volumeParams . put ( VolumeDescriptor . PARAM_VPOOL_CHANGE_EXISTING_VOLUME_ID , volume . getId ( ) ) ; volumeParams . put ( VolumeDescriptor . PARAM_VPOOL_CHANGE_NEW_VPOOL_ID , newVpool . getId ( ) ) ; volumeParams . put ( VolumeDescriptor . PARAM_VPOOL_CHANGE_OLD_VPOOL_ID , volume . getVirtualPool ( ) ) ; if ( operationsWrapper != null ) { if ( operationsWrapper . getMigrationSuspendBeforeCommit ( ) != null ) { volumeParams . put ( VolumeDescriptor . PARAM_MIGRATION_SUSPEND_BEFORE_COMMIT , operationsWrapper . getMigrationSuspendBeforeCommit ( ) ) ; } if ( operationsWrapper . getMigrationSuspendBeforeDeleteSource ( ) != null ) { volumeParams . put ( VolumeDescriptor . PARAM_MIGRATION_SUSPEND_BEFORE_DELETE_SOURCE , operationsWrapper . getMigrationSuspendBeforeDeleteSource ( ) ) ; } } vplexVirtualVolumeDesc . setParameters ( volumeParams ) ; descriptors . add ( vplexVirtualVolumeDesc ) ; if ( VirtualPoolChangeAnalyzer . vpoolChangeRequiresMigration ( currentVpool , newVpool ) ) { Volume migSrcVolume = getAssociatedVolumeInVArray ( volume , volumeVarrayURI ) ; descriptors . addAll ( createBackendVolumeMigrationDescriptors ( vplexSystem , volume , migSrcVolume , volumeVarray , newVpool , getVolumeCapacity ( migSrcVolume != null ? migSrcVolume : volume ) , taskId , recommendations , false , capabilities ) ) ; } URI haVarrayURI = VirtualPoolChangeAnalyzer . getHaVarrayURI ( currentVpool ) ; if ( haVarrayURI != null ) { VirtualArray haVarray = _dbClient . queryObject ( VirtualArray . class , haVarrayURI ) ; VirtualPool currentHaVpool = VirtualPoolChangeAnalyzer . getHaVpool ( currentVpool , _dbClient ) ; VirtualPool newHaVpool = VirtualPoolChangeAnalyzer . getNewHaVpool ( currentVpool , newVpool , _dbClient ) ; if ( VirtualPoolChangeAnalyzer . vpoolChangeRequiresMigration ( currentHaVpool , newHaVpool ) ) { Volume migSrcVolume = getAssociatedVolumeInVArray ( volume , haVarrayURI ) ; descriptors . addAll ( createBackendVolumeMigrationDescriptors ( vplexSystem , volume , migSrcVolume , haVarray , newHaVpool , getVolumeCapacity ( migSrcVolume != null ? migSrcVolume : volume ) , taskId , recommendations , true , capabilities ) ) ; } } return descriptors ; }
change the virtualpool for the passed virtual volume on the passed vplex storage system .
