use of com.emc.storageos.svcs.errorhandling.model.ServiceError in project coprhd-controller by CoprHD.
the class BlockOrchestrationDeviceController method createVolumes.
/*
* (non-Javadoc)
*
* @see com.emc.storageos.blockorchestrationcontroller.BlockOrchestrationController#createVolumes(java.util.List,
* java.lang.String)
*/
@Override
public void createVolumes(List<VolumeDescriptor> volumes, String taskId) throws ControllerException {
List<URI> volUris = VolumeDescriptor.getVolumeURIs(volumes);
VolumeCreateWorkflowCompleter completer = new VolumeCreateWorkflowCompleter(volUris, taskId, volumes);
Workflow workflow = null;
try {
// Generate the Workflow.
workflow = _workflowService.getNewWorkflow(this, CREATE_VOLUMES_WF_NAME, true, taskId);
// the wait for key returned by previous call
String waitFor = null;
s_logger.info("Generating steps for create Volume");
// First, call the BlockDeviceController to add its methods.
waitFor = _blockDeviceController.addStepsForCreateVolumes(workflow, waitFor, volumes, taskId);
s_logger.info("Checking for SRDF steps");
// Call the SRDFDeviceController to add its methods if there are SRDF volumes.
waitFor = _srdfDeviceController.addStepsForCreateVolumes(workflow, waitFor, volumes, taskId);
s_logger.info("Checking for VPLEX steps");
// Call the VPlexDeviceController to add its methods if there are VPLEX volumes.
waitFor = _vplexDeviceController.addStepsForCreateVolumes(workflow, waitFor, volumes, taskId);
s_logger.info("Checking for RP steps");
// Call the RPDeviceController to add its methods if there are RP protections
waitFor = _rpDeviceController.addStepsForCreateVolumes(workflow, waitFor, volumes, taskId);
s_logger.info("Checking for Replica steps");
// Call the ReplicaDeviceController to add its methods if volumes are added to CG, and the CG associated
// with replication
// group(s)
waitFor = _replicaDeviceController.addStepsForCreateVolumes(workflow, waitFor, volumes, taskId);
// Finish up and execute the plan.
// The Workflow will handle the TaskCompleter
String successMessage = "Create volumes successful for: " + volUris.toString();
Object[] callbackArgs = new Object[] { volUris };
workflow.executePlan(completer, successMessage, new WorkflowCallback(), callbackArgs, null, null);
} catch (LockRetryException ex) {
/**
* Added this catch block to mark the current workflow as completed so that lock retry will not get exception while creating new
* workflow using the same taskid.
*/
s_logger.info(String.format("Lock retry exception key: %s remaining time %d", ex.getLockIdentifier(), ex.getRemainingWaitTimeSeconds()));
releaseWorkflowLocks(workflow);
if (workflow != null && !NullColumnValueGetter.isNullURI(workflow.getWorkflowURI()) && workflow.getWorkflowState() == WorkflowState.CREATED) {
com.emc.storageos.db.client.model.Workflow wf = s_dbClient.queryObject(com.emc.storageos.db.client.model.Workflow.class, workflow.getWorkflowURI());
if (!wf.getCompleted()) {
s_logger.error("Marking the status to completed for the newly created workflow {}", wf.getId());
wf.setCompleted(true);
s_dbClient.updateObject(wf);
}
}
throw ex;
} catch (Exception ex) {
s_logger.error("Could not create volumes: " + volUris, ex);
releaseWorkflowLocks(workflow);
String opName = ResourceOperationTypeEnum.CREATE_BLOCK_VOLUME.getName();
ServiceError serviceError = DeviceControllerException.errors.createVolumesFailed(volUris.toString(), opName, ex);
completer.error(s_dbClient, _locker, serviceError);
}
}
use of com.emc.storageos.svcs.errorhandling.model.ServiceError in project coprhd-controller by CoprHD.
the class BlockOrchestrationDeviceController method expandVolume.
/*
* (non-Javadoc)
*
* @see com.emc.storageos.blockorchestrationcontroller.BlockOrchestrationController#expandVolume(java.net.URI, long,
* java.lang.String)
*/
@Override
public void expandVolume(List<VolumeDescriptor> volumes, String taskId) throws ControllerException {
List<URI> volUris = VolumeDescriptor.getVolumeURIs(volumes);
VolumeWorkflowCompleter completer = new VolumeWorkflowCompleter(volUris, taskId);
try {
// Validate the volume identities before proceeding
validator.volumeURIs(volUris, true, true, ValCk.ID, ValCk.VPLEX);
// Generate the Workflow.
Workflow workflow = _workflowService.getNewWorkflow(this, EXPAND_VOLUMES_WF_NAME, true, taskId);
// the wait for key returned by previous call
String waitFor = null;
// First, call the RP controller to add methods for RP CG delete
waitFor = _rpDeviceController.addPreVolumeExpandSteps(workflow, volumes, taskId);
// Call the BlockDeviceController to add its methods if there are block or VPLEX backend volumes.
waitFor = _blockDeviceController.addStepsForExpandVolume(workflow, waitFor, volumes, taskId);
// Call the SRDFDeviceController to add its methods for SRDF Source / SRDF Target volumes.
waitFor = _srdfDeviceController.addStepsForExpandVolume(workflow, waitFor, volumes, taskId);
// Call the VPlexDeviceController to add its methods if there are VPLEX volumes.
waitFor = _vplexDeviceController.addStepsForExpandVolume(workflow, waitFor, volumes, taskId);
// Call the RPDeviceController to add its methods for post volume expand ie. recreate RPCG
waitFor = _rpDeviceController.addPostVolumeExpandSteps(workflow, waitFor, volumes, taskId);
// Finish up and execute the plan.
// The Workflow will handle the TaskCompleter
String successMessage = "Expand volume successful for: " + volUris.toString();
Object[] callbackArgs = new Object[] { new ArrayList<URI>(volUris) };
workflow.executePlan(completer, successMessage, new WorkflowCallback(), callbackArgs, null, null);
} catch (Exception ex) {
s_logger.error("Could not expand volume: " + volUris, toString(), ex);
String opName = ResourceOperationTypeEnum.EXPAND_BLOCK_VOLUME.getName();
ServiceError serviceError = DeviceControllerException.errors.expandVolumeFailed(volUris.toString(), opName, ex);
completer.error(s_dbClient, _locker, serviceError);
}
}
use of com.emc.storageos.svcs.errorhandling.model.ServiceError in project coprhd-controller by CoprHD.
the class ComputeSystemControllerImpl method detachClusterStorage.
@Override
public void detachClusterStorage(URI cluster, boolean deactivateOnComplete, boolean checkVms, String taskId) throws InternalException {
TaskCompleter completer = null;
try {
completer = new ClusterCompleter(cluster, deactivateOnComplete, taskId);
Workflow workflow = _workflowService.getNewWorkflow(this, DETACH_CLUSTER_STORAGE_WF_NAME, true, taskId);
String waitFor = null;
if (checkVms) {
waitFor = computeDeviceController.addStepsVcenterClusterCleanup(workflow, waitFor, cluster, deactivateOnComplete);
}
waitFor = unmountClusterStorage(workflow, waitFor, cluster);
waitFor = addStepsForClusterExportGroups(workflow, waitFor, cluster);
workflow.executePlan(completer, "Success", null, null, null, null);
} catch (Exception ex) {
String message = "detachClusterStorage caught an exception.";
_log.error(message, ex);
ServiceError serviceError = DeviceControllerException.errors.jobFailed(ex);
completer.error(_dbClient, serviceError);
}
}
use of com.emc.storageos.svcs.errorhandling.model.ServiceError in project coprhd-controller by CoprHD.
the class ComputeSystemControllerImpl method detachDataCenterStorage.
@Override
public void detachDataCenterStorage(URI datacenter, boolean deactivateOnComplete, String taskId) throws InternalException {
TaskCompleter completer = null;
try {
completer = new VcenterDataCenterCompleter(datacenter, deactivateOnComplete, taskId);
Workflow workflow = _workflowService.getNewWorkflow(this, DETACH_VCENTER_DATACENTER_STORAGE_WF_NAME, true, taskId);
String waitFor = null;
waitFor = addStepForVcenterDataCenter(workflow, waitFor, datacenter);
workflow.executePlan(completer, "Success", null, null, null, null);
} catch (Exception ex) {
String message = "detachDataCenterStorage caught an exception.";
_log.error(message, ex);
ServiceError serviceError = DeviceControllerException.errors.jobFailed(ex);
completer.error(_dbClient, serviceError);
}
}
use of com.emc.storageos.svcs.errorhandling.model.ServiceError in project coprhd-controller by CoprHD.
the class ComputeSystemControllerImpl method addInitiatorsToExport.
@Override
public void addInitiatorsToExport(URI eventId, URI hostId, List<URI> initiators, String taskId) throws ControllerException {
TaskCompleter completer = null;
try {
completer = new InitiatorCompleter(eventId, initiators, InitiatorOperation.ADD, taskId);
Workflow workflow = _workflowService.getNewWorkflow(this, ADD_INITIATOR_STORAGE_WF_NAME, true, taskId);
String waitFor = null;
waitFor = addStepsForAddInitiators(workflow, waitFor, hostId, initiators, eventId);
workflow.executePlan(completer, "Success", null, null, null, null);
} catch (Exception ex) {
String message = "addInitiatorToStorage caught an exception.";
_log.error(message, ex);
ServiceError serviceError = DeviceControllerException.errors.jobFailed(ex);
completer.error(_dbClient, serviceError);
}
}
Aggregations