/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.block.taskcompleter;
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.db.client.util.CommonTransformerFunctions;
import com.emc.storageos.db.client.util.NullColumnValueGetter;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.svcs.errorhandling.model.ServiceCoded;
import com.emc.storageos.workflow.WorkflowStepCompleter;
import com.google.common.collect.Collections2;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
public class SRDFMirrorRollbackCompleter extends SRDFTaskCompleter {
public SRDFMirrorRollbackCompleter(List<URI> sourceURIs, String opId) {
super(sourceURIs, opId);
}
@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded)
throws DeviceControllerException {
List<Volume> sourceVolumeList = dbClient.queryObject(Volume.class, getIds());
if (null != sourceVolumeList && !sourceVolumeList.isEmpty()) {
List<Volume> volumesToUpdate = new ArrayList<Volume>();
for (Volume volume : sourceVolumeList) {
if (null != volume.getSrdfTargets() && !volume.getSrdfTargets().isEmpty()) {
List<URI> targetVolumeURIs = new ArrayList<URI>(Collections2.transform(volume.getSrdfTargets(),
CommonTransformerFunctions.FCTN_STRING_TO_URI));
List<Volume> targetVolumes = dbClient.queryObject(Volume.class, targetVolumeURIs);
for (Volume targetVolume : targetVolumes) {
targetVolume.setPersonality(NullColumnValueGetter.getNullStr());
volumesToUpdate.add(targetVolume);
}
}
volume.setPersonality(NullColumnValueGetter.getNullStr());
volumesToUpdate.add(volume);
}
dbClient.updateAndReindexObject(volumesToUpdate);
}
WorkflowStepCompleter.stepSucceded(getOpId());
}
}