/*
* Copyright (c) 2015-2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.file;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlTransient;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.FileShare;
import com.emc.storageos.db.client.model.FileShare.MirrorStatus;
import com.emc.storageos.db.client.model.FileShare.PersonalityTypes;
import com.emc.storageos.db.client.model.Operation;
import com.emc.storageos.fileorchestrationcontroller.FileDescriptor;
import com.emc.storageos.svcs.errorhandling.model.ServiceCoded;
public class CreateMirrorFileSystemsCompleter extends FileWorkflowCompleter {
private static final long serialVersionUID = -494348560407624019L;
@XmlTransient
private List<FileDescriptor> _fileDescriptors = new ArrayList<FileDescriptor>();
public CreateMirrorFileSystemsCompleter(List<URI> fsUris, String task, List<FileDescriptor> fileDescriptors) {
super(fsUris, task);
this._fileDescriptors = fileDescriptors;
}
public CreateMirrorFileSystemsCompleter(URI fileUri, String task) {
super(fileUri, task);
}
@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded serviceCoded) {
super.complete(dbClient, status, serviceCoded);
switch (status) {
case error:
handleFileShareErrors(dbClient);
break;
case ready:
// Remove target attributes from source file system!!
for (URI id : getIds()) {
FileShare fileSystem = dbClient.queryObject(FileShare.class, id);
if (fileSystem != null && !fileSystem.getInactive()) {
if (fileSystem.getPersonality() != null &&
PersonalityTypes.SOURCE.name().equalsIgnoreCase(fileSystem.getPersonality())) {
// Set the mirror status!!
fileSystem.setMirrorStatus(MirrorStatus.UNKNOWN.name());
dbClient.updateObject(fileSystem);
_log.info("CreateMirrorFileSystemsCompleter::Set the mirror status of source file system {}",
fileSystem.getId());
}
}
dbClient.ready(FileShare.class, id, getOpId());
}
break;
default:
break;
}
}
private void handleFileShareErrors(DbClient dbClient) {
for (FileDescriptor fileDescriptor : FileDescriptor.getDescriptors(_fileDescriptors, FileDescriptor.Type.FILE_DATA)) {
FileShare fileShare = dbClient.queryObject(FileShare.class, fileDescriptor.getFsURI());
if (fileShare != null && (fileShare.getNativeId() == null || fileShare.getNativeId().equals(""))) {
_log.info("No native id was present on FileShare {}, marking inactive", fileShare.getLabel());
dbClient.markForDeletion(fileShare);
}
}
}
}