/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.validators.xtremio; 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.BlockObject; import com.emc.storageos.db.client.model.BlockSnapshot; import com.emc.storageos.db.client.model.ExportMask; import com.emc.storageos.db.client.model.Initiator; import com.emc.storageos.db.client.model.StorageSystem; import com.emc.storageos.db.client.model.Volume; import com.emc.storageos.volumecontroller.impl.validators.StorageSystemValidatorFactory; import com.emc.storageos.volumecontroller.impl.validators.ValCk; import com.emc.storageos.volumecontroller.impl.validators.Validator; import com.emc.storageos.volumecontroller.impl.validators.ValidatorConfig; import com.emc.storageos.volumecontroller.impl.validators.ValidatorLogger; import com.emc.storageos.volumecontroller.impl.validators.contexts.ExportMaskValidationContext; import com.emc.storageos.xtremio.restapi.XtremIOClientFactory; /** * Factory class for creating XtremIO specific validators for DU prevention. */ public class XtremioSystemValidatorFactory implements StorageSystemValidatorFactory { private static final Logger log = LoggerFactory.getLogger(XtremioSystemValidatorFactory.class); private DbClient dbClient; private XtremIOClientFactory clientFactory; private ValidatorLogger logger; private ValidatorConfig config; public DbClient getDbClient() { return dbClient; } public void setDbClient(DbClient dbClient) { this.dbClient = dbClient; } public ValidatorConfig getConfig() { return config; } public void setConfig(ValidatorConfig config) { this.config = config; } public XtremIOClientFactory getClientFactory() { return clientFactory; } public void setClientFactory(XtremIOClientFactory clientFactory) { this.clientFactory = clientFactory; } /** * Common configuration for XtremIO validators. * * @param logger ValidatorLogger * @param validators List of AbstractXtremIOValidator instances */ private void configureValidators(ValidatorLogger logger, AbstractXtremIOValidator... validators) { for (AbstractXtremIOValidator validator : validators) { validator.setFactory(this); validator.setLogger(logger); } } /** * In XtremIO, delete export mask is usually removing the volumes from the IG. * We do not delete the initiators and the IG. * We delete the initiators only in case of cluster exports, where we have single IG consisting of all the cluster's hosts' initiators. * In this case, we will validate for extra volumes by using the appropriate validator. */ @Override public Validator exportMaskDelete(ExportMaskValidationContext ctx) { logger = new ValidatorLogger(log, ctx.getExportMask().forDisplay(), ctx.getStorage().forDisplay()); XtremIOExportMaskInitiatorsValidator validator = new XtremIOExportMaskInitiatorsValidator(ctx.getStorage(), ctx.getExportMask()); validator.setExceptionContext(ctx); configureValidators(logger, validator); return validator; } @Override public Validator removeVolumes(ExportMaskValidationContext ctx) { logger = new ValidatorLogger(log, ctx.getExportMask().forDisplay(), ctx.getStorage().forDisplay()); XtremIOExportMaskInitiatorsValidator validator = new XtremIOExportMaskInitiatorsValidator(ctx.getStorage(), ctx.getExportMask()); validator.setExceptionContext(ctx); configureValidators(logger, validator); return validator; } @Override public List<Volume> volumes(StorageSystem storageSystem, List<Volume> volumes, boolean delete, boolean remediate, ValCk[] checks) { return null; } @Override public Validator expandVolumes(StorageSystem storageSystem, Volume volume) { return null; } @Override public Validator createSnapshot(StorageSystem storage, BlockSnapshot snapshot, Volume volume) { return null; } @Override public Validator removeInitiators(ExportMaskValidationContext ctx) { logger = new ValidatorLogger(log, ctx.getExportMask().forDisplay(), ctx.getStorage().forDisplay()); XtremIOExportMaskVolumesValidator validator = new XtremIOExportMaskVolumesValidator(ctx.getStorage(), ctx.getExportMask(), ctx.getBlockObjects()); validator.setExceptionContext(ctx); configureValidators(logger, validator); return validator; } @Override public Validator addVolumes(StorageSystem storage, URI exportMaskURI, Collection<Initiator> initiators) { ExportMask exportMask = dbClient.queryObject(ExportMask.class, exportMaskURI); logger = new ValidatorLogger(log, exportMask.forDisplay(), storage.forDisplay()); XtremIOExportMaskInitiatorsValidator validator = new XtremIOExportMaskInitiatorsValidator(storage, exportMask); configureValidators(logger, validator); validator.setErrorOnMismatch(false); return validator; } @Override public Validator addInitiators(StorageSystem storage, ExportMask exportMask, Collection<URI> volumeURIList) { logger = new ValidatorLogger(log, exportMask.forDisplay(), storage.forDisplay()); List<? extends BlockObject> blockObjects = BlockObject.fetchAll(dbClient, volumeURIList); XtremIOExportMaskVolumesValidator validator = new XtremIOExportMaskVolumesValidator(storage, exportMask, blockObjects); configureValidators(logger, validator); validator.setErrorOnMismatch(false); return validator; } @Override public Validator deleteVolumes(StorageSystem storage, Collection<Volume> volumes) { return null; } }