/* * Copyright (c) 2020 Red Hat, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * * $Id: //eng/uds-releases/jasper/src/uds/config.h#2 $ */ #ifndef CONFIG_H #define CONFIG_H #include "bufferedReader.h" #include "bufferedWriter.h" #include "geometry.h" #include "uds.h" enum { DEFAULT_MASTER_INDEX_MEAN_DELTA = 4096, DEFAULT_CACHE_CHAPTERS = 7, DEFAULT_SPARSE_SAMPLE_RATE = 0 }; /** * Data that are used for configuring a new index. **/ struct udsConfiguration { /** Smaller (16), Small (64) or large (256) indices */ unsigned int recordPagesPerChapter; /** Total number of chapters per volume */ unsigned int chaptersPerVolume; /** Number of sparse chapters per volume */ unsigned int sparseChaptersPerVolume; /** Size of the page cache, in chapters */ unsigned int cacheChapters; /** Frequency with which to checkpoint */ // XXX the checkpointFrequency is not used - it is now a runtime parameter unsigned int checkpointFrequency; /** The master index mean delta to use */ unsigned int masterIndexMeanDelta; /** Size of a page, used for both record pages and index pages */ unsigned int bytesPerPage; /** Sampling rate for sparse indexing */ unsigned int sparseSampleRate; /** Index Owner's nonce */ UdsNonce nonce; }; /** * Data that are used for a 6.01 index. **/ struct udsConfiguration6_01 { /** Smaller (16), Small (64) or large (256) indices */ unsigned int recordPagesPerChapter; /** Total number of chapters per volume */ unsigned int chaptersPerVolume; /** Number of sparse chapters per volume */ unsigned int sparseChaptersPerVolume; /** Size of the page cache, in chapters */ unsigned int cacheChapters; /** Frequency with which to checkpoint */ unsigned int checkpointFrequency; /** The master index mean delta to use */ unsigned int masterIndexMeanDelta; /** Size of a page, used for both record pages and index pages */ unsigned int bytesPerPage; /** Sampling rate for sparse indexing */ unsigned int sparseSampleRate; }; typedef struct indexLocation { char *host; char *port; char *directory; } IndexLocation; /** * A set of configuration parameters for the indexer. **/ typedef struct configuration Configuration; /** * Construct a new indexer configuration. * * @param conf UdsConfiguration to use * @param configPtr The new index configuration * * @return UDS_SUCCESS or an error code **/ int makeConfiguration(UdsConfiguration conf, Configuration **configPtr) __attribute__((warn_unused_result)); /** * Clean up the configuration struct. **/ void freeConfiguration(Configuration *config); /** * Read the index configuration from stable storage. * * @param reader A buffered reader. * @param config The index configuration to overwrite. * * @return UDS_SUCCESS or an error code. **/ int readConfigContents(BufferedReader *reader, UdsConfiguration config) __attribute__((warn_unused_result)); /** * Write the index configuration information to stable storage. * * @param writer A buffered writer. * @param config The index configuration. * * @return UDS_SUCCESS or an error code. **/ int writeConfigContents(BufferedWriter *writer, UdsConfiguration config) __attribute__((warn_unused_result)); /** * Free the memory used by an IndexLocation. * * @param loc index location to free **/ void freeIndexLocation(IndexLocation *loc); /** * Compare two configurations for equality. * * @param a The first configuration to compare * @param b The second configuration to compare * * @return true iff they are equal **/ bool areUdsConfigurationsEqual(UdsConfiguration a, UdsConfiguration b) __attribute__((warn_unused_result)); /** * Log a user configuration. * * @param conf The configuration **/ void logUdsConfiguration(UdsConfiguration conf); #endif /* CONFIG_H */