use of com.emc.storageos.exceptions.DeviceControllerException in project coprhd-controller by CoprHD.
the class BlockSnapshotSessionRelinkTargetCompleter method complete.
/**
* {@inheritDoc}
*/
@Override
protected void complete(DbClient dbClient, Status status, ServiceCoded coded) throws DeviceControllerException {
try {
switch(status) {
case error:
break;
case ready:
// Remove the linked targets from the linked targets list for their
// current snapshot session and add them to the linked targets for
// the target session.
BlockSnapshotSession tgtSnapSession = dbClient.queryObject(BlockSnapshotSession.class, getId());
StringSet tgtSnapSessionTargets = tgtSnapSession.getLinkedTargets();
List<BlockSnapshotSession> snaphotSessionsList = CustomQueryUtility.queryActiveResourcesByConstraint(dbClient, BlockSnapshotSession.class, ContainmentConstraint.Factory.getLinkedTargetSnapshotSessionConstraint(_snapshotURI));
if (snaphotSessionsList.isEmpty()) {
// The target is not linked to an active snapshot session.
throw DeviceControllerException.exceptions.unexpectedCondition(String.format("Cound not find active snapshot session for linked target %s", _snapshotURI));
}
// A target can only be linked to a single session.
BlockSnapshotSession currentSnapSession = snaphotSessionsList.get(0);
BlockSnapshot snapshot = dbClient.queryObject(BlockSnapshot.class, _snapshotURI);
List<BlockSnapshot> relatedSnapshots = getRelatedSnapshots(snapshot, dbClient);
for (BlockSnapshot relatedSnapshot : relatedSnapshots) {
// snapshot sessions.
if (!currentSnapSession.getId().equals(getId())) {
String snapshotId = relatedSnapshot.getId().toString();
// Remove from the current snapshot session.
StringSet currentSnapSessionTargets = currentSnapSession.getLinkedTargets();
currentSnapSessionTargets.remove(snapshotId);
dbClient.updateObject(currentSnapSession);
// Add to the target snapshot session.
if (tgtSnapSessionTargets == null) {
tgtSnapSessionTargets = new StringSet();
tgtSnapSession.setLinkedTargets(tgtSnapSessionTargets);
}
tgtSnapSessionTargets.add(snapshotId);
dbClient.updateObject(tgtSnapSession);
}
}
break;
default:
String errMsg = String.format("Unexpected status %s for completer for step %s", status.name(), getOpId());
s_logger.info(errMsg);
throw DeviceControllerException.exceptions.unexpectedCondition(errMsg);
}
s_logger.info("Done re-link target volume step {} with status: {}", getOpId(), status.name());
} catch (Exception e) {
s_logger.error("Failed updating status for re-link target volume step {}", getOpId(), e);
} finally {
super.complete(dbClient, status, coded);
}
}
use of com.emc.storageos.exceptions.DeviceControllerException in project coprhd-controller by CoprHD.
the class BlockSnapshotSessionRestoreWorkflowCompleter method complete.
/**
* {@inheritDoc}
*/
@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
URI snapSessionURI = getId();
try {
if (_updateOpStatus) {
BlockSnapshotSession snapSession = dbClient.queryObject(BlockSnapshotSession.class, snapSessionURI);
List<BlockObject> allSources = getAllSources(snapSession, dbClient);
BlockObject sourceObj = allSources.get(0);
// Record the results.
recordBlockSnapshotSessionOperation(dbClient, OperationTypeEnum.RESTORE_SNAPSHOT_SESSION, status, snapSession, sourceObj);
// Update the status map of the snapshot session.
switch(status) {
case error:
setErrorOnDataObject(dbClient, BlockSnapshotSession.class, snapSession.getId(), coded);
break;
case ready:
setReadyOnDataObject(dbClient, BlockSnapshotSession.class, snapSession.getId());
break;
case suspended_error:
setSuspendedErrorOnDataObject(dbClient, BlockSnapshotSession.class, snapSession.getId(), coded);
break;
case suspended_no_error:
setSuspendedNoErrorOnDataObject(dbClient, BlockSnapshotSession.class, snapSession.getId());
break;
default:
String errMsg = String.format("Unexpected status %s for completer for task %s", status.name(), getOpId());
s_logger.info(errMsg);
throw DeviceControllerException.exceptions.unexpectedCondition(errMsg);
}
}
s_logger.info("Done restore snapshot session task {} with status: {}", getOpId(), status.name());
} catch (Exception e) {
s_logger.error("Failed updating status for restore snapshot session task {}", getOpId(), e);
} finally {
super.complete(dbClient, status, coded);
}
}
use of com.emc.storageos.exceptions.DeviceControllerException in project coprhd-controller by CoprHD.
the class BlockSnapshotSessionUnlinkTargetsWorkflowCompleter method complete.
/**
* {@inheritDoc}
*/
@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
URI snapSessionURI = getId();
try {
BlockSnapshotSession snapSession = dbClient.queryObject(BlockSnapshotSession.class, snapSessionURI);
List<BlockObject> allSources = getAllSources(snapSession, dbClient);
BlockObject sourceObj = allSources.get(0);
// Record the results.
recordBlockSnapshotSessionOperation(dbClient, _opType, status, snapSession, sourceObj);
// Update the status map of the snapshot session.
switch(status) {
case error:
setErrorOnDataObject(dbClient, BlockSnapshotSession.class, snapSessionURI, coded);
break;
case ready:
setReadyOnDataObject(dbClient, BlockSnapshotSession.class, snapSessionURI);
break;
case suspended_error:
setSuspendedErrorOnDataObject(dbClient, BlockSnapshotSession.class, snapSessionURI, coded);
break;
case suspended_no_error:
setSuspendedNoErrorOnDataObject(dbClient, BlockSnapshotSession.class, snapSessionURI);
break;
default:
String errMsg = String.format("Unexpected status %s for completer for task %s", status.name(), getOpId());
s_logger.info(errMsg);
throw DeviceControllerException.exceptions.unexpectedCondition(errMsg);
}
s_logger.info("Done unlink targets from snapshot session task {} with status: {}", getOpId(), status.name());
} catch (Exception e) {
s_logger.error("Failed updating status for unlink targets from snapshot session task {}", getOpId(), e);
} finally {
super.complete(dbClient, status, coded);
}
}
use of com.emc.storageos.exceptions.DeviceControllerException in project coprhd-controller by CoprHD.
the class ExportAddInitiatorCompleter method complete.
@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
try {
ExportGroup exportGroup = dbClient.queryObject(ExportGroup.class, getId());
Operation operation = new Operation();
switch(status) {
case error:
operation.error(coded);
break;
case ready:
operation.ready();
break;
case suspended_no_error:
operation.suspendedNoError();
break;
case suspended_error:
operation.suspendedError(coded);
break;
default:
break;
}
exportGroup.getOpStatus().updateTaskStatus(getOpId(), operation);
_log.info("export_initiator_add: completed");
_log.info(String.format("Done ExportMaskAddInitiator - Id: %s, OpId: %s, status: %s", getId().toString(), getOpId(), status.name()));
for (URI initiatorURI : _initiatorURIs) {
Initiator initiator = dbClient.queryObject(Initiator.class, initiatorURI);
recordBlockExportOperation(dbClient, OperationTypeEnum.ADD_EXPORT_INITIATOR, status, eventMessage(status, initiator, exportGroup), exportGroup, initiator);
if (status.name().equals(Operation.Status.error.name())) {
exportGroup.removeInitiator(initiator);
}
}
dbClient.updateObject(exportGroup);
} catch (Exception e) {
_log.error(String.format("Failed updating status for ExportMaskAddInitiator - Id: %s, OpId: %s", getId().toString(), getOpId()), e);
} finally {
super.complete(dbClient, status, coded);
}
}
use of com.emc.storageos.exceptions.DeviceControllerException in project coprhd-controller by CoprHD.
the class ExportChangePortGroupCompleter method complete.
@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
try {
String eventMessage = null;
log.info("Change port group completer:" + status.name());
ExportGroup exportGroup = dbClient.queryObject(ExportGroup.class, getId());
Operation operation = new Operation();
switch(status) {
case error:
operation.error(coded);
eventMessage = String.format(EXPORT_CHANGE_PORT_GROUP_FAILED_MSG, exportGroup.getLabel());
break;
case ready:
operation.ready();
updateVolumeExportPathParam(dbClient);
eventMessage = String.format(EXPORT_CHANGE_PORT_GROUP_MSG, exportGroup.getLabel());
break;
case suspended_no_error:
operation.suspendedNoError();
eventMessage = String.format(EXPORT_CHANGE_PORT_GROUP_SUSPENDED_MSG, exportGroup.getLabel());
break;
case suspended_error:
operation.suspendedError(coded);
eventMessage = String.format(EXPORT_CHANGE_PORT_GROUP_SUSPENDED_MSG, exportGroup.getLabel());
break;
default:
break;
}
exportGroup.getOpStatus().updateTaskStatus(getOpId(), operation);
dbClient.updateObject(exportGroup);
log.info(String.format("Done Export change port group - Id: %s, OpId: %s, status: %s", getId().toString(), getOpId(), status.name()));
recordBlockExportOperation(dbClient, OperationTypeEnum.EXPORT_CHANGE_PORT_GROUP, status, eventMessage, exportGroup);
} catch (Exception e) {
log.error(String.format("Failed updating status for Export change port group - Id: %s, OpId: %s", getId().toString(), getOpId()), e);
} finally {
super.complete(dbClient, status, coded);
}
}
Aggregations