Search in sources :

Example 1 with StorageCenterAPIException

use of com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException in project coprhd-controller by CoprHD.

the class DellSCStorageDriver method getStorageObject.

/**
 * Get storage object with a given type with specified native ID which belongs to specified storage system.
 *
 * @param storageSystemId The storage system native ID.
 * @param objectId The object ID.
 * @param type The class instance.
 * @param <T> The storage object type.
 * @return Storage object or Null if it does not exist.
 */
@SuppressWarnings("unchecked")
@Override
public <T extends StorageObject> T getStorageObject(String storageSystemId, String objectId, Class<T> type) {
    String requestedType = type.getSimpleName();
    LOG.info("Request for {} object {} from {}", requestedType, objectId, storageSystemId);
    DellSCUtil util = DellSCUtil.getInstance();
    try {
        StorageCenterAPI api = DellSCConnectionManager.getInstance().getConnection(storageSystemId);
        if (requestedType.equals(StorageVolume.class.getSimpleName())) {
            ScVolume volume = api.getVolume(objectId);
            Map<ScReplayProfile, List<String>> cgInfo = util.getGCInfo(api, storageSystemId);
            return (T) util.getStorageVolumeFromScVolume(api, volume, cgInfo);
        } else if (requestedType.equals(VolumeConsistencyGroup.class.getSimpleName())) {
            return (T) util.getVolumeConsistencyGroupFromReplayProfile(api.getConsistencyGroup(objectId), null);
        } else if (requestedType.equals(VolumeSnapshot.class.getSimpleName())) {
            return (T) util.getVolumeSnapshotFromReplay(api.getReplay(objectId), null);
        } else if (requestedType.equals(StoragePool.class.getSimpleName())) {
            return (T) util.getStoragePoolFromStorageType(api, api.getStorageType(objectId), null);
        }
    } catch (StorageCenterAPIException | DellSCDriverException e) {
        String message = String.format("Error getting requested storage object: %s", e);
        LOG.warn(message);
    }
    LOG.warn("Requested object of type {} not found.", requestedType);
    return null;
}
Also used : StorageCenterAPI(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI) StorageCenterAPIException(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException) ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) StorageVolume(com.emc.storageos.storagedriver.model.StorageVolume) ScReplayProfile(com.emc.storageos.driver.dellsc.scapi.objects.ScReplayProfile) List(java.util.List) VolumeSnapshot(com.emc.storageos.storagedriver.model.VolumeSnapshot)

Example 2 with StorageCenterAPIException

use of com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException in project coprhd-controller by CoprHD.

the class DellSCUtil method getGCInfo.

/**
 * Gets consistency groups and volumes from a given Storage Center.
 *
 * @param api The API connection.
 * @param ssn The Storage Center serial number.
 * @return The consistency groups and their volumes.
 */
public Map<ScReplayProfile, List<String>> getGCInfo(StorageCenterAPI api, String ssn) {
    Map<ScReplayProfile, List<String>> result = new HashMap<>();
    ScReplayProfile[] cgs = api.getConsistencyGroups(ssn);
    for (ScReplayProfile cg : cgs) {
        result.put(cg, new ArrayList<>());
        try {
            ScVolume[] vols = api.getReplayProfileVolumes(cg.instanceId);
            for (ScVolume vol : vols) {
                result.get(cg).add(vol.instanceId);
            }
        } catch (StorageCenterAPIException e) {
            LOG.warn(String.format("Error getting volumes for consistency group %s: %s", cg.instanceId, e));
        }
    }
    return result;
}
Also used : ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) HashMap(java.util.HashMap) ScReplayProfile(com.emc.storageos.driver.dellsc.scapi.objects.ScReplayProfile) StorageCenterAPIException(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException) ArrayList(java.util.ArrayList) List(java.util.List)

Example 3 with StorageCenterAPIException

use of com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException in project coprhd-controller by CoprHD.

the class DellSCCloning method createVolumeClone.

/**
 * Create a clone of a volume.
 *
 * @param clones The clones to create.
 * @return The clone task.
 */
public DriverTask createVolumeClone(List<VolumeClone> clones) {
    LOG.info("Creating volume clone");
    DellSCDriverTask task = new DellSCDriverTask("createVolumeClone");
    StringBuilder errBuffer = new StringBuilder();
    int createCount = 0;
    for (VolumeClone clone : clones) {
        try {
            StorageCenterAPI api = connectionManager.getConnection(clone.getStorageSystemId());
            ScReplay replay = null;
            // Make sure volume is active for the automated tests that try to
            // create temporary snapshot to create the clone from after immediate volume creation
            api.checkAndInitVolume(clone.getParentId());
            if (clone.getSourceType() == SourceType.SNAPSHOT) {
                replay = api.getReplay(clone.getParentId());
            } else {
                // Create temporary replay to create the clone from
                replay = api.createReplay(clone.getParentId(), 5);
            }
            // Now create a new volume from the snapshot
            ScVolume scVol = api.createViewVolume(clone.getDisplayName(), replay.instanceId);
            clone.setProvisionedCapacity(SizeUtil.sizeStrToBytes(scVol.configuredSize));
            // New volumes don't allocate any space
            clone.setAllocatedCapacity(0L);
            clone.setWwn(scVol.deviceId);
            clone.setNativeId(scVol.instanceId);
            clone.setDeviceLabel(scVol.name);
            clone.setAccessStatus(AccessStatus.READ_WRITE);
            clone.setReplicationState(ReplicationState.SYNCHRONIZED);
            createCount++;
        } catch (DellSCDriverException | StorageCenterAPIException dex) {
            String error = String.format("Error creating clone of volume %s: %s", clone.getParentId(), dex);
            errBuffer.append(String.format("%s%n", error));
        }
    }
    task.setMessage(errBuffer.toString());
    if (createCount == clones.size()) {
        task.setStatus(TaskStatus.READY);
    } else if (createCount == 0) {
        task.setStatus(TaskStatus.FAILED);
    } else {
        task.setStatus(TaskStatus.PARTIALLY_FAILED);
    }
    return task;
}
Also used : ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) StorageCenterAPI(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI) DellSCDriverException(com.emc.storageos.driver.dellsc.DellSCDriverException) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) StorageCenterAPIException(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException) VolumeClone(com.emc.storageos.storagedriver.model.VolumeClone) ScReplay(com.emc.storageos.driver.dellsc.scapi.objects.ScReplay)

Example 4 with StorageCenterAPIException

use of com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException in project coprhd-controller by CoprHD.

the class DellSCConsistencyGroups method removeVolumesFromConsistencyGroup.

/**
 * Remove volumes from consistency groups.
 *
 * @param volumes The volumes.
 * @param capabilities The requested capabilities.
 * @return The driver task.
 */
public DriverTask removeVolumesFromConsistencyGroup(List<StorageVolume> volumes, StorageCapabilities capabilities) {
    DellSCDriverTask task = new DellSCDriverTask("removeVolumeFromCG");
    StringBuilder errBuffer = new StringBuilder();
    int removeCount = 0;
    for (StorageVolume volume : volumes) {
        String ssn = volume.getStorageSystemId();
        try {
            StorageCenterAPI api = connectionManager.getConnection(ssn);
            api.removeVolumeFromConsistencyGroup(volume.getNativeId(), volume.getConsistencyGroup());
            removeCount++;
        } catch (StorageCenterAPIException | DellSCDriverException dex) {
            String error = String.format("Error adding volume %s to consistency group: %s", volume.getNativeId(), dex);
            LOG.warn(error);
            errBuffer.append(String.format("%s%n", error));
        }
    }
    task.setMessage(errBuffer.toString());
    if (removeCount == volumes.size()) {
        task.setStatus(TaskStatus.READY);
    } else if (removeCount == 0) {
        task.setStatus(TaskStatus.FAILED);
    } else {
        task.setStatus(TaskStatus.PARTIALLY_FAILED);
    }
    return task;
}
Also used : StorageVolume(com.emc.storageos.storagedriver.model.StorageVolume) StorageCenterAPI(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI) DellSCDriverException(com.emc.storageos.driver.dellsc.DellSCDriverException) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) StorageCenterAPIException(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException)

Example 5 with StorageCenterAPIException

use of com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException in project coprhd-controller by CoprHD.

the class DellSCConsistencyGroups method deleteConsistencyGroup.

/**
 * Delete a consistency group.
 *
 * @param volumeConsistencyGroup The group to delete.
 * @return The consistency group delete task.
 */
public DriverTask deleteConsistencyGroup(VolumeConsistencyGroup volumeConsistencyGroup) {
    DellSCDriverTask task = new DellSCDriverTask("deleteVolume");
    try {
        StorageCenterAPI api = connectionManager.getConnection(volumeConsistencyGroup.getStorageSystemId());
        ScReplayProfile[] cgs = api.getConsistencyGroups(volumeConsistencyGroup.getStorageSystemId());
        for (ScReplayProfile cg : cgs) {
            if (cg.instanceId.equals(volumeConsistencyGroup.getNativeId())) {
                api.deleteConsistencyGroup(cg.instanceId);
                break;
            }
        }
        // We either deleted the CG or it was not found, either way we are fine
        task.setStatus(TaskStatus.READY);
    } catch (StorageCenterAPIException | DellSCDriverException dex) {
        String error = String.format("Error deleting CG %s: %s", volumeConsistencyGroup.getDisplayName(), dex);
        LOG.error(error);
        task.setFailed(error);
    }
    return task;
}
Also used : StorageCenterAPI(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI) DellSCDriverException(com.emc.storageos.driver.dellsc.DellSCDriverException) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) ScReplayProfile(com.emc.storageos.driver.dellsc.scapi.objects.ScReplayProfile) StorageCenterAPIException(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException)

Aggregations

StorageCenterAPIException (com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException)22 StorageCenterAPI (com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI)20 DellSCDriverException (com.emc.storageos.driver.dellsc.DellSCDriverException)19 DellSCDriverTask (com.emc.storageos.driver.dellsc.DellSCDriverTask)18 ScVolume (com.emc.storageos.driver.dellsc.scapi.objects.ScVolume)11 StorageVolume (com.emc.storageos.storagedriver.model.StorageVolume)7 ScReplayProfile (com.emc.storageos.driver.dellsc.scapi.objects.ScReplayProfile)5 ScServer (com.emc.storageos.driver.dellsc.scapi.objects.ScServer)4 DriverTask (com.emc.storageos.storagedriver.DriverTask)4 HashMap (java.util.HashMap)4 ScReplay (com.emc.storageos.driver.dellsc.scapi.objects.ScReplay)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 ScCopyMirrorMigrate (com.emc.storageos.driver.dellsc.scapi.objects.ScCopyMirrorMigrate)2 ScMapping (com.emc.storageos.driver.dellsc.scapi.objects.ScMapping)2 ScMappingProfile (com.emc.storageos.driver.dellsc.scapi.objects.ScMappingProfile)2 ScServerHba (com.emc.storageos.driver.dellsc.scapi.objects.ScServerHba)2 Initiator (com.emc.storageos.storagedriver.model.Initiator)2 StoragePort (com.emc.storageos.storagedriver.model.StoragePort)2 VolumeMirror (com.emc.storageos.storagedriver.model.VolumeMirror)2