com.amazon.carbonado.repo.sleepycat
Class BDBRepositoryBuilder

java.lang.Object
  extended by com.amazon.carbonado.spi.AbstractRepositoryBuilder
      extended by com.amazon.carbonado.repo.sleepycat.BDBRepositoryBuilder
All Implemented Interfaces:
RepositoryBuilder

public class BDBRepositoryBuilder
extends AbstractRepositoryBuilder

Builder and configuration options for BDBRepository.

 BDBRepositoryBuilder builder = new BDBRepositoryBuilder();

 builder.setProduct("JE");
 builder.setName("test");
 builder.setEnvironmentHome("/tmp/testRepo");
 builder.setTransactionWriteNoSync(true);

 Repository repo = builder.build();
 

The following extra capabilities are supported:

Author:
Brian S O'Neill, Vidya Iyer, Nicole Deflaux

Nested Class Summary
static interface BDBRepositoryBuilder.DatabaseHook
           
 
Constructor Summary
BDBRepositoryBuilder()
           
 
Method Summary
 Repository build(AtomicReference<Repository> rootRef)
          Builds a repository instance.
 void errorCheck(Collection<String> messages)
          This method is called by assertReady, and subclasses must override to perform custom checks.
 BDBProduct getBDBProduct()
          Returns the BDB product to use, which is JE by default.
 Integer getCachePercent()
          Returns the percent of JVM heap used by the repository cache, or null if default should be selected.
 Long getCacheSize()
          Returns the repository cache size, or null if default should be selected.
 int getCheckpointInterval()
           
 int getCheckpointThresholdKB()
           
 int getCheckpointThresholdMinutes()
           
 Boolean getChecksumEnabled()
          Returns true if checksum verification is enabled.
 String getCompressor(String type)
          Return the compressor used for the given storable.
 BDBRepositoryBuilder.DatabaseHook getDatabaseHook()
          Returns the custom open database hook, or null if none.
 Boolean getDatabasesTransactional()
          Returns true if the databases are configured to be transactional, false if configured to not be transactional, null if this override was never set
 String getDataHome()
          Returns the directory to store data files.
 File getDataHomeFile()
          Returns the optional directory to store data files.
 String getEnvironmentHome()
          Returns the repository environment home directory.
 File getEnvironmentHomeFile()
          Returns the repository environment home directory.
 double getIndexRepairThrottle()
          Returns the throttle parameter used when indexes are added, dropped or bulk repaired.
 boolean getIndexSupport()
          Returns true if indexes are supported, which is true by default.
 Object getInitialDatabaseConfig()
          Returns the optional BDB specific database configuration to use for all databases created.
 Object getInitialEnvironmentConfig()
          Returns the optional BDB specific environment configuration to use.
 double getLockTimeout()
          Returns the lock timeout, in seconds.
 long getLockTimeoutInMicroseconds()
          Returns the lock timeout, in microseconds, limited to max long value.
 Integer getLogFileMaxSize()
          Returns null if default size will be used.
 boolean getLogInMemory()
          Returns false by default, indicating that transaction logs are persisted.
 String getName()
          Returns the name of the repository.
 Runnable getPreShutdownHook()
          Returns the custom shutdown hook that runs before the repository has finished running its own shutdown hooks, or null if none.
 String getProduct()
          Returns the BDB product to use, which is JE by default.
 boolean getReadOnly()
          Returns true if repository should be opened read-only.
 boolean getRunCheckpointer()
          Returns true if checkpointer is run automatically.
 boolean getRunDeadlockDetector()
          Returns true if deadlock detector is configured to run.
 boolean getRunFullRecovery()
          Returns true if a full (catastrophic) recovery should be performed when environment is opened.
 Runnable getShutdownHook()
          Returns the custom shutdown hook that runs after the repository has finished running its own shutdown hooks, or null if none.
 String getSingleFileName()
          Returns the single file that all BDB databases should reside in.
 StorableCodecFactory getStorableCodecFactory()
          Returns the storable codec factory used.
 boolean getTransactionNoSync()
          Returns true if transactions are not written or flushed to disk.
 double getTransactionTimeout()
          Returns the repository transaction timeout, in seconds.
 long getTransactionTimeoutInMicroseconds()
          Returns the repository transaction timeout, in microseconds, limited to max long value.
 boolean getTransactionWriteNoSync()
          Returns true if transactions are not flushed to disk.
 boolean isIndexRepairEnabled()
           
 boolean isMaster()
          Returns true if repository should assume the role of master, which is true by default.
 boolean isMultiversion()
          Returns false by default because multiversion concurrency control (MVCC) is not enabled.
 boolean isPrivate()
          Returns true if BDB environment is private.
 void setBDBProduct(BDBProduct product)
          Sets the BDB product to use, which defaults to JE.
 void setCachePercent(int cachePercent)
          Set the percent of JVM heap used by the repository cache.
 void setCachePercent(Integer cachePercent)
          Set the percent of JVM heap used by the repository cache.
 void setCacheSize(long cacheSize)
          Set the repository cache size, in bytes.
 void setCacheSize(Long cacheSize)
          Set the repository cache size, in bytes.
 void setCheckpointInterval(int intervalMillis)
          Set the interval to run checkpoints.
 void setCheckpointThresholdKB(int thresholdKB)
          Set the size threshold to run checkpoints.
 void setCheckpointThresholdMinutes(int thresholdMinutes)
          Set the time threshold to run checkpoints.
 void setChecksumEnabled(Boolean checksumEnabled)
          When true, enable checksum verification of pages read into the cache from the backing filestore.
 void setCompressor(String type, String compressionType)
          Set the compressor for the given class, overriding a custom StorableCodecFactory.
 void setDatabaseHook(BDBRepositoryBuilder.DatabaseHook hook)
          Sets a hook to be called whenever a database is opened.
 void setDatabasePageSize(Integer bytes, Class<? extends Storable> type)
          Sets the desired page size for a given type.
 void setDatabasesTransactional(Boolean transactional)
          When true, allows databases to be transactional.
 void setDataHome(String dir)
          By default, data files are stored relative to the environment home.
 void setDataHomeFile(File dir)
          By default, data files are stored relative to the environment home.
 void setEnvironmentHome(String envHome)
          Sets the repository environment home directory, which is required.
 void setEnvironmentHomeFile(File envHome)
          Sets the repository environment home directory, which is required.
 void setFileName(String filename, String typeName)
          Specify the file that a BDB database should reside in, except for log files and caches.
 void setIndexRepairEnabled(boolean enabled)
          By default, index repair is enabled.
 void setIndexRepairThrottle(double desiredSpeed)
          Sets the throttle parameter used when indexes are added, dropped or bulk repaired.
 void setIndexSupport(boolean indexSupport)
          By default, user specified indexes are supported.
 void setInitialDatabaseConfig(Object dbConfig)
          Optionally set the BDB specific database configuration to use for all databases created.
 void setInitialEnvironmentConfig(Object envConfig)
          Optionally set the BDB specific environment configuration to use.
 void setLockTimeout(double lockTimeout)
          Set the lock timeout, in seconds.
 void setLogFileMaxSize(Integer sizeInBytes)
          Set the maximum transaction log file size for the BDB environment.
 void setLogInMemory(boolean logInMemory)
          Set true to store transaction logs in memory only instead of persistent storage.
 void setMaster(boolean b)
          Set to false if repository should not assume the role of master.
 void setMultiversion(boolean multiversion)
          Set true to enable multiversion concurrency control (MVCC) on BDB environment.
 void setName(String name)
          Set name for the repository, which is required.
 void setPreShutdownHook(Runnable hook)
          Sets a callback to be invoked before the repository has finished running its own shutdown hooks.
 void setPrivate(boolean b)
          When true, BDB environment cannot be shared by other processes, and region files are not created.
 void setProduct(String product)
          Sets the BDB product to use, which defaults to JE.
 void setReadOnly(boolean readOnly)
          Sets the repository to read-only mode.
 void setRunCheckpointer(boolean runCheckpointer)
          Disable automatic checkpointing of database if another process is responsible for that.
 void setRunDeadlockDetector(boolean runDeadlockDetector)
          Disable automatic deadlock detection of database if another thread is responsible for that.
 void setRunFullRecovery(boolean runRecovery)
          Pass true to override the default and run a full (catastrophic) recovery when environment is opened.
 void setShutdownHook(Runnable hook)
          Sets a callback to be invoked after repository has finished running its own shutdown hooks.
 void setSingleFileName(String filename)
          Specify that all BDB databases should reside in one file, except for log files and caches.
 void setStorableCodecFactory(StorableCodecFactory factory)
          Override the default storable codec factory.
 void setTransactionNoSync(boolean noSync)
          When true, commits are not immediately written or flushed to disk.
 void setTransactionTimeout(double txnTimeout)
          Set the transaction timeout, in seconds.
 void setTransactionWriteNoSync(boolean noSync)
          When true, commits are written, but they are not flushed to disk.
 
Methods inherited from class com.amazon.carbonado.spi.AbstractRepositoryBuilder
addTriggerFactory, assertReady, build, getTriggerFactories, removeTriggerFactory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BDBRepositoryBuilder

public BDBRepositoryBuilder()
Method Detail

build

public Repository build(AtomicReference<Repository> rootRef)
                 throws RepositoryException
Description copied from interface: RepositoryBuilder
Builds a repository instance.

If the repository is being wrapped by a parent repository, the child repository will need to know this fact for some operations to work correctly. Since the parent repository is not built yet, a reference is used instead.

Parameters:
rootRef - reference to root parent repository, to be set by parent repository upon being built
Throws:
ConfigurationException - if there is a problem in the builder's configuration
RepositoryException - if there is a general problem opening the repository

getName

public String getName()
Description copied from interface: RepositoryBuilder
Returns the name of the repository.


setName

public void setName(String name)
Description copied from interface: RepositoryBuilder
Set name for the repository, which is required.


isMaster

public boolean isMaster()
Description copied from interface: RepositoryBuilder
Returns true if repository should assume the role of master, which is true by default. Repositories that link different repositories together will designate only one as the master.

A master repository is responsible for version and sequence properties. For insert operations, a master repository must set these properties if they are uninitialized. For updates, the version property is checked to see if an OptimisticLockException should be thrown.

See Also:
ReplicatedRepositoryBuilder

setMaster

public void setMaster(boolean b)
Description copied from interface: RepositoryBuilder
Set to false if repository should not assume the role of master. By default, this option is true. Repositories that link different repositories together will designate only one as the master.

A master repository is responsible for version and sequence properties. For insert operations, a master repository must set these properties if they are uninitialized. For updates, the version property is checked to see if an OptimisticLockException should be thrown.

See Also:
ReplicatedRepositoryBuilder

setProduct

public void setProduct(String product)
Sets the BDB product to use, which defaults to JE. Also supported is DB and DB_HA. If not supported, an IllegalArgumentException is thrown.


getProduct

public String getProduct()
Returns the BDB product to use, which is JE by default.


setBDBProduct

public void setBDBProduct(BDBProduct product)
Sets the BDB product to use, which defaults to JE.


getBDBProduct

public BDBProduct getBDBProduct()
Returns the BDB product to use, which is JE by default.


setEnvironmentHomeFile

public void setEnvironmentHomeFile(File envHome)
Sets the repository environment home directory, which is required.


getEnvironmentHomeFile

public File getEnvironmentHomeFile()
Returns the repository environment home directory.


setEnvironmentHome

public void setEnvironmentHome(String envHome)
Sets the repository environment home directory, which is required.

Throws:
RepositoryException - if environment home is not valid

getEnvironmentHome

public String getEnvironmentHome()
Returns the repository environment home directory.


setDataHomeFile

public void setDataHomeFile(File dir)
By default, data files are stored relative to the environment home. Call this method to override. For BDBRepositories that are log files only, this configuration is ignored.


getDataHomeFile

public File getDataHomeFile()
Returns the optional directory to store data files. Returns null if data files are expected to be relative to the environment home.


setDataHome

public void setDataHome(String dir)
By default, data files are stored relative to the environment home. Call this method to override. For BDBRepositories that are log files only, this configuration is ignored.


getDataHome

public String getDataHome()
Returns the directory to store data files.


setSingleFileName

public void setSingleFileName(String filename)
Specify that all BDB databases should reside in one file, except for log files and caches. The filename is relative to the environment home, unless data directories have been specified. For BDBRepositories that are log files only, this configuration is ignored.

Note: When setting this option, the storable codec factory must also be changed, since the default storable codec factory is unable to distinguish storable types that reside in a single database file. Call setFileName instead to use built-in BDB feature for supporting multiple databases in one file.


getSingleFileName

public String getSingleFileName()
Returns the single file that all BDB databases should reside in.


setFileName

public void setFileName(String filename,
                        String typeName)
Specify the file that a BDB database should reside in, except for log files and caches. The filename is relative to the environment home, unless data directories have been specified. For BDBRepositories that are log files only, this configuration is ignored.

Parameters:
filename - BDB database filename
typeName - type to store in file; if null, the file is used by default for all types

setIndexSupport

public void setIndexSupport(boolean indexSupport)
By default, user specified indexes are supported. Pass false to disable this, and no indexes will be built. Another consequence of this option is that no unique constraint checks will be applied to alternate keys.


getIndexSupport

public boolean getIndexSupport()
Returns true if indexes are supported, which is true by default.


isIndexRepairEnabled

public boolean isIndexRepairEnabled()
Returns:
true by default
See Also:
setIndexRepairEnabled(boolean)

setIndexRepairEnabled

public void setIndexRepairEnabled(boolean enabled)
By default, index repair is enabled. In this mode, the first time a Storable type is used, new indexes are populated and old indexes are removed. Until finished, access to the Storable is blocked.

When index repair is disabled, the Storable is immediately available. This does have consequences, however. The set of indexes available for queries is defined by the intersection of the old and new index sets. The set of indexes that are kept up-to-date is defined by the union of the old and new index sets.

While index repair is disabled, another process can safely repair the indexes in the background. When it is complete, index repair can be enabled for this repository too.


getIndexRepairThrottle

public double getIndexRepairThrottle()
Returns the throttle parameter used when indexes are added, dropped or bulk repaired. By default this value is 1.0, or maximum speed.


setIndexRepairThrottle

public void setIndexRepairThrottle(double desiredSpeed)
Sets the throttle parameter used when indexes are added, dropped or bulk repaired. By default this value is 1.0, or maximum speed.

Parameters:
desiredSpeed - 1.0 = perform work at full speed, 0.5 = perform work at half speed, 0.0 = fully suspend work

setReadOnly

public void setReadOnly(boolean readOnly)
Sets the repository to read-only mode. By default, repository is opened for reads and writes.


getReadOnly

public boolean getReadOnly()
Returns true if repository should be opened read-only.


setCacheSize

public void setCacheSize(long cacheSize)
Set the repository cache size, in bytes. Actual BDB implementation will select a suitable default if this is not set.


setCacheSize

public void setCacheSize(Long cacheSize)
Set the repository cache size, in bytes. Actual BDB implementation will select a suitable default if this is not set.

Parameters:
cacheSize - cache size to use, or null for default

getCacheSize

public Long getCacheSize()
Returns the repository cache size, or null if default should be selected.


setCachePercent

public void setCachePercent(int cachePercent)
Set the percent of JVM heap used by the repository cache. Actual BDB implementation will select a suitable default if this is not set. This is overridden by setting an explicit cacheSize.


setCachePercent

public void setCachePercent(Integer cachePercent)
Set the percent of JVM heap used by the repository cache. Actual BDB implementation will select a suitable default if this is not set. This is overridden by setting an explicit cacheSize.

Parameters:
cachePercent - percent of JVM heap to use, or null for default

getCachePercent

public Integer getCachePercent()
Returns the percent of JVM heap used by the repository cache, or null if default should be selected.


setLockTimeout

public void setLockTimeout(double lockTimeout)
Set the lock timeout, in seconds. Default value is 0.5 seconds.


getLockTimeout

public double getLockTimeout()
Returns the lock timeout, in seconds.


getLockTimeoutInMicroseconds

public long getLockTimeoutInMicroseconds()
Returns the lock timeout, in microseconds, limited to max long value.


setTransactionTimeout

public void setTransactionTimeout(double txnTimeout)
Set the transaction timeout, in seconds. Default value is 300 seconds.


getTransactionTimeout

public double getTransactionTimeout()
Returns the repository transaction timeout, in seconds.


getTransactionTimeoutInMicroseconds

public long getTransactionTimeoutInMicroseconds()
Returns the repository transaction timeout, in microseconds, limited to max long value.


setTransactionNoSync

public void setTransactionNoSync(boolean noSync)
When true, commits are not immediately written or flushed to disk. This improves performance, but there is a chance of losing the most recent commits if the process is killed or if the machine crashes.


getTransactionNoSync

public boolean getTransactionNoSync()
Returns true if transactions are not written or flushed to disk.


setTransactionWriteNoSync

public void setTransactionWriteNoSync(boolean noSync)
When true, commits are written, but they are not flushed to disk. This improves performance, but there is a chance of losing the most recent commits if the machine crashes.


getTransactionWriteNoSync

public boolean getTransactionWriteNoSync()
Returns true if transactions are not flushed to disk.


setDatabasesTransactional

public void setDatabasesTransactional(Boolean transactional)
When true, allows databases to be transactional. This setting affects the databases, not the environment. If this is not explicitly set, the environment getTransactional is used.


getDatabasesTransactional

public Boolean getDatabasesTransactional()
Returns true if the databases are configured to be transactional, false if configured to not be transactional, null if this override was never set


setDatabasePageSize

public void setDatabasePageSize(Integer bytes,
                                Class<? extends Storable> type)
Sets the desired page size for a given type. If not specified, the page size applies to all types.


setPrivate

public void setPrivate(boolean b)
When true, BDB environment cannot be shared by other processes, and region files are not created. By default, environment is shared, if supported.


isPrivate

public boolean isPrivate()
Returns true if BDB environment is private. By default, environment is shared, if supported.


setMultiversion

public void setMultiversion(boolean multiversion)
Set true to enable multiversion concurrency control (MVCC) on BDB environment. This enables snapshot isolation, and is it is not supported by all BDB products and versions.


isMultiversion

public boolean isMultiversion()
Returns false by default because multiversion concurrency control (MVCC) is not enabled.


setLogInMemory

public void setLogInMemory(boolean logInMemory)
Set true to store transaction logs in memory only instead of persistent storage. For BDB products which are entirely log based, no records are ever persisted.


getLogInMemory

public boolean getLogInMemory()
Returns false by default, indicating that transaction logs are persisted.


setLogFileMaxSize

public void setLogFileMaxSize(Integer sizeInBytes)
Set the maximum transaction log file size for the BDB environment.


getLogFileMaxSize

public Integer getLogFileMaxSize()
Returns null if default size will be used.


setRunFullRecovery

public void setRunFullRecovery(boolean runRecovery)
Pass true to override the default and run a full (catastrophic) recovery when environment is opened. This setting has no effect for BDB-JE.


getRunFullRecovery

public boolean getRunFullRecovery()
Returns true if a full (catastrophic) recovery should be performed when environment is opened.


setRunCheckpointer

public void setRunCheckpointer(boolean runCheckpointer)
Disable automatic checkpointing of database if another process is responsible for that. The false setting is implied for read-only databases.


getRunCheckpointer

public boolean getRunCheckpointer()
Returns true if checkpointer is run automatically.


setCheckpointInterval

public void setCheckpointInterval(int intervalMillis)
Set the interval to run checkpoints. This setting is ignored if the checkpointer is not configured to run.

Parameters:
intervalMillis - interval between checkpoints, in milliseconds

getCheckpointInterval

public int getCheckpointInterval()
Returns:
interval between checkpoints, in milliseconds

setCheckpointThresholdKB

public void setCheckpointThresholdKB(int thresholdKB)
Set the size threshold to run checkpoints. This setting is ignored if the checkpointer is not configured to run. Default value is 1024 KB.

Checkpoint threshold is only used by Carbonado's built-in checkpointer, and is ignored when using BDB-JE.

Parameters:
thresholdKB - run checkpoint if at least this many kilobytes in log

getCheckpointThresholdKB

public int getCheckpointThresholdKB()
Returns:
run checkpoint if at least this many kilobytes in log

setCheckpointThresholdMinutes

public void setCheckpointThresholdMinutes(int thresholdMinutes)
Set the time threshold to run checkpoints. This setting is ignored if the checkpointer is not configured to run. Default value is 5 minutes.

Checkpoint threshold is only used by Carbonado's built-in checkpointer, and is ignored when using BDB-JE.

Parameters:
thresholdMinutes - run checkpoint if at least this many minutes passed since last checkpoint

getCheckpointThresholdMinutes

public int getCheckpointThresholdMinutes()
Returns:
run checkpoint if at least this many minutes passed since last checkpoint

setRunDeadlockDetector

public void setRunDeadlockDetector(boolean runDeadlockDetector)
Disable automatic deadlock detection of database if another thread is responsible for that.


getRunDeadlockDetector

public boolean getRunDeadlockDetector()
Returns true if deadlock detector is configured to run.


setChecksumEnabled

public void setChecksumEnabled(Boolean checksumEnabled)
When true, enable checksum verification of pages read into the cache from the backing filestore. By default checksum is enabled for BDB-JE, and disabled for BDB-C.


getChecksumEnabled

public Boolean getChecksumEnabled()
Returns true if checksum verification is enabled. Returns null if the BDB default is used.


setInitialEnvironmentConfig

public void setInitialEnvironmentConfig(Object envConfig)
Optionally set the BDB specific environment configuration to use. The builder will verify that needed configuration values are set.


getInitialEnvironmentConfig

public Object getInitialEnvironmentConfig()
Returns the optional BDB specific environment configuration to use.


setInitialDatabaseConfig

public void setInitialDatabaseConfig(Object dbConfig)
Optionally set the BDB specific database configuration to use for all databases created. The storage will verify that needed configuration values are set.


getInitialDatabaseConfig

public Object getInitialDatabaseConfig()
Returns the optional BDB specific database configuration to use for all databases created.


setStorableCodecFactory

public void setStorableCodecFactory(StorableCodecFactory factory)
Override the default storable codec factory.


getStorableCodecFactory

public StorableCodecFactory getStorableCodecFactory()
Returns the storable codec factory used.


setPreShutdownHook

public void setPreShutdownHook(Runnable hook)
Sets a callback to be invoked before the repository has finished running its own shutdown hooks. This method is also invoked when repository is manually closed.


getPreShutdownHook

public Runnable getPreShutdownHook()
Returns the custom shutdown hook that runs before the repository has finished running its own shutdown hooks, or null if none.


setShutdownHook

public void setShutdownHook(Runnable hook)
Sets a callback to be invoked after repository has finished running its own shutdown hooks. This method is also invoked when repository is manually closed.


getShutdownHook

public Runnable getShutdownHook()
Returns the custom shutdown hook that runs after the repository has finished running its own shutdown hooks, or null if none.


setDatabaseHook

public void setDatabaseHook(BDBRepositoryBuilder.DatabaseHook hook)
Sets a hook to be called whenever a database is opened.


getDatabaseHook

public BDBRepositoryBuilder.DatabaseHook getDatabaseHook()
Returns the custom open database hook, or null if none.


setCompressor

public void setCompressor(String type,
                          String compressionType)
Set the compressor for the given class, overriding a custom StorableCodecFactory.

Parameters:
type - Storable to compress.
compressionType - String representation of type of compression. Available options are "NONE" for no compression or "GZIP" for gzip compression

getCompressor

public String getCompressor(String type)
Return the compressor used for the given storable.

Parameters:
type - Storable to compress
Returns:
String representation of the type of compression used. Available options are "NONE" for no compression and "GZIP" for gzip compression.

errorCheck

public void errorCheck(Collection<String> messages)
                throws ConfigurationException
Description copied from class: AbstractRepositoryBuilder
This method is called by assertReady, and subclasses must override to perform custom checks. Be sure to call super.errorCheck as well.

Overrides:
errorCheck in class AbstractRepositoryBuilder
Parameters:
messages - add any error messages to this list
Throws:
ConfigurationException - if error checking indirectly caused another exception


Copyright © 2006-2009 Amazon Technologies, Inc.. All Rights Reserved.