/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.smis.job; import java.net.URI; import javax.cim.CIMObjectPath; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.svcs.errorhandling.model.ServiceError; import com.emc.storageos.volumecontroller.JobContext; import com.emc.storageos.volumecontroller.TaskCompleter; import com.emc.storageos.volumecontroller.impl.smis.SmisException; import com.emc.storageos.workflow.WorkflowStepCompleter; public class SmisSRDFCreateMirrorJob extends SmisJob { private static final Logger log = LoggerFactory.getLogger(SmisSRDFCreateMirrorJob.class); private static final String JOB_NAME = "Create SRDF mirror"; public SmisSRDFCreateMirrorJob(final CIMObjectPath cimJob, final URI storageSystem, final TaskCompleter taskCompleter) { super(cimJob, storageSystem, taskCompleter, JOB_NAME); } @Override public void updateStatus(final JobContext jobContext) throws Exception { log.info("START SmisSRDFCreateMirrorJob#updateStatus"); JobStatus jobStatus = getJobStatus(); try { switch (jobStatus) { case IN_PROGRESS: handleInProgress(); break; case SUCCESS: handleSuccess(jobContext); break; default: log.error("Unable to handle job state: {}", jobStatus.name()); } } catch (Exception e) { TaskCompleter completer = getTaskCompleter(); String msg = String.format("Failed to update status for task %s on volume %s", completer.getOpId(), completer.getId()); log.error(msg, e); setPostProcessingFailedStatus(msg + ": " + e.getMessage()); ServiceError error = SmisException.errors.jobFailed(e.getMessage()); completer.error(jobContext.getDbClient(), error); } finally { log.info("updateStatus operation END"); } } private void handleInProgress() { log.info("START handle in progress"); TaskCompleter completer = getTaskCompleter(); WorkflowStepCompleter.stepExecuting(completer.getOpId()); } private void handleSuccess(final JobContext jobContext) { log.info("Successfully created SRDF mirror from {}", getTaskCompleter().getIds()); getTaskCompleter().ready(jobContext.getDbClient()); } }