/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.smis.job; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.Operation; import com.emc.storageos.db.client.model.Volume; import com.emc.storageos.volumecontroller.JobContext; import com.emc.storageos.volumecontroller.TaskCompleter; import com.emc.storageos.volumecontroller.impl.block.taskcompleter.VolumeDetachCloneCompleter; import com.emc.storageos.workflow.WorkflowStepCompleter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.cim.CIMObjectPath; import java.net.URI; public class SmisBlockDetachCloneJob extends SmisJob { private static final Logger _log = LoggerFactory.getLogger(SmisBlockDetachCloneJob.class); public SmisBlockDetachCloneJob(CIMObjectPath cimJob, URI storageSystem, TaskCompleter taskCompleter) { super(cimJob, storageSystem, taskCompleter, "Detach clone"); } @Override public void updateStatus(JobContext jobContext) throws Exception { _log.info("START updateStatus for clone detach"); JobStatus jobStatus = getJobStatus(); super.updateStatus(jobContext); if (jobStatus == JobStatus.IN_PROGRESS) { return; } DbClient dbClient = jobContext.getDbClient(); VolumeDetachCloneCompleter taskCompleter = (VolumeDetachCloneCompleter) getTaskCompleter(); Volume cloneVolume = dbClient.queryObject(Volume.class, taskCompleter.getId()); Operation.Status op = Operation.Status.pending; String message = "Detaching volume clone"; if (jobStatus == JobStatus.SUCCESS) { op = Operation.Status.ready; message = "Successfully detached volume clone"; } else if (jobStatus == JobStatus.ERROR || jobStatus == JobStatus.FAILED || jobStatus == JobStatus.FATAL_ERROR) { op = Operation.Status.error; message = "Failed to detached volume clone"; } // set to terminal status to stop polling job if (jobStatus == JobStatus.ERROR) { setFatalErrorStatus(message); } dbClient.updateTaskOpStatus(Volume.class, cloneVolume.getId(), taskCompleter.getOpId(), new Operation(op.name(), message)); WorkflowStepCompleter.updateState(taskCompleter.getOpId(), op, message); } }