/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.hds.prov.job; import com.emc.storageos.exceptions.DeviceControllerException; import com.emc.storageos.svcs.errorhandling.model.ServiceError; import com.emc.storageos.volumecontroller.Job; import com.emc.storageos.volumecontroller.JobContext; import com.emc.storageos.volumecontroller.impl.block.taskcompleter.CleanupMetaVolumeMembersCompleter; import com.emc.storageos.workflow.Workflow; import com.emc.storageos.workflow.WorkflowService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; import java.util.ArrayList; public class HDSCleanupMetaVolumeMembersJob extends HDSJob { private static final Logger _log = LoggerFactory.getLogger(HDSCleanupMetaVolumeMembersJob.class); CleanupMetaVolumeMembersCompleter cleanupCompleter; URI storageSystemURI; URI volumeURI; public HDSCleanupMetaVolumeMembersJob(String asyncMessageId, URI storageSystemURI, URI volumeURI, CleanupMetaVolumeMembersCompleter cleanupCompleter) { super(asyncMessageId, storageSystemURI, cleanupCompleter, "CleanupMetaVolumeMembers"); this.cleanupCompleter = cleanupCompleter; this.storageSystemURI = storageSystemURI; this.volumeURI = volumeURI; } @Override public void updateStatus(JobContext jobContext) throws Exception { try { if (_status == Job.JobStatus.IN_PROGRESS) { return; } StringBuilder logMsgBuilder = new StringBuilder(String.format("Updating status of job %s to %s", this.getJobName(), _status.name())); _log.info(logMsgBuilder.toString()); if (_status == Job.JobStatus.SUCCESS) { // clean meta volume members in source step data String sourceStepId = cleanupCompleter.getSourceStepId(); WorkflowService.getInstance().storeStepData(sourceStepId, new ArrayList<String>()); cleanupCompleter.complete(Workflow.StepState.SUCCESS, null); } else if (_status == JobStatus.FAILED) { ServiceError serviceError = DeviceControllerException.errors.jobFailedOp("CleanupMetaVolumeMembersJob"); cleanupCompleter.complete(Workflow.StepState.ERROR, serviceError); } else if (_status == JobStatus.ERROR) { ServiceError serviceError = DeviceControllerException.errors.jobFailedOp("CleanupMetaVolumeMembersJob"); cleanupCompleter.complete(Workflow.StepState.ERROR, serviceError); } } catch (Exception e) { _log.error("Caught an exception while trying to updateStatus for CleanupMetaVolumeMembersJob", e); ServiceError serviceError = DeviceControllerException.errors.jobFailed(e); cleanupCompleter.complete(Workflow.StepState.ERROR, serviceError); } } }