Search in sources :

Example 11 with Copy

use of com.emc.storageos.model.block.Copy in project coprhd-controller by CoprHD.

the class BlockService method deactivateMirror.

/**
 * Deactivate continuous copies for given source volume
 *
 * NOTE: This is an asynchronous operation.
 *
 * @prereq none
 *
 * @param id
 *            the URN of a ViPR Source volume
 * @param param
 *            List of copies to deactivate
 * @param type {@link DefaultValue} FULL
 *            Possible type of deletion
 *            <ul>
 *            <li>FULL</li>
 *            <li>VIPR_ONLY</li>
 *            </ul>
 *            if type is FULL, ViPR deletes the continuous copy from storage array and removes from ViPR data base.
 *            if type is VIPR_ONLY, ViPR removes the continuous copy only from ViPR data base and leaves the continuous copy on storage
 *            array as it is.
 *
 * @brief Delete continuous copies
 * @return TaskList
 *
 * @throws ControllerException
 */
@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path("/{id}/protection/continuous-copies/deactivate")
@CheckPermission(roles = { Role.TENANT_ADMIN }, acls = { ACL.OWN, ACL.ALL })
public TaskList deactivateMirror(@PathParam("id") URI id, CopiesParam param, @DefaultValue("FULL") @QueryParam("type") String deleteType) throws ControllerException {
    TaskList taskList = new TaskList();
    // Validate the source volume URI
    ArgValidator.checkFieldUriType(id, Volume.class, "id");
    Volume volume = _dbClient.queryObject(Volume.class, id);
    // Make sure that we don't have some pending
    // operation against the volume
    checkForPendingTasks(Arrays.asList(volume.getTenant().getURI()), Arrays.asList(volume));
    // Validate the list of copies
    ArgValidator.checkFieldNotEmpty(param.getCopies(), "copies");
    boolean vplexVolume = checkIfVolumeIsForVplex(id);
    // Process the list of copies
    for (Copy copy : param.getCopies()) {
        // Validate the copy ID
        URI copyID = copy.getCopyID();
        ArgValidator.checkUri(copyID);
        // Validate a copy type was passed
        ArgValidator.checkFieldNotEmpty(copy.getType(), "type");
        if (TechnologyType.NATIVE.toString().equalsIgnoreCase(copy.getType())) {
            String task = UUID.randomUUID().toString();
            StorageSystem device;
            String mirrorLabel;
            URI mirrorURI;
            BlockServiceApi blockServiceApi;
            if (vplexVolume) {
                VplexMirror mirror = queryVplexMirror(copyID);
                ArgValidator.checkEntity(mirror, mirror.getId(), isIdEmbeddedInURL(copyID));
                if (!mirror.getSource().getURI().equals(id)) {
                    throw APIException.badRequests.mirrorDoesNotBelongToVolume(copyID, id);
                }
                mirrorLabel = mirror.getLabel();
                mirrorURI = mirror.getId();
                device = _dbClient.queryObject(StorageSystem.class, mirror.getStorageController());
                blockServiceApi = getBlockServiceImpl(DiscoveredDataObject.Type.vplex.name());
            } else {
                BlockMirror mirror = queryMirror(copyID);
                ArgValidator.checkEntity(mirror, mirror.getId(), isIdEmbeddedInURL(copyID));
                if (!mirror.getSource().getURI().equals(id)) {
                    throw APIException.badRequests.mirrorDoesNotBelongToVolume(copyID, id);
                }
                mirrorLabel = mirror.getLabel();
                mirrorURI = mirror.getId();
                device = _dbClient.queryObject(StorageSystem.class, mirror.getStorageController());
                blockServiceApi = getBlockServiceImpl("mirror");
            }
            // Deactivate the mirror
            TaskList deactivateTaskList = blockServiceApi.deactivateMirror(device, mirrorURI, task, deleteType);
            // Create the audit log message
            String opStage = VolumeDeleteTypeEnum.VIPR_ONLY.name().equals(deleteType) ? null : AuditLogManager.AUDITOP_BEGIN;
            boolean opStatus = true;
            for (TaskResourceRep resultTask : deactivateTaskList.getTaskList()) {
                if (Operation.Status.error.name().equals(resultTask.getState())) {
                    opStatus = false;
                    break;
                }
            }
            auditOp(OperationTypeEnum.DEACTIVATE_VOLUME_MIRROR, opStatus, opStage, copyID.toString(), mirrorLabel);
            // Add tasks for this copy
            taskList.getTaskList().addAll(deactivateTaskList.getTaskList());
        } else {
            throw APIException.badRequests.invalidCopyType(copy.getType());
        }
    }
    return taskList;
}
Also used : BlockMirror(com.emc.storageos.db.client.model.BlockMirror) MapVolume(com.emc.storageos.api.mapper.functions.MapVolume) Volume(com.emc.storageos.db.client.model.Volume) Copy(com.emc.storageos.model.block.Copy) TaskList(com.emc.storageos.model.TaskList) TaskResourceRep(com.emc.storageos.model.TaskResourceRep) URI(java.net.URI) NullColumnValueGetter.isNullURI(com.emc.storageos.db.client.util.NullColumnValueGetter.isNullURI) VplexMirror(com.emc.storageos.db.client.model.VplexMirror) StorageSystem(com.emc.storageos.db.client.model.StorageSystem) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Produces(javax.ws.rs.Produces) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 12 with Copy

use of com.emc.storageos.model.block.Copy in project coprhd-controller by CoprHD.

the class ApiSystemTestUtil method attachContinuousCopy.

public List<URI> attachContinuousCopy(URI volumeURI, String copyName) {
    try {
        List<URI> mirrors = new ArrayList<URI>();
        Copy copy = new Copy("native", Copy.SyncDirection.SOURCE_TO_TARGET.name(), null, copyName, 1);
        CopiesParam input = new CopiesParam();
        List<Copy> copies = input.getCopies();
        copies.add(copy);
        input.setCopies((copies));
        ;
        Tasks<VolumeRestRep> tasks = client.blockVolumes().startContinuousCopies(volumeURI, input);
        for (VolumeRestRep volumeRestRep : tasks.get()) {
            log.info(String.format("Mirror %s (%s)", volumeRestRep.getName(), volumeRestRep.getNativeId()));
            mirrors.add(volumeRestRep.getId());
        }
        return mirrors;
    } catch (ServiceErrorException ex) {
        log.info(String.format("Could not attach mirror %s to volume %s", copyName, volumeURI));
        throw ex;
    }
}
Also used : Copy(com.emc.storageos.model.block.Copy) ArrayList(java.util.ArrayList) CopiesParam(com.emc.storageos.model.block.CopiesParam) VolumeRestRep(com.emc.storageos.model.block.VolumeRestRep) UnManagedVolumeRestRep(com.emc.storageos.model.block.UnManagedVolumeRestRep) ServiceErrorException(com.emc.vipr.client.exceptions.ServiceErrorException) URI(java.net.URI)

Example 13 with Copy

use of com.emc.storageos.model.block.Copy in project coprhd-controller by CoprHD.

the class DeactivateContinuousCopy method doExecute.

@Override
protected Tasks<VolumeRestRep> doExecute() throws Exception {
    Copy copy = new Copy();
    copy.setType(type);
    copy.setCopyID(continuousCopyId);
    CopiesParam param = new CopiesParam();
    param.getCopies().add(copy);
    return getClient().blockVolumes().deactivateContinuousCopies(volumeId, param, deleteType);
}
Also used : Copy(com.emc.storageos.model.block.Copy) CopiesParam(com.emc.storageos.model.block.CopiesParam)

Example 14 with Copy

use of com.emc.storageos.model.block.Copy in project coprhd-controller by CoprHD.

the class FailoverBlockVolume method doExecute.

@Override
protected Tasks<VolumeRestRep> doExecute() throws Exception {
    Copy copy = new Copy();
    copy.setType(type);
    copy.setCopyID(failoverTarget);
    if (pointInTime != null) {
        copy.setPointInTime(pointInTime);
    }
    CopiesParam param = new CopiesParam();
    param.getCopies().add(copy);
    return getClient().blockVolumes().failover(volumeId, param);
}
Also used : Copy(com.emc.storageos.model.block.Copy) CopiesParam(com.emc.storageos.model.block.CopiesParam)

Example 15 with Copy

use of com.emc.storageos.model.block.Copy in project coprhd-controller by CoprHD.

the class SwapContinuousCopies method doExecute.

@Override
protected Tasks<VolumeRestRep> doExecute() throws Exception {
    Copy copy = new Copy();
    copy.setCopyID(targetVolumeId);
    copy.setType(type);
    CopiesParam param = new CopiesParam();
    param.getCopies().add(copy);
    return getClient().blockVolumes().swapContinuousCopies(targetVolumeId, param);
}
Also used : Copy(com.emc.storageos.model.block.Copy) CopiesParam(com.emc.storageos.model.block.CopiesParam)

Aggregations

Copy (com.emc.storageos.model.block.Copy)32 TaskList (com.emc.storageos.model.TaskList)17 TaskResourceRep (com.emc.storageos.model.TaskResourceRep)17 CheckPermission (com.emc.storageos.security.authorization.CheckPermission)17 POST (javax.ws.rs.POST)17 Path (javax.ws.rs.Path)17 Produces (javax.ws.rs.Produces)17 CopiesParam (com.emc.storageos.model.block.CopiesParam)12 URI (java.net.URI)10 Consumes (javax.ws.rs.Consumes)10 NullColumnValueGetter.isNullURI (com.emc.storageos.db.client.util.NullColumnValueGetter.isNullURI)8 Volume (com.emc.storageos.db.client.model.Volume)6 MapVolume (com.emc.storageos.api.mapper.functions.MapVolume)5 MapBlockConsistencyGroup (com.emc.storageos.api.mapper.functions.MapBlockConsistencyGroup)4 BlockConsistencyGroup (com.emc.storageos.db.client.model.BlockConsistencyGroup)4 BlockMirror (com.emc.storageos.db.client.model.BlockMirror)2 StorageSystem (com.emc.storageos.db.client.model.StorageSystem)2 ArrayList (java.util.ArrayList)2 AlternateIdConstraint (com.emc.storageos.db.client.constraint.AlternateIdConstraint)1 Constraint (com.emc.storageos.db.client.constraint.Constraint)1