/* * Copyright (c) 2008-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource.utils.vpoolvalidators; import com.emc.storageos.api.service.impl.resource.utils.VirtualPoolValidator; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.VirtualPool; import com.emc.storageos.model.vpool.BlockVirtualPoolUpdateParam; import com.emc.storageos.model.vpool.VirtualPoolCommonParam; import com.emc.storageos.model.vpool.VirtualPoolProtectionMirrorParam; import com.emc.storageos.svcs.errorhandling.resources.APIException; public class ExpansionValidator extends VirtualPoolValidator<VirtualPoolCommonParam, BlockVirtualPoolUpdateParam> { @Override public void setNextValidator(VirtualPoolValidator validator) { _nextValidator = validator; } @Override protected void validateVirtualPoolUpdateAttributeValue( VirtualPool virtualPool, BlockVirtualPoolUpdateParam updateParam, DbClient dbClient) { validateExpansion(virtualPool, updateParam, dbClient); } @Override protected boolean isUpdateAttributeOn(BlockVirtualPoolUpdateParam updateParam) { if (null != updateParam && updateParam.getExpandable() != null) { return true; } return false; } @Override protected void validateVirtualPoolCreateAttributeValue(VirtualPoolCommonParam createParam, DbClient dbClient) { // No create validation required - ProtectionValidator takes care of this } /** * If there is an attempt to set expandable expansion to true when the * VirtualPool currently specifies mirroring, we must fail. * */ public void validateExpansion(VirtualPool virtualPool, BlockVirtualPoolUpdateParam updateParam, DbClient dbClient) { // Validate only when the update param does not specify mirroring. // The ProtectionValidator handles the case when mirroring is specified // by update param. // True, if expansion is being enabled on a mirror-enabled VPool and we're not explicitly disabling // mirrors within the same request. if (updateParam.allowsExpansion() && VirtualPool.vPoolSpecifiesMirrors(virtualPool, dbClient) && (updateParam.getProtection() == null || updateParam.getProtection().getContinuousCopies() == null || updateParam.getProtection().getContinuousCopies().getMaxMirrors() == null || updateParam.getProtection().getContinuousCopies().getMaxMirrors() != VirtualPoolProtectionMirrorParam.MAX_DISABLED)) { throw APIException.badRequests.protectionVirtualPoolDoesNotSupportExpandingMirrors(virtualPool.getId()); } } @Override protected boolean isCreateAttributeOn(VirtualPoolCommonParam createParam) { return true; } }