/*-
* 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;
}
}