/* * 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 javax.wbem.CloseableIterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.exceptions.DeviceControllerErrors; import com.emc.storageos.svcs.errorhandling.model.ServiceError; import com.emc.storageos.volumecontroller.JobContext; import com.emc.storageos.volumecontroller.TaskCompleter; /** * A job used for deleting VDEVs for a snapshot target group */ public class SmisDeleteVmaxCGTargetVolumesJob extends SmisJob { private static final Logger _log = LoggerFactory.getLogger(SmisDeleteVmaxCGTargetVolumesJob.class); private String[] deviceIds; public SmisDeleteVmaxCGTargetVolumesJob(CIMObjectPath cimJob, URI storageSystem, String[] deviceIds, TaskCompleter taskCompleter) { super(cimJob, storageSystem, taskCompleter, "DeleteVdevVolumes"); if (deviceIds != null) { this.deviceIds = deviceIds.clone(); } } public void updateStatus(JobContext jobContext) throws Exception { CloseableIterator<CIMObjectPath> iterator = null; DbClient dbClient = jobContext.getDbClient(); JobStatus jobStatus = getJobStatus(); try { if (jobStatus == JobStatus.SUCCESS) { _log.info("Vmax target volumes successfully removed: {}", deviceIds); } else if (jobStatus == JobStatus.FAILED || jobStatus == JobStatus.FATAL_ERROR) { _log.info("Failed to delete target volumes: {}", deviceIds); } } catch (Exception e) { setPostProcessingFailedStatus(e.getMessage()); _log.error("Caught an exception while trying to updateStatus for SmisDeleteVmaxCGTargetVolumesJob", e); ServiceError error = DeviceControllerErrors.smis.methodFailed("updateStatus", e.getMessage()); getTaskCompleter().error(dbClient, error); } finally { super.updateStatus(jobContext); if (iterator != null) { iterator.close(); } } } }