/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.protectioncontroller;
import java.net.URI;
import java.util.List;
import java.util.Map;
import com.emc.storageos.svcs.errorhandling.resources.InternalException;
import com.emc.storageos.volumecontroller.ApplicationAddVolumeList;
/**
* RecoverPoint Controller
*/
public interface RPController extends ProtectionController {
/**
* Perform protection operation
*
* @param protectionDevice RP protection system URI
* @param id volume or consistency group ID
* @param copyID id of protection volume
* @param pointInTime any point in time in UTC.
* Allowed values: "yyyy-MM-dd_HH:mm:ss" formatted date or datetime in milliseconds.
* @param imageAccessMode the image access mode for the failover copy (RecoverPoint only)
* @param op operation to perform
* @param task task object
*
* @throws InternalException
*/
public void performProtectionOperation(URI protectionDevice, URI id, URI copyID, String pointInTime, String imageAccessMode, String op,
String task) throws InternalException;
/**
* Update consistency group policy.
*
* @param protectionDevice RP protection system URI
* @param consistencyGroup RP consistency group URI
* @param volumeURIs the volume URIs corresponding to the CG being updated
* @param newVpoolURI id of the new virtual pool
* @param task task object
*
* @throws InternalException
*/
public void updateConsistencyGroupPolicy(URI protectionDevice, URI consistencyGroup, List<URI> volumeURIs, URI newVpoolURI,
String task) throws InternalException;
/**
* Create a snapshot or snapshots of a volume or volumes.
* Open issue: need to allow snapshots with different VirtualPool & pool
*
* @param protectionDevice RP protection system URI
* @param storageDevice storage device of the volume
* @param snapshotList list of snapshots
* @param createInactive (unused)
* @param readOnly
* @param task task ID
*
* @throws InternalException
*/
public void createSnapshot(URI protectionDevice, URI storageDevice, List<URI> snapshotList,
Boolean createInactive, Boolean readOnly, String task) throws InternalException;
/**
* Delete a snapshot
*
* @param protectionDevice RP protection system URI
* @param snapshot snap ID
* @param task task ID
*/
public void deleteSnapshot(URI protectionDevice, URI snapshot, String task) throws InternalException;
/**
* adds and removes RecoverPoint protected volumes to and from applications
*
* @param systemURI
* @param addVolumesNotInCG
* @param removeVolumesURI
* @param applicationId
* @param taskId
*/
public void updateApplication(URI systemURI, ApplicationAddVolumeList addVolumesNotInCG, List<URI> removeVolumesURI, URI applicationId,
String taskId);
/**
* Finds the RecoverPoint copy access states for all copies associated to the volumes provided.
*
* @param protectionSystem the protection system to use
* @param volumeURIs the volumes corresponding to the copies that need to be queried for access state
* @return a mapping of volumes to access states
*/
public Map<URI, String> getCopyAccessStates(URI protectionSystem, List<URI> volumeURIs);
}