/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * * $Id$ */ package com.sleepycat.db; import com.sleepycat.db.internal.DbConstants; /** Specifies the attributes of a verification operation. */ public class VerifyConfig { /** Default configuration used if null is passed to {@link com.sleepycat.db.Database#verify Database.verify}. */ public static final VerifyConfig DEFAULT = new VerifyConfig(); /* package */ static VerifyConfig checkNull(VerifyConfig config) { return (config == null) ? DEFAULT : config; } private boolean aggressive = false; private boolean noOrderCheck = false; private boolean orderCheckOnly = false; private boolean salvage = false; private boolean printable = false; /** An instance created using the default constructor is initialized with the system's default settings. */ public VerifyConfig() { } /** Configure {@link com.sleepycat.db.Database#verify Database.verify} to output <b>all</b> the key/data pairs in the file that can be found. <p> By default, {@link com.sleepycat.db.Database#verify Database.verify} does not assume corruption. For example, if a key/data pair on a page is marked as deleted, it is not then written to the output file. When {@link com.sleepycat.db.Database#verify Database.verify} is configured with this method, corruption is assumed, and any key/data pair that can be found is written. In this case, key/data pairs that are corrupted or have been deleted may appear in the output (even if the file being salvaged is in no way corrupt), and the output will almost certainly require editing before being loaded into a database. <p> @param aggressive If true, configure {@link com.sleepycat.db.Database#verify Database.verify} to output <b>all</b> the key/data pairs in the file that can be found. */ public void setAggressive(final boolean aggressive) { this.aggressive = aggressive; } /** Return true if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to output <b>all</b> the key/data pairs in the file that can be found. <p> This method may be called at any time during the life of the application. <p> @return True if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to output <b>all</b> the key/data pairs in the file that can be found. */ public boolean getAggressive() { return aggressive; } /** Configure {@link com.sleepycat.db.Database#verify Database.verify} to skip the database checks for btree and duplicate sort order and for hashing. <p> {@link com.sleepycat.db.Database#verify Database.verify} normally verifies that btree keys and duplicate items are correctly sorted, and hash keys are correctly hashed. If the file being verified contains multiple databases using differing sorting or hashing algorithms, some of them must necessarily fail database verification because only one sort order or hash function can be specified before {@link com.sleepycat.db.Database#verify Database.verify} is called. To verify files with multiple databases having differing sorting orders or hashing functions, first perform verification of the file as a whole using {@link com.sleepycat.db.Database#verify Database.verify} configured with {@link com.sleepycat.db.VerifyConfig#setNoOrderCheck VerifyConfig.setNoOrderCheck}, and then individually verify the sort order and hashing function for each database in the file using 4_link(Database, verify) configured with {@link com.sleepycat.db.VerifyConfig#setOrderCheckOnly VerifyConfig.setOrderCheckOnly}. <p> @param noOrderCheck If true, configure {@link com.sleepycat.db.Database#verify Database.verify} to skip the database checks for btree and duplicate sort order and for hashing. */ public void setNoOrderCheck(final boolean noOrderCheck) { this.noOrderCheck = noOrderCheck; } /** Return true if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to skip the database checks for btree and duplicate sort order and for hashing. <p> This method may be called at any time during the life of the application. <p> @return True if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to skip the database checks for btree and duplicate sort order and for hashing. */ public boolean getNoOrderCheck() { return printable; } /** Configure {@link com.sleepycat.db.Database#verify Database.verify} to do database checks for btree and duplicate sort order and for hashing, skipped by verification operations configured by {@link com.sleepycat.db.VerifyConfig#setNoOrderCheck VerifyConfig.setNoOrderCheck}. <p> When this flag is specified, a database name must be specified to {@link com.sleepycat.db.Database#verify Database.verify}, indicating the database in the physical file which is to be checked. <p> This configuration is only safe to use on databases that have already successfully been verified with {@link com.sleepycat.db.VerifyConfig#setNoOrderCheck VerifyConfig.setNoOrderCheck} configured. <p> @param orderCheckOnly If true, configure {@link com.sleepycat.db.Database#verify Database.verify} to do database checks for btree and duplicate sort order and for hashing, skipped by verification operations configured by {@link com.sleepycat.db.VerifyConfig#setNoOrderCheck VerifyConfig.setNoOrderCheck}. */ public void setOrderCheckOnly(final boolean orderCheckOnly) { this.orderCheckOnly = orderCheckOnly; } /** Return true if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to do database checks for btree and duplicate sort order and for hashing, skipped by verification operations configured by {@link com.sleepycat.db.VerifyConfig#setNoOrderCheck VerifyConfig.setNoOrderCheck}. <p> This method may be called at any time during the life of the application. <p> @return True if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to do database checks for btree and duplicate sort order and for hashing, skipped by verification operations configured by {@link com.sleepycat.db.VerifyConfig#setNoOrderCheck VerifyConfig.setNoOrderCheck}. */ public boolean getOrderCheckOnly() { return orderCheckOnly; } /** Configure {@link com.sleepycat.db.Database#verify Database.verify} to use printing characters to where possible. <p> This method is only meaningful when combined with {@link com.sleepycat.db.VerifyConfig#setSalvage VerifyConfig.setSalvage}. <p> This configuration permits users to use standard text editors and tools to modify the contents of databases or selectively remove data from salvager output. <p> Note: different systems may have different notions about what characters are considered <em>printing characters</em>, and databases dumped in this manner may be less portable to external systems. <p> @param printable If true, configure {@link com.sleepycat.db.Database#verify Database.verify} to use printing characters to where possible. */ public void setPrintable(final boolean printable) { this.printable = printable; } /** Return true if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to use printing characters to where possible. <p> This method may be called at any time during the life of the application. <p> @return True if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to use printing characters to where possible. */ public boolean getPrintable() { return printable; } /** Configure {@link com.sleepycat.db.Database#verify Database.verify} to write the key/data pairs from all databases in the file to the file stream named by the outfile parameter. <p> The output format is the same as that specified for the db_dump utility, and can be used as input for the db_load utility. <p> Because the key/data pairs are output in page order as opposed to the sort order used by db_dump, using {@link com.sleepycat.db.Database#verify Database.verify} to dump key/data pairs normally produces less than optimal loads for Btree databases. <p> @param salvage If true, configure {@link com.sleepycat.db.Database#verify Database.verify} to write the key/data pairs from all databases in the file to the file stream named by the outfile parameter. */ public void setSalvage(final boolean salvage) { this.salvage = salvage; } /** Return true if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to write the key/data pairs from all databases in the file to the file stream named by the outfile parameter.. <p> This method may be called at any time during the life of the application. <p> @return True if the {@link com.sleepycat.db.Database#verify Database.verify} is configured to write the key/data pairs from all databases in the file to the file stream named by the outfile parameter.. */ public boolean getSalvage() { return salvage; } int getFlags() { int flags = 0; flags |= aggressive ? DbConstants.DB_AGGRESSIVE : 0; flags |= noOrderCheck ? DbConstants.DB_NOORDERCHK : 0; flags |= orderCheckOnly ? DbConstants.DB_ORDERCHKONLY : 0; flags |= salvage ? DbConstants.DB_SALVAGE : 0; flags |= printable ? DbConstants.DB_PRINTABLE : 0; return flags; } }