/*
* 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.Volume;
import com.emc.storageos.db.client.model.Operation.Status;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.services.OperationTypeEnum;
import com.emc.storageos.svcs.errorhandling.model.ServiceCoded;
import java.net.URI;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SRDFSwapCompleter extends SRDFTaskCompleter {
private static final Logger _log = LoggerFactory.getLogger(SRDFSwapCompleter.class);
private Volume.LinkStatus successLinkStatus;
public SRDFSwapCompleter(List<URI> ids, String opId, Volume.LinkStatus successLinkStatus) {
super(ids, opId);
this.successLinkStatus = successLinkStatus;
}
@Override
protected void complete(DbClient dbClient, Status status, ServiceCoded coded) throws DeviceControllerException {
try {
setDbClient(dbClient);
recordSRDFOperation(dbClient, OperationTypeEnum.SWAP_SRDF_VOLUME, status, getTargetVolume().getId().toString(),
getSourceVolume().getId().toString());
} catch (Exception e) {
_log.error("Failed updating status. SRDF Volume Swap {}, for task " + getOpId(), getId(), e);
} finally {
super.complete(dbClient, status, coded);
}
}
@Override
protected Volume.LinkStatus getVolumeSRDFLinkStatusForSuccess() {
// Link status returned depends on whether link was already swapped.
// See SRDFDeviceController.
return successLinkStatus;
}
}