/*
* Copyright 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.block.taskcompleter;
import java.net.URI;
import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.Operation.Status;
import com.emc.storageos.db.client.model.RemoteDirectorGroup;
import com.emc.storageos.db.client.model.Volume;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.svcs.errorhandling.model.ServiceCoded;
public class SRDFChangeCopyModeTaskCompleter extends SRDFTaskCompleter{
/**
* serialVesionUID
*/
private static final long serialVersionUID = -5479591144305569199L;
private static final Logger log = LoggerFactory.getLogger(SRDFChangeCopyModeTaskCompleter.class);
private Collection<Volume> tgtVolumes;
private String newCopyMode;
public SRDFChangeCopyModeTaskCompleter(List<URI> ids, String opId, String copyMode) {
super(ids, opId);
this.newCopyMode = copyMode;
}
@Override
protected void complete(DbClient dbClient, Status status, ServiceCoded coded)
throws DeviceControllerException {
try {
setDbClient(dbClient);
switch (status) {
case ready:
RemoteDirectorGroup rdfGrp =null;
for (Volume target : tgtVolumes) {
target.setSrdfCopyMode(newCopyMode);
dbClient.persistObject(target);
log.info(String.format("SRDF Device source %s and target %s copy mode got changed into %s",
target.getSrdfParent().toString(), target.getId().toString(), newCopyMode));
if(rdfGrp == null){
rdfGrp = dbClient.queryObject(RemoteDirectorGroup.class, target.getSrdfGroup());
}
}
if(rdfGrp != null){
rdfGrp.setSupportedCopyMode(newCopyMode);
dbClient.persistObject(rdfGrp);
log.info("RDF Group {} copy mode got changed into : {}", rdfGrp.getId(), newCopyMode);
}
break;
default:
log.info("Unable to handle SRDF Link Change Copy Mode Operational status: {}", status);
}
} catch (Exception e) {
log.error("Failed change copy mode. SRDFMirror {}, for task " + getOpId(), getId(), e);
} finally {
super.complete(dbClient, status, coded);
}
}
public Collection<Volume> getTgtVolumes() {
return tgtVolumes;
}
public void setTgtVolumes(Collection<Volume> tgtVolumes) {
this.tgtVolumes = tgtVolumes;
}
public String getNewCopyMode() {
return newCopyMode;
}
public void setNewCopyMode(String newCopyMode) {
this.newCopyMode = newCopyMode;
}
}