use of com.emc.storageos.db.client.DbClient in project coprhd-controller by CoprHD.
the class SmisCloneVolumeJob method updateStatus.
@Override
public void updateStatus(JobContext jobContext) throws Exception {
_log.info("START updateStatus for clone volume");
CloseableIterator<CIMObjectPath> iterator = null;
DbClient dbClient = jobContext.getDbClient();
JobStatus jobStatus = getJobStatus();
try {
CIMConnectionFactory cimConnectionFactory;
WBEMClient client = null;
CloneCreateCompleter completer = (CloneCreateCompleter) getTaskCompleter();
Volume cloneVolume = dbClient.queryObject(Volume.class, completer.getId());
// from pool's reserved capacity map.
if (jobStatus == JobStatus.SUCCESS || jobStatus == JobStatus.FAILED || jobStatus == JobStatus.FATAL_ERROR) {
cimConnectionFactory = jobContext.getCimConnectionFactory();
client = getWBEMClient(dbClient, cimConnectionFactory);
URI poolURI = cloneVolume.getPool();
SmisUtils.updateStoragePoolCapacity(dbClient, client, poolURI);
StoragePool pool = dbClient.queryObject(StoragePool.class, poolURI);
StringMap reservationMap = pool.getReservedCapacityMap();
// remove from reservation map
reservationMap.remove(cloneVolume.getId().toString());
dbClient.persistObject(pool);
}
if (jobStatus == JobStatus.SUCCESS) {
_log.info("Clone creation success");
iterator = client.associatorNames(getCimJob(), null, SmisConstants.CIM_STORAGE_VOLUME, null, null);
if (iterator.hasNext()) {
CIMObjectPath cloneVolumePath = iterator.next();
CIMInstance syncVolume = client.getInstance(cloneVolumePath, false, false, null);
String deviceId = cloneVolumePath.getKey(SmisConstants.CP_DEVICE_ID).getValue().toString();
String elementName = CIMPropertyFactory.getPropertyValue(syncVolume, SmisConstants.CP_ELEMENT_NAME);
String wwn = CIMPropertyFactory.getPropertyValue(syncVolume, SmisConstants.CP_WWN_NAME);
String alternateName = CIMPropertyFactory.getPropertyValue(syncVolume, SmisConstants.CP_NAME);
cloneVolume.setProvisionedCapacity(getProvisionedCapacityInformation(client, syncVolume));
cloneVolume.setAllocatedCapacity(getAllocatedCapacityInformation(client, syncVolume));
cloneVolume.setWWN(wwn.toUpperCase());
cloneVolume.setAlternateName(alternateName);
cloneVolume.setNativeId(deviceId);
cloneVolume.setDeviceLabel(elementName);
cloneVolume.setNativeGuid(NativeGUIDGenerator.generateNativeGuid(dbClient, cloneVolume));
cloneVolume.setInactive(false);
if (cloneVolume.getSyncActive()) {
cloneVolume.setReplicaState(ReplicationState.CREATED.name());
} else {
cloneVolume.setReplicaState(ReplicationState.INACTIVE.name());
}
dbClient.persistObject(cloneVolume);
}
/*
* for (URI id : completer.getIds()) {
* completer.ready(dbClient);
* }
*/
} else if (jobStatus == JobStatus.FAILED || jobStatus == JobStatus.FATAL_ERROR) {
String msg = String.format("Failed job to create full copy from %s to %s", cloneVolume.getAssociatedSourceVolume(), cloneVolume.getId());
_log.error(msg);
cloneVolume.setInactive(true);
dbClient.persistObject(cloneVolume);
}
} catch (Exception e) {
String errorMsg = String.format("Encountered an internal error during block create clone job status " + "processing: %s", e.getMessage());
setPostProcessingErrorStatus(errorMsg);
_log.error("Failed to update status for " + getClass().getSimpleName(), e);
} finally {
if (iterator != null) {
iterator.close();
}
super.updateStatus(jobContext);
_log.info("FINISH updateStatus for clone volume");
}
}
use of com.emc.storageos.db.client.DbClient in project coprhd-controller by CoprHD.
the class SmisCreateCGCloneJob method updateStatus.
public void updateStatus(JobContext jobContext) throws Exception {
CloseableIterator<CIMInstance> syncVolumeIter = null;
DbClient dbClient = jobContext.getDbClient();
JobStatus jobStatus = getJobStatus();
try {
if (jobStatus == JobStatus.IN_PROGRESS) {
return;
}
CloneCreateCompleter completer = (CloneCreateCompleter) getTaskCompleter();
List<Volume> clones = dbClient.queryObject(Volume.class, completer.getIds());
StorageSystem storage = dbClient.queryObject(StorageSystem.class, getStorageSystemURI());
if (jobStatus == JobStatus.SUCCESS) {
CIMConnectionFactory cimConnectionFactory = jobContext.getCimConnectionFactory();
WBEMClient client = getWBEMClient(dbClient, cimConnectionFactory);
CIMObjectPath replicationGroupPath = client.associatorNames(getCimJob(), null, SmisConstants.SE_REPLICATION_GROUP, null, null).next();
String replicationGroupID = (String) replicationGroupPath.getKey(SmisConstants.CP_INSTANCE_ID).getValue();
// VMAX instanceID, e.g., 000196700567+EMC_SMI_RG1414546375042 (8.0.2 provider)
final String replicationGroupInstance = replicationGroupID.split(Constants.PATH_DELIMITER_REGEX)[storage.getUsingSmis80() ? 1 : 0];
syncVolumeIter = client.associatorInstances(replicationGroupPath, null, SmisConstants.CIM_STORAGE_VOLUME, null, null, false, _volumeProps);
processCGClones(syncVolumeIter, client, dbClient, clones, replicationGroupInstance, isSyncActive);
} else if (jobStatus == JobStatus.FAILED || jobStatus == JobStatus.FATAL_ERROR) {
_log.info("Failed to create clone");
for (Volume clone : clones) {
clone.setInactive(true);
}
dbClient.persistObject(clones);
}
} catch (Exception e) {
setPostProcessingErrorStatus("Encountered an internal error during create CG clone job status processing: " + e.getMessage());
_log.error("Caught an exception while trying to updateStatus for SmisCreateCGCloneJob", e);
} finally {
if (syncVolumeIter != null) {
syncVolumeIter.close();
}
super.updateStatus(jobContext);
}
}
use of com.emc.storageos.db.client.DbClient in project coprhd-controller by CoprHD.
the class SmisCreateMaskingViewJob method updateStatus.
@Override
public void updateStatus(JobContext jobContext) throws Exception {
CloseableIterator<CIMObjectPath> iterator = null;
DbClient dbClient = jobContext.getDbClient();
JobStatus jobStatus = getJobStatus();
_log.info("Updating status of SmisCreateMaskingViewJob");
try {
if (jobStatus == JobStatus.SUCCESS) {
StorageSystem storageSystem = dbClient.queryObject(StorageSystem.class, getStorageSystemURI());
CimConnection cimConnection = jobContext.getCimConnectionFactory().getConnection(storageSystem);
CIMConnectionFactory cimConnectionFactory = jobContext.getCimConnectionFactory();
WBEMClient client = getWBEMClient(dbClient, cimConnectionFactory);
List<CIMObjectPath> maskingViews = new ArrayList<CIMObjectPath>();
iterator = client.associatorNames(getCimJob(), null, SYMM_LUNMASKINGVIEW, null, null);
while (iterator.hasNext()) {
CIMObjectPath cimObjectPath = iterator.next();
maskingViews.add(cimObjectPath);
ExportMask mask = dbClient.queryObject(ExportMask.class, _exportMaskURI);
// necessary for future reference to the MV.
if (mask != null) {
String deviceId = cimObjectPath.getKey(SmisConstants.CP_DEVICE_ID).getValue().toString();
mask.setNativeId(deviceId);
dbClient.persistObject(mask);
ExportOperationContext.insertContextOperation(getTaskCompleter(), VmaxExportOperationContext.OPERATION_CREATE_MASKING_VIEW, mask.getMaskName());
}
}
// Now perform RP protection tagging, if required, on the storage group
if (storageSystem.getUsingSmis80()) {
_log.info("Set RP tag on all volumes within SG for 8.0.3 Providers");
enableRecoverPointTagOn803(dbClient, client, storageSystem, jobContext);
} else {
_log.info("Set RP tag on SG for 4.6.2 Providers");
enableRecoverPointTag(dbClient, client, _deviceGroupMaskingPath);
}
// Now set the HLU on the volume URIs, if they haven't been set by user.
ExportMaskOperationsHelper.setHLUFromProtocolControllers(dbClient, cimConnection, _exportMaskURI, _volumeURIHLUs, maskingViews, getTaskCompleter());
}
} catch (Exception e) {
_log.error("Caught an exception while trying to updateStatus for SmisCreateMaskingViewJob", e);
setPostProcessingErrorStatus("Encountered an internal error during masking view create job status processing : " + e.getMessage());
} finally {
super.updateStatus(jobContext);
if (iterator != null) {
iterator.close();
}
}
}
use of com.emc.storageos.db.client.DbClient in project coprhd-controller by CoprHD.
the class SmisCreateVmaxCGTargetVolumesJob method updateStatus.
@Override
public void updateStatus(JobContext jobContext) throws Exception {
CloseableIterator<CIMObjectPath> iterator = null;
DbClient dbClient = jobContext.getDbClient();
JobStatus jobStatus = getJobStatus();
try {
if (jobStatus == JobStatus.SUCCESS) {
_deviceIds = new ArrayList<String>();
CIMConnectionFactory cimConnectionFactory = jobContext.getCimConnectionFactory();
WBEMClient client = getWBEMClient(dbClient, cimConnectionFactory);
iterator = client.associatorNames(getCimJob(), null, SmisConstants.CIM_STORAGE_VOLUME, null, null);
while (iterator.hasNext()) {
CIMObjectPath volumePath = iterator.next();
CIMProperty<String> deviceID = (CIMProperty<String>) volumePath.getKey(SmisConstants.CP_DEVICE_ID);
String nativeID = deviceID.getValue();
if (nativeID == null || nativeID.isEmpty()) {
throw new IllegalStateException("Could not determine volume native ID from the SMI-S provider");
}
_deviceIds.add(nativeID);
}
} else if (jobStatus == JobStatus.FAILED || jobStatus == JobStatus.FATAL_ERROR) {
_log.info("Failed to create volume: {}", getTaskCompleter().getId());
}
} catch (Exception e) {
setPostProcessingFailedStatus(e.getMessage());
_log.error("Caught an exception while trying to updateStatus for SmisCreateVmaxCGTargetVolumesJob", e);
ServiceError error = DeviceControllerErrors.smis.methodFailed("updateStatus", e.getMessage());
getTaskCompleter().error(dbClient, error);
} finally {
if (iterator != null) {
iterator.close();
}
}
}
use of com.emc.storageos.db.client.DbClient in project coprhd-controller by CoprHD.
the class SmisDeleteVmaxCGTargetVolumesJob method updateStatus.
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();
}
}
}
Aggregations