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;
}
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;
}
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;
}
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;
}
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;
}
Aggregations