Search in sources :

Example 6 with ScVolume

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

the class DellSCProvisioning method unexportVolumesFromInitiators.

/**
 * Remove volume exports to initiators.
 *
 * @param initiators The initiators to remove from.
 * @param volumes The volumes to remove.
 * @return The unexport task.
 */
public DriverTask unexportVolumesFromInitiators(List<Initiator> initiators, List<StorageVolume> volumes) {
    LOG.info("Unexporting volumes from initiators");
    DriverTask task = new DellSCDriverTask("unexportVolumes");
    ScServer server = null;
    StringBuilder errBuffer = new StringBuilder();
    int volumesUnmapped = 0;
    for (StorageVolume volume : volumes) {
        String ssn = volume.getStorageSystemId();
        boolean isSnapshot = StringUtils.countMatches(volume.getNativeId(), ".") == 2;
        try {
            StorageCenterAPI api = connectionManager.getConnection(ssn);
            // Find our actual volume
            ScVolume scVol = null;
            if (isSnapshot) {
                scVol = api.findReplayView(volume.getNativeId());
                // For snapshot views we can just delete the view
                if (scVol != null) {
                    api.deleteVolume(scVol.instanceId);
                    volumesUnmapped++;
                    continue;
                }
            } else {
                scVol = api.getVolume(volume.getNativeId());
            }
            if (scVol == null) {
                throw new DellSCDriverException(String.format("Unable to find volume %s", volume.getNativeId()));
            }
            // Look up the server if needed
            if (server == null) {
                server = findScServer(api, ssn, initiators);
            }
            if (server == null) {
                // Unable to find the server, can't continue
                throw new DellSCDriverException(SERVER_CREATE_FAIL_MSG);
            }
            ScMappingProfile[] mappingProfiles = api.findMappingProfiles(server.instanceId, scVol.instanceId);
            for (ScMappingProfile mappingProfile : mappingProfiles) {
                api.deleteMappingProfile(mappingProfile.instanceId);
            }
            volumesUnmapped++;
            LOG.info("Volume '{}' unexported from server '{}'", scVol.name, server.name);
        } catch (StorageCenterAPIException | DellSCDriverException dex) {
            String error = String.format("Error unmapping volume %s: %s", volume.getDisplayName(), dex);
            LOG.error(error);
            errBuffer.append(String.format("%s%n", error));
            if (SERVER_CREATE_FAIL_MSG.equals(dex.getMessage())) {
                // Game over
                break;
            }
        }
    }
    task.setMessage(errBuffer.toString());
    if (volumesUnmapped == volumes.size()) {
        task.setStatus(TaskStatus.READY);
    } else if (volumesUnmapped == 0) {
        task.setStatus(TaskStatus.FAILED);
    } else {
        task.setStatus(TaskStatus.PARTIALLY_FAILED);
    }
    return task;
}
Also used : StorageCenterAPI(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI) ScServer(com.emc.storageos.driver.dellsc.scapi.objects.ScServer) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) ScMappingProfile(com.emc.storageos.driver.dellsc.scapi.objects.ScMappingProfile) StorageCenterAPIException(com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException) DriverTask(com.emc.storageos.storagedriver.DriverTask) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) StorageVolume(com.emc.storageos.storagedriver.model.StorageVolume) DellSCDriverException(com.emc.storageos.driver.dellsc.DellSCDriverException)

Example 7 with ScVolume

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

the class DellSCProvisioning method createVolumes.

/**
 * Create storage volumes with a given set of capabilities.
 * Before completion of the request, set all required data for provisioned
 * volumes in "volumes" parameter.
 *
 * @param volumes Input/output argument for volumes.
 * @param storageCapabilities Input argument for capabilities. Defines
 *            storage capabilities of volumes to create.
 * @return The volume creation task.
 */
public DriverTask createVolumes(List<StorageVolume> volumes, StorageCapabilities storageCapabilities) {
    DriverTask task = new DellSCDriverTask("createVolume");
    StringBuilder errBuffer = new StringBuilder();
    int volumesCreated = 0;
    for (StorageVolume volume : volumes) {
        LOG.debug("Creating volume {} on system {}", volume.getDisplayName(), volume.getStorageSystemId());
        String ssn = volume.getStorageSystemId();
        try {
            StorageCenterAPI api = connectionManager.getConnection(ssn);
            ScVolume scVol = api.createVolume(ssn, volume.getDisplayName(), volume.getStoragePoolId(), SizeUtil.byteToMeg(volume.getRequestedCapacity()), volume.getConsistencyGroup());
            volume.setProvisionedCapacity(SizeUtil.sizeStrToBytes(scVol.configuredSize));
            // New volumes don't allocate any space
            volume.setAllocatedCapacity(0L);
            volume.setWwn(scVol.deviceId);
            volume.setNativeId(scVol.instanceId);
            volume.setDeviceLabel(scVol.name);
            volume.setAccessStatus(AccessStatus.READ_WRITE);
            volumesCreated++;
            LOG.info("Created volume '{}'", scVol.name);
        } catch (StorageCenterAPIException | DellSCDriverException dex) {
            String error = String.format("Error creating volume %s: %s", volume.getDisplayName(), dex);
            LOG.error(error);
            errBuffer.append(String.format("%s%n", error));
        }
    }
    task.setMessage(errBuffer.toString());
    if (volumesCreated == volumes.size()) {
        task.setStatus(TaskStatus.READY);
    } else if (volumesCreated == 0) {
        task.setStatus(TaskStatus.FAILED);
    } else {
        task.setStatus(TaskStatus.PARTIALLY_FAILED);
    }
    return task;
}
Also used : DriverTask(com.emc.storageos.storagedriver.DriverTask) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) 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 8 with ScVolume

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

the class DellSCProvisioning method expandVolume.

/**
 * Expand volume to a new size.
 * Before completion of the request, set all required data for expanded
 * volume in "volume" parameter.
 *
 * @param storageVolume Volume to expand. Type: Input/Output argument.
 * @param newCapacity Requested capacity. Type: input argument.
 * @return The volume expansion task.
 */
public DriverTask expandVolume(StorageVolume storageVolume, long newCapacity) {
    DriverTask task = new DellSCDriverTask("expandVolume");
    try {
        StorageCenterAPI api = connectionManager.getConnection(storageVolume.getStorageSystemId());
        ScVolume scVol = api.expandVolume(storageVolume.getNativeId(), SizeUtil.byteToMeg(newCapacity));
        storageVolume.setProvisionedCapacity(SizeUtil.sizeStrToBytes(scVol.configuredSize));
        task.setStatus(TaskStatus.READY);
        LOG.info("Expanded volume '{}'", scVol.name);
    } catch (DellSCDriverException | StorageCenterAPIException dex) {
        String error = String.format("Error expanding volume %s: %s", storageVolume.getDisplayName(), dex);
        LOG.error(error);
        task.setMessage(error);
        task.setStatus(TaskStatus.FAILED);
    }
    return task;
}
Also used : DriverTask(com.emc.storageos.storagedriver.DriverTask) DellSCDriverTask(com.emc.storageos.driver.dellsc.DellSCDriverTask) 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)

Example 9 with ScVolume

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

the class StorageCenterAPI method checkAndInitVolume.

/**
 * Workaround for tests. Will make sure a volume is active somewhere so
 * snapshots and other operations can be performed on it.
 *
 * @param volumeId The instance ID of the volume.
 */
public void checkAndInitVolume(String volumeId) {
    ScVolume volume = getVolume(volumeId);
    if (volume == null) {
        // Just let the calling method handle the subsequent failure
        return;
    }
    if (volume.active && volume.replayAllowed) {
        // It's all good
        return;
    }
    ScServer[] servers = getServerDefinitions(volume.scSerialNumber);
    for (ScServer server : servers) {
        if (!"down".equalsIgnoreCase(server.status)) {
            try {
                ScMappingProfile mapping = createVolumeMappingProfile(volume.instanceId, server.instanceId, -1, new String[0], -1, null);
                deleteMappingProfile(mapping.instanceId);
                break;
            } catch (StorageCenterAPIException e) {
                LOG.debug("Failed to activate volume to server {}.", server.instanceId);
            }
        }
    }
}
Also used : ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) ScServer(com.emc.storageos.driver.dellsc.scapi.objects.ScServer) ScMappingProfile(com.emc.storageos.driver.dellsc.scapi.objects.ScMappingProfile)

Example 10 with ScVolume

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

the class StorageCenterAPI method getConsistencyGroupVolumes.

/**
 * Gets the volumes that are part of a consistency group.
 *
 * @param instanceId The CG ID.
 * @return The volumes.
 * @throws StorageCenterAPIException
 */
public ScVolume[] getConsistencyGroupVolumes(String instanceId) throws StorageCenterAPIException {
    LOG.debug("Getting volume for consistency group {}", instanceId);
    RestResult rr = restClient.get(String.format("StorageCenter/ScReplayProfile/%s/VolumeList", instanceId));
    if (checkResults(rr)) {
        return gson.fromJson(rr.getResult(), ScVolume[].class);
    }
    throw new StorageCenterAPIException(rr.getErrorMsg());
}
Also used : ScVolume(com.emc.storageos.driver.dellsc.scapi.objects.ScVolume) RestResult(com.emc.storageos.driver.dellsc.scapi.rest.RestResult)

Aggregations

ScVolume (com.emc.storageos.driver.dellsc.scapi.objects.ScVolume)17 StorageCenterAPI (com.emc.storageos.driver.dellsc.scapi.StorageCenterAPI)11 StorageCenterAPIException (com.emc.storageos.driver.dellsc.scapi.StorageCenterAPIException)11 DellSCDriverException (com.emc.storageos.driver.dellsc.DellSCDriverException)10 DellSCDriverTask (com.emc.storageos.driver.dellsc.DellSCDriverTask)8 StorageVolume (com.emc.storageos.storagedriver.model.StorageVolume)5 ScServer (com.emc.storageos.driver.dellsc.scapi.objects.ScServer)4 RestResult (com.emc.storageos.driver.dellsc.scapi.rest.RestResult)4 DriverTask (com.emc.storageos.storagedriver.DriverTask)4 ArrayList (java.util.ArrayList)4 ScMappingProfile (com.emc.storageos.driver.dellsc.scapi.objects.ScMappingProfile)3 ScReplayProfile (com.emc.storageos.driver.dellsc.scapi.objects.ScReplayProfile)3 HashMap (java.util.HashMap)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 ScReplay (com.emc.storageos.driver.dellsc.scapi.objects.ScReplay)2 StoragePort (com.emc.storageos.storagedriver.model.StoragePort)2 VolumeMirror (com.emc.storageos.storagedriver.model.VolumeMirror)2 ScControllerPort (com.emc.storageos.driver.dellsc.scapi.objects.ScControllerPort)1