/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.validators.xtremio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.emc.storageos.volumecontroller.impl.validators.ValidatorLogger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.model.BlockObject;
import com.emc.storageos.db.client.model.ExportMask;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.volumecontroller.impl.xtremio.prov.utils.XtremIOProvUtils;
import com.emc.storageos.xtremio.restapi.XtremIOClient;
import com.emc.storageos.xtremio.restapi.model.response.XtremIOVolume;
/**
* Validator class for XtremIO export mask delete operations.
*/
public class XtremIOExportMaskVolumesValidator extends AbstractXtremIOValidator {
private static final Logger log = LoggerFactory.getLogger(XtremIOExportMaskVolumesValidator.class);
private final Collection<? extends BlockObject> blockObjects;
private Collection<String> igNames;
XtremIOExportMaskVolumesValidator(StorageSystem storage, ExportMask exportMask,
Collection<? extends BlockObject> blockObjects) {
super(storage, exportMask);
this.blockObjects = blockObjects;
}
public void setIgNames(Collection<String> igNames) {
this.igNames = igNames;
}
@Override
public boolean validate() throws Exception {
log.info("Initiating volume validation of XtremIO ExportMask: " + id);
try {
XtremIOClient client = XtremIOProvUtils.getXtremIOClient(getDbClient(), storage, getClientFactory());
String xioClusterName = client.getClusterDetails(storage.getSerialNumber()).getName();
Set<String> knownVolumes = new HashSet<>();
Set<String> igVols = new HashSet<>();
// get the volumes in the IGs and validate against passed impacted block objects
for (BlockObject maskVolume : blockObjects) {
knownVolumes.add(maskVolume.getDeviceLabel());
}
List<XtremIOVolume> igVolumes = new ArrayList<>();
for (String igName : igNames) {
igVolumes.addAll(XtremIOProvUtils.getInitiatorGroupVolumes(igName, xioClusterName, client));
}
for (XtremIOVolume igVolume : igVolumes) {
igVols.add(igVolume.getVolInfo().get(1));
}
log.info("ViPR known volumes present in IG: {}, volumes in IG: {}", knownVolumes, igVols);
igVols.removeAll(knownVolumes);
for (String igVol : igVols) {
getLogger().logDiff(id, "volumes", ValidatorLogger.NO_MATCHING_ENTRY, igVol);
}
} catch (Exception ex) {
log.error("Unexpected exception validating ExportMask volumes: " + ex.getMessage(), ex);
if (getConfig().isValidationEnabled()) {
throw DeviceControllerException.exceptions.unexpectedCondition(
"Unexpected exception validating ExportMask volumes: " + ex.getMessage());
}
}
checkForErrors();
log.info("Completed volume validation of XtremIO ExportMask: " + id);
return true;
}
}