|
|
|
// Copyright (c) 2014, Facebook, Inc. All rights reserved.
|
|
|
|
// This source code is licensed under the BSD-style license found in the
|
|
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
|
|
|
|
package org.rocksdb;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Options to control the behavior of a database. It will be used
|
|
|
|
* during the creation of a RocksDB (i.e., RocksDB.open()).
|
|
|
|
*
|
|
|
|
* If dispose() function is not called, then it will be GC'd automatically and
|
|
|
|
* native resources will be released as part of the process.
|
|
|
|
*/
|
|
|
|
public class Options extends RocksObject {
|
|
|
|
static final long DEFAULT_CACHE_SIZE = 8 << 20;
|
|
|
|
static final int DEFAULT_NUM_SHARD_BITS = -1;
|
|
|
|
/**
|
|
|
|
* Construct options for opening a RocksDB.
|
|
|
|
*
|
|
|
|
* This constructor will create (by allocating a block of memory)
|
|
|
|
* an rocksdb::Options in the c++ side.
|
|
|
|
*/
|
|
|
|
public Options() {
|
|
|
|
super();
|
|
|
|
cacheSize_ = DEFAULT_CACHE_SIZE;
|
|
|
|
numShardBits_ = DEFAULT_NUM_SHARD_BITS;
|
|
|
|
newOptions();
|
|
|
|
env_ = RocksEnv.getDefault();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If this value is set to true, then the database will be created
|
|
|
|
* if it is missing during RocksDB.open().
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param flag a flag indicating whether to create a database the
|
|
|
|
* specified database in RocksDB.open() operation is missing.
|
|
|
|
* @return the instance of the current Options.
|
|
|
|
* @see RocksDB.open()
|
|
|
|
*/
|
|
|
|
public Options setCreateIfMissing(boolean flag) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setCreateIfMissing(nativeHandle_, flag);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use the specified object to interact with the environment,
|
|
|
|
* e.g. to read/write files, schedule background work, etc.
|
|
|
|
* Default: RocksEnv.getDefault()
|
|
|
|
*/
|
|
|
|
public Options setEnv(RocksEnv env) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setEnv(nativeHandle_, env.nativeHandle_);
|
|
|
|
env_ = env;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setEnv(long optHandle, long envHandle);
|
|
|
|
|
|
|
|
public RocksEnv getEnv() {
|
|
|
|
return env_;
|
|
|
|
}
|
|
|
|
private native long getEnvHandle(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return true if the create_if_missing flag is set to true.
|
|
|
|
* If true, the database will be created if it is missing.
|
|
|
|
*
|
|
|
|
* @return true if the createIfMissing option is set to true.
|
|
|
|
* @see setCreateIfMissing()
|
|
|
|
*/
|
|
|
|
public boolean createIfMissing() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return createIfMissing(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Amount of data to build up in memory (backed by an unsorted log
|
|
|
|
* on disk) before converting to a sorted on-disk file.
|
|
|
|
*
|
|
|
|
* Larger values increase performance, especially during bulk loads.
|
|
|
|
* Up to max_write_buffer_number write buffers may be held in memory
|
|
|
|
* at the same time, so you may wish to adjust this parameter
|
|
|
|
* to control memory usage.
|
|
|
|
*
|
|
|
|
* Also, a larger write buffer will result in a longer recovery time
|
|
|
|
* the next time the database is opened.
|
|
|
|
*
|
|
|
|
* Default: 4MB
|
|
|
|
* @param writeBufferSize the size of write buffer.
|
|
|
|
* @return the instance of the current Options.
|
|
|
|
* @see RocksDB.open()
|
|
|
|
*/
|
|
|
|
public Options setWriteBufferSize(long writeBufferSize) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setWriteBufferSize(nativeHandle_, writeBufferSize);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return size of write buffer size.
|
|
|
|
*
|
|
|
|
* @return size of write buffer.
|
|
|
|
* @see setWriteBufferSize()
|
|
|
|
*/
|
|
|
|
public long writeBufferSize() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return writeBufferSize(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The maximum number of write buffers that are built up in memory.
|
|
|
|
* The default is 2, so that when 1 write buffer is being flushed to
|
|
|
|
* storage, new writes can continue to the other write buffer.
|
|
|
|
* Default: 2
|
|
|
|
*
|
|
|
|
* @param maxWriteBufferNumber maximum number of write buffers.
|
|
|
|
* @return the instance of the current Options.
|
|
|
|
* @see RocksDB.open()
|
|
|
|
*/
|
|
|
|
public Options setMaxWriteBufferNumber(int maxWriteBufferNumber) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setMaxWriteBufferNumber(nativeHandle_, maxWriteBufferNumber);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns maximum number of write buffers.
|
|
|
|
*
|
|
|
|
* @return maximum number of write buffers.
|
|
|
|
* @see setMaxWriteBufferNumber()
|
|
|
|
*/
|
|
|
|
public int maxWriteBufferNumber() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return maxWriteBufferNumber(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, an error will be thrown during RocksDB.open() if the
|
|
|
|
* database already exists.
|
|
|
|
*
|
|
|
|
* @return if true, an error is raised when the specified database
|
|
|
|
* already exists before open.
|
|
|
|
*/
|
|
|
|
public boolean errorIfExists() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return errorIfExists(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean errorIfExists(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, an error will be thrown during RocksDB.open() if the
|
|
|
|
* database already exists.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param errorIfExists if true, an exception will be thrown
|
|
|
|
* during RocksDB.open() if the database already exists.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
* @see RocksDB.open()
|
|
|
|
*/
|
|
|
|
public Options setErrorIfExists(boolean errorIfExists) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setErrorIfExists(nativeHandle_, errorIfExists);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setErrorIfExists(long handle, boolean errorIfExists);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, the implementation will do aggressive checking of the
|
|
|
|
* data it is processing and will stop early if it detects any
|
|
|
|
* errors. This may have unforeseen ramifications: for example, a
|
|
|
|
* corruption of one DB entry may cause a large number of entries to
|
|
|
|
* become unreadable or for the entire DB to become unopenable.
|
|
|
|
* If any of the writes to the database fails (Put, Delete, Merge, Write),
|
|
|
|
* the database will switch to read-only mode and fail all other
|
|
|
|
* Write operations.
|
|
|
|
*
|
|
|
|
* @return a boolean indicating whether paranoid-check is on.
|
|
|
|
*/
|
|
|
|
public boolean paranoidChecks() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return paranoidChecks(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean paranoidChecks(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, the implementation will do aggressive checking of the
|
|
|
|
* data it is processing and will stop early if it detects any
|
|
|
|
* errors. This may have unforeseen ramifications: for example, a
|
|
|
|
* corruption of one DB entry may cause a large number of entries to
|
|
|
|
* become unreadable or for the entire DB to become unopenable.
|
|
|
|
* If any of the writes to the database fails (Put, Delete, Merge, Write),
|
|
|
|
* the database will switch to read-only mode and fail all other
|
|
|
|
* Write operations.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @param paranoidChecks a flag to indicate whether paranoid-check
|
|
|
|
* is on.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setParanoidChecks(boolean paranoidChecks) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setParanoidChecks(nativeHandle_, paranoidChecks);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setParanoidChecks(
|
|
|
|
long handle, boolean paranoidChecks);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of open files that can be used by the DB. You may need to
|
|
|
|
* increase this if your database has a large working set. Value -1 means
|
|
|
|
* files opened are always kept open. You can estimate number of files based
|
|
|
|
* on target_file_size_base and target_file_size_multiplier for level-based
|
|
|
|
* compaction. For universal-style compaction, you can usually set it to -1.
|
|
|
|
*
|
|
|
|
* @return the maximum number of open files.
|
|
|
|
*/
|
|
|
|
public int maxOpenFiles() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return maxOpenFiles(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int maxOpenFiles(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of open files that can be used by the DB. You may need to
|
|
|
|
* increase this if your database has a large working set. Value -1 means
|
|
|
|
* files opened are always kept open. You can estimate number of files based
|
|
|
|
* on target_file_size_base and target_file_size_multiplier for level-based
|
|
|
|
* compaction. For universal-style compaction, you can usually set it to -1.
|
|
|
|
* Default: 5000
|
|
|
|
*
|
|
|
|
* @param maxOpenFiles the maximum number of open files.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxOpenFiles(int maxOpenFiles) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setMaxOpenFiles(nativeHandle_, maxOpenFiles);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxOpenFiles(long handle, int maxOpenFiles);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, then the contents of data files are not synced
|
|
|
|
* to stable storage. Their contents remain in the OS buffers till the
|
|
|
|
* OS decides to flush them. This option is good for bulk-loading
|
|
|
|
* of data. Once the bulk-loading is complete, please issue a
|
|
|
|
* sync to the OS to flush all dirty buffesrs to stable storage.
|
|
|
|
*
|
|
|
|
* @return if true, then data-sync is disabled.
|
|
|
|
*/
|
|
|
|
public boolean disableDataSync() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return disableDataSync(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean disableDataSync(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, then the contents of data files are not synced
|
|
|
|
* to stable storage. Their contents remain in the OS buffers till the
|
|
|
|
* OS decides to flush them. This option is good for bulk-loading
|
|
|
|
* of data. Once the bulk-loading is complete, please issue a
|
|
|
|
* sync to the OS to flush all dirty buffesrs to stable storage.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param disableDataSync a boolean flag to specify whether to
|
|
|
|
* disable data sync.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setDisableDataSync(boolean disableDataSync) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setDisableDataSync(nativeHandle_, disableDataSync);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setDisableDataSync(long handle, boolean disableDataSync);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, then every store to stable storage will issue a fsync.
|
|
|
|
* If false, then every store to stable storage will issue a fdatasync.
|
|
|
|
* This parameter should be set to true while storing data to
|
|
|
|
* filesystem like ext3 that can lose files after a reboot.
|
|
|
|
*
|
|
|
|
* @return true if fsync is used.
|
|
|
|
*/
|
|
|
|
public boolean useFsync() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return useFsync(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean useFsync(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, then every store to stable storage will issue a fsync.
|
|
|
|
* If false, then every store to stable storage will issue a fdatasync.
|
|
|
|
* This parameter should be set to true while storing data to
|
|
|
|
* filesystem like ext3 that can lose files after a reboot.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param useFsync a boolean flag to specify whether to use fsync
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setUseFsync(boolean useFsync) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setUseFsync(nativeHandle_, useFsync);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setUseFsync(long handle, boolean useFsync);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the directory of info log.
|
|
|
|
*
|
|
|
|
* If it is empty, the log files will be in the same dir as data.
|
|
|
|
* If it is non empty, the log files will be in the specified dir,
|
|
|
|
* and the db data dir's absolute path will be used as the log file
|
|
|
|
* name's prefix.
|
|
|
|
*
|
|
|
|
* @return the path to the info log directory
|
|
|
|
*/
|
|
|
|
public String dbLogDir() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return dbLogDir(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native String dbLogDir(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This specifies the info LOG dir.
|
|
|
|
* If it is empty, the log files will be in the same dir as data.
|
|
|
|
* If it is non empty, the log files will be in the specified dir,
|
|
|
|
* and the db data dir's absolute path will be used as the log file
|
|
|
|
* name's prefix.
|
|
|
|
*
|
|
|
|
* @param dbLogDir the path to the info log directory
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setDbLogDir(String dbLogDir) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setDbLogDir(nativeHandle_, dbLogDir);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setDbLogDir(long handle, String dbLogDir);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the path to the write-ahead-logs (WAL) directory.
|
|
|
|
*
|
|
|
|
* If it is empty, the log files will be in the same dir as data,
|
|
|
|
* dbname is used as the data dir by default
|
|
|
|
* If it is non empty, the log files will be in kept the specified dir.
|
|
|
|
* When destroying the db,
|
|
|
|
* all log files in wal_dir and the dir itself is deleted
|
|
|
|
*
|
|
|
|
* @return the path to the write-ahead-logs (WAL) directory.
|
|
|
|
*/
|
|
|
|
public String walDir() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return walDir(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native String walDir(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This specifies the absolute dir path for write-ahead logs (WAL).
|
|
|
|
* If it is empty, the log files will be in the same dir as data,
|
|
|
|
* dbname is used as the data dir by default
|
|
|
|
* If it is non empty, the log files will be in kept the specified dir.
|
|
|
|
* When destroying the db,
|
|
|
|
* all log files in wal_dir and the dir itself is deleted
|
|
|
|
*
|
|
|
|
* @param walDir the path to the write-ahead-log directory.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setWalDir(String walDir) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setWalDir(nativeHandle_, walDir);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setWalDir(long handle, String walDir);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The periodicity when obsolete files get deleted. The default
|
|
|
|
* value is 6 hours. The files that get out of scope by compaction
|
|
|
|
* process will still get automatically delete on every compaction,
|
|
|
|
* regardless of this setting
|
|
|
|
*
|
|
|
|
* @return the time interval in micros when obsolete files will be deleted.
|
|
|
|
*/
|
|
|
|
public long deleteObsoleteFilesPeriodMicros() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return deleteObsoleteFilesPeriodMicros(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long deleteObsoleteFilesPeriodMicros(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The periodicity when obsolete files get deleted. The default
|
|
|
|
* value is 6 hours. The files that get out of scope by compaction
|
|
|
|
* process will still get automatically delete on every compaction,
|
|
|
|
* regardless of this setting
|
|
|
|
*
|
|
|
|
* @param micros the time interval in micros
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setDeleteObsoleteFilesPeriodMicros(long micros) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setDeleteObsoleteFilesPeriodMicros(nativeHandle_, micros);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setDeleteObsoleteFilesPeriodMicros(
|
|
|
|
long handle, long micros);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the maximum number of concurrent background compaction jobs,
|
|
|
|
* submitted to the default LOW priority thread pool.
|
|
|
|
* When increasing this number, we may also want to consider increasing
|
|
|
|
* number of threads in LOW priority thread pool.
|
|
|
|
* Default: 1
|
|
|
|
*
|
|
|
|
* @return the maximum number of concurrent background compaction jobs.
|
|
|
|
* @see Env.setBackgroundThreads()
|
|
|
|
*/
|
|
|
|
public int maxBackgroundCompactions() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return maxBackgroundCompactions(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates statistics object which collects metrics about database operations.
|
|
|
|
Statistics objects should not be shared between DB instances as
|
|
|
|
it does not use any locks to prevent concurrent updates.
|
|
|
|
*
|
|
|
|
* @return the instance of the current Options.
|
|
|
|
* @see RocksDB.open()
|
|
|
|
*/
|
|
|
|
public Options createStatistics() {
|
|
|
|
assert(isInitialized());
|
|
|
|
createStatistics(nativeHandle_);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns statistics object. Calls createStatistics() if
|
|
|
|
* C++ returns NULL pointer for statistics.
|
|
|
|
*
|
|
|
|
* @return the instance of the statistics object.
|
|
|
|
* @see createStatistics()
|
|
|
|
*/
|
|
|
|
public Statistics statisticsPtr() {
|
|
|
|
assert(isInitialized());
|
|
|
|
|
|
|
|
long statsPtr = statisticsPtr(nativeHandle_);
|
|
|
|
if(statsPtr == 0) {
|
|
|
|
createStatistics();
|
|
|
|
statsPtr = statisticsPtr(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
return new Statistics(statsPtr);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies the maximum number of concurrent background compaction jobs,
|
|
|
|
* submitted to the default LOW priority thread pool.
|
|
|
|
* If you're increasing this, also consider increasing number of threads in
|
|
|
|
* LOW priority thread pool. For more information, see
|
|
|
|
* Default: 1
|
|
|
|
*
|
|
|
|
* @param maxBackgroundCompactions the maximum number of background
|
|
|
|
* compaction jobs.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*
|
|
|
|
* @see Env.setBackgroundThreads()
|
|
|
|
* @see maxBackgroundFlushes()
|
|
|
|
*/
|
|
|
|
public Options setMaxBackgroundCompactions(int maxBackgroundCompactions) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setMaxBackgroundCompactions(nativeHandle_, maxBackgroundCompactions);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the maximum number of concurrent background flush jobs.
|
|
|
|
* If you're increasing this, also consider increasing number of threads in
|
|
|
|
* HIGH priority thread pool. For more information, see
|
|
|
|
* Default: 1
|
|
|
|
*
|
|
|
|
* @return the maximum number of concurrent background flush jobs.
|
|
|
|
* @see Env.setBackgroundThreads()
|
|
|
|
*/
|
|
|
|
public int maxBackgroundFlushes() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return maxBackgroundFlushes(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int maxBackgroundFlushes(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies the maximum number of concurrent background flush jobs.
|
|
|
|
* If you're increasing this, also consider increasing number of threads in
|
|
|
|
* HIGH priority thread pool. For more information, see
|
|
|
|
* Default: 1
|
|
|
|
*
|
|
|
|
* @param maxBackgroundFlushes
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*
|
|
|
|
* @see Env.setBackgroundThreads()
|
|
|
|
* @see maxBackgroundCompactions()
|
|
|
|
*/
|
|
|
|
public Options setMaxBackgroundFlushes(int maxBackgroundFlushes) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setMaxBackgroundFlushes(nativeHandle_, maxBackgroundFlushes);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxBackgroundFlushes(
|
|
|
|
long handle, int maxBackgroundFlushes);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the maximum size of a info log file. If the current log file
|
|
|
|
* is larger than this size, a new info log file will be created.
|
|
|
|
* If 0, all logs will be written to one log file.
|
|
|
|
*
|
|
|
|
* @return the maximum size of the info log file.
|
|
|
|
*/
|
|
|
|
public long maxLogFileSize() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return maxLogFileSize(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long maxLogFileSize(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies the maximum size of a info log file. If the current log file
|
|
|
|
* is larger than `max_log_file_size`, a new info log file will
|
|
|
|
* be created.
|
|
|
|
* If 0, all logs will be written to one log file.
|
|
|
|
*
|
|
|
|
* @param maxLogFileSize the maximum size of a info log file.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxLogFileSize(long maxLogFileSize) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setMaxLogFileSize(nativeHandle_, maxLogFileSize);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxLogFileSize(long handle, long maxLogFileSize);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the time interval for the info log file to roll (in seconds).
|
|
|
|
* If specified with non-zero value, log file will be rolled
|
|
|
|
* if it has been active longer than `log_file_time_to_roll`.
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @return the time interval in seconds.
|
|
|
|
*/
|
|
|
|
public long logFileTimeToRoll() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return logFileTimeToRoll(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long logFileTimeToRoll(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies the time interval for the info log file to roll (in seconds).
|
|
|
|
* If specified with non-zero value, log file will be rolled
|
|
|
|
* if it has been active longer than `log_file_time_to_roll`.
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @param logFileTimeToRoll the time interval in seconds.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setLogFileTimeToRoll(long logFileTimeToRoll) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setLogFileTimeToRoll(nativeHandle_, logFileTimeToRoll);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setLogFileTimeToRoll(
|
|
|
|
long handle, long logFileTimeToRoll);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the maximum number of info log files to be kept.
|
|
|
|
* Default: 1000
|
|
|
|
*
|
|
|
|
* @return the maximum number of info log files to be kept.
|
|
|
|
*/
|
|
|
|
public long keepLogFileNum() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return keepLogFileNum(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long keepLogFileNum(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies the maximum number of info log files to be kept.
|
|
|
|
* Default: 1000
|
|
|
|
*
|
|
|
|
* @param keepLogFileNum the maximum number of info log files to be kept.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setKeepLogFileNum(long keepLogFileNum) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setKeepLogFileNum(nativeHandle_, keepLogFileNum);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setKeepLogFileNum(long handle, long keepLogFileNum);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Manifest file is rolled over on reaching this limit.
|
|
|
|
* The older manifest file be deleted.
|
|
|
|
* The default value is MAX_INT so that roll-over does not take place.
|
|
|
|
*
|
|
|
|
* @return the size limit of a manifest file.
|
|
|
|
*/
|
|
|
|
public long maxManifestFileSize() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return maxManifestFileSize(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long maxManifestFileSize(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Manifest file is rolled over on reaching this limit.
|
|
|
|
* The older manifest file be deleted.
|
|
|
|
* The default value is MAX_INT so that roll-over does not take place.
|
|
|
|
*
|
|
|
|
* @param maxManifestFileSize the size limit of a manifest file.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxManifestFileSize(long maxManifestFileSize) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setMaxManifestFileSize(nativeHandle_, maxManifestFileSize);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxManifestFileSize(
|
|
|
|
long handle, long maxManifestFileSize);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of shards used for table cache.
|
|
|
|
*
|
|
|
|
* @return the number of shards used for table cache.
|
|
|
|
*/
|
|
|
|
public int tableCacheNumshardbits() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return tableCacheNumshardbits(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int tableCacheNumshardbits(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of shards used for table cache.
|
|
|
|
*
|
|
|
|
* @param tableCacheNumshardbits the number of chards
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setTableCacheNumshardbits(int tableCacheNumshardbits) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setTableCacheNumshardbits(nativeHandle_, tableCacheNumshardbits);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setTableCacheNumshardbits(
|
|
|
|
long handle, int tableCacheNumshardbits);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* During data eviction of table's LRU cache, it would be inefficient
|
|
|
|
* to strictly follow LRU because this piece of memory will not really
|
|
|
|
* be released unless its refcount falls to zero. Instead, make two
|
|
|
|
* passes: the first pass will release items with refcount = 1,
|
|
|
|
* and if not enough space releases after scanning the number of
|
|
|
|
* elements specified by this parameter, we will remove items in LRU
|
|
|
|
* order.
|
|
|
|
*
|
|
|
|
* @return scan count limit
|
|
|
|
*/
|
|
|
|
public int tableCacheRemoveScanCountLimit() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return tableCacheRemoveScanCountLimit(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int tableCacheRemoveScanCountLimit(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* During data eviction of table's LRU cache, it would be inefficient
|
|
|
|
* to strictly follow LRU because this piece of memory will not really
|
|
|
|
* be released unless its refcount falls to zero. Instead, make two
|
|
|
|
* passes: the first pass will release items with refcount = 1,
|
|
|
|
* and if not enough space releases after scanning the number of
|
|
|
|
* elements specified by this parameter, we will remove items in LRU
|
|
|
|
* order.
|
|
|
|
*
|
|
|
|
* @param limit scan count limit
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setTableCacheRemoveScanCountLimit(int limit) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setTableCacheRemoveScanCountLimit(nativeHandle_, limit);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setTableCacheRemoveScanCountLimit(
|
|
|
|
long handle, int limit);
|
|
|
|
|
|
|
|
/**
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
* WalTtlSeconds() and walSizeLimitMB() affect how archived logs
|
|
|
|
* will be deleted.
|
|
|
|
* 1. If both set to 0, logs will be deleted asap and will not get into
|
|
|
|
* the archive.
|
|
|
|
* 2. If WAL_ttl_seconds is 0 and WAL_size_limit_MB is not 0,
|
|
|
|
* WAL files will be checked every 10 min and if total size is greater
|
|
|
|
* then WAL_size_limit_MB, they will be deleted starting with the
|
|
|
|
* earliest until size_limit is met. All empty files will be deleted.
|
|
|
|
* 3. If WAL_ttl_seconds is not 0 and WAL_size_limit_MB is 0, then
|
|
|
|
* WAL files will be checked every WAL_ttl_secondsi / 2 and those that
|
|
|
|
* are older than WAL_ttl_seconds will be deleted.
|
|
|
|
* 4. If both are not 0, WAL files will be checked every 10 min and both
|
|
|
|
* checks will be performed with ttl being first.
|
|
|
|
*
|
|
|
|
* @return the wal-ttl seconds
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
* @see walSizeLimitMB()
|
|
|
|
*/
|
|
|
|
public long walTtlSeconds() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return walTtlSeconds(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long walTtlSeconds(long handle);
|
|
|
|
|
|
|
|
/**
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
* WalTtlSeconds() and walSizeLimitMB() affect how archived logs
|
|
|
|
* will be deleted.
|
|
|
|
* 1. If both set to 0, logs will be deleted asap and will not get into
|
|
|
|
* the archive.
|
|
|
|
* 2. If WAL_ttl_seconds is 0 and WAL_size_limit_MB is not 0,
|
|
|
|
* WAL files will be checked every 10 min and if total size is greater
|
|
|
|
* then WAL_size_limit_MB, they will be deleted starting with the
|
|
|
|
* earliest until size_limit is met. All empty files will be deleted.
|
|
|
|
* 3. If WAL_ttl_seconds is not 0 and WAL_size_limit_MB is 0, then
|
|
|
|
* WAL files will be checked every WAL_ttl_secondsi / 2 and those that
|
|
|
|
* are older than WAL_ttl_seconds will be deleted.
|
|
|
|
* 4. If both are not 0, WAL files will be checked every 10 min and both
|
|
|
|
* checks will be performed with ttl being first.
|
|
|
|
*
|
|
|
|
* @param walTtlSeconds the ttl seconds
|
|
|
|
* @return the reference to the current option.
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
* @see setWalSizeLimitMB()
|
|
|
|
*/
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
public Options setWalTtlSeconds(long walTtlSeconds) {
|
|
|
|
assert(isInitialized());
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
setWalTtlSeconds(nativeHandle_, walTtlSeconds);
|
|
|
|
return this;
|
|
|
|
}
|
[Java] Enable filluniquerandom, readseq, BloomFilter, and 70+ command-line options to DbBenchmark.java
Summary:
* Add filluniquerandom
* Add readseq, implemented using iterator.
* Realize most command-line-arguments from db_bench.cc (70+).
* Some code are commented out as some of the options in Options
not yet have Java bindings.
* Add default option to DbBenchmark.
* RocksDB will now take the ownership of all c++ raw-pointers from Options, which includes a c++ raw-pointer for Filter.
Test Plan: ./jdb_bench.sh --db=/tmp/rocksjava-bench/db --num_levels=6 --key_size=20 --prefix_size=20 --keys_per_prefix=0 --value_size=100 --block_size=4096 --cache_size=17179869184 --cache_numshardbits=6 --compression_ratio=1 --min_level_to_compress=-1 --disable_seek_compaction=1 --hard_rate_limit=2 --write_buffer_size=134217728 --max_write_buffer_number=2 --level0_file_num_compaction_trigger=8 --target_file_size_base=134217728 --max_bytes_for_level_base=1073741824 --disable_wal=0 --wal_dir=/tmp/rocksjava-bench/wal --sync=0 --disable_data_sync=1 --verify_checksum=1 --delete_obsolete_files_period_micros=314572800 --max_grandparent_overlap_factor=10 --max_background_compactions=4 --max_background_flushes=0 --level0_slowdown_writes_trigger=16 --level0_stop_writes_trigger=24 --statistics=0 --stats_per_interval=0 --stats_interval=1048576 --histogram=0 --use_plain_table=1 --open_files=-1 --mmap_read=1 --mmap_write=0 --memtablerep=prefix_hash --bloom_bits=10 --bloom_locality=1 --perf_level=0 --benchmarks=filluniquerandom,readseq,readrandom --use_existing_db=0 --threads=4
Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D18267
11 years ago
|
|
|
private native void setWalTtlSeconds(long handle, long walTtlSeconds);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* WalTtlSeconds() and walSizeLimitMB() affect how archived logs
|
|
|
|
* will be deleted.
|
|
|
|
* 1. If both set to 0, logs will be deleted asap and will not get into
|
|
|
|
* the archive.
|
|
|
|
* 2. If WAL_ttl_seconds is 0 and WAL_size_limit_MB is not 0,
|
|
|
|
* WAL files will be checked every 10 min and if total size is greater
|
|
|
|
* then WAL_size_limit_MB, they will be deleted starting with the
|
|
|
|
* earliest until size_limit is met. All empty files will be deleted.
|
|
|
|
* 3. If WAL_ttl_seconds is not 0 and WAL_size_limit_MB is 0, then
|
|
|
|
* WAL files will be checked every WAL_ttl_secondsi / 2 and those that
|
|
|
|
* are older than WAL_ttl_seconds will be deleted.
|
|
|
|
* 4. If both are not 0, WAL files will be checked every 10 min and both
|
|
|
|
* checks will be performed with ttl being first.
|
|
|
|
*
|
|
|
|
* @return size limit in mega-bytes.
|
|
|
|
* @see walSizeLimitMB()
|
|
|
|
*/
|
|
|
|
public long walSizeLimitMB() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return walSizeLimitMB(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long walSizeLimitMB(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* WalTtlSeconds() and walSizeLimitMB() affect how archived logs
|
|
|
|
* will be deleted.
|
|
|
|
* 1. If both set to 0, logs will be deleted asap and will not get into
|
|
|
|
* the archive.
|
|
|
|
* 2. If WAL_ttl_seconds is 0 and WAL_size_limit_MB is not 0,
|
|
|
|
* WAL files will be checked every 10 min and if total size is greater
|
|
|
|
* then WAL_size_limit_MB, they will be deleted starting with the
|
|
|
|
* earliest until size_limit is met. All empty files will be deleted.
|
|
|
|
* 3. If WAL_ttl_seconds is not 0 and WAL_size_limit_MB is 0, then
|
|
|
|
* WAL files will be checked every WAL_ttl_secondsi / 2 and those that
|
|
|
|
* are older than WAL_ttl_seconds will be deleted.
|
|
|
|
* 4. If both are not 0, WAL files will be checked every 10 min and both
|
|
|
|
* checks will be performed with ttl being first.
|
|
|
|
*
|
|
|
|
* @param sizeLimitMB size limit in mega-bytes.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
* @see setWalSizeLimitMB()
|
|
|
|
*/
|
|
|
|
public Options setWalSizeLimitMB(long sizeLimitMB) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setWalSizeLimitMB(nativeHandle_, sizeLimitMB);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setWalSizeLimitMB(long handle, long sizeLimitMB);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of bytes to preallocate (via fallocate) the manifest
|
|
|
|
* files. Default is 4mb, which is reasonable to reduce random IO
|
|
|
|
* as well as prevent overallocation for mounts that preallocate
|
|
|
|
* large amounts of data (such as xfs's allocsize option).
|
|
|
|
*
|
|
|
|
* @return size in bytes.
|
|
|
|
*/
|
|
|
|
public long manifestPreallocationSize() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return manifestPreallocationSize(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long manifestPreallocationSize(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of bytes to preallocate (via fallocate) the manifest
|
|
|
|
* files. Default is 4mb, which is reasonable to reduce random IO
|
|
|
|
* as well as prevent overallocation for mounts that preallocate
|
|
|
|
* large amounts of data (such as xfs's allocsize option).
|
|
|
|
*
|
|
|
|
* @param size the size in byte
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setManifestPreallocationSize(long size) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setManifestPreallocationSize(nativeHandle_, size);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setManifestPreallocationSize(
|
|
|
|
long handle, long size);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Data being read from file storage may be buffered in the OS
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @return if true, then OS buffering is allowed.
|
|
|
|
*/
|
|
|
|
public boolean allowOsBuffer() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return allowOsBuffer(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean allowOsBuffer(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Data being read from file storage may be buffered in the OS
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @param allowOsBufferif true, then OS buffering is allowed.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setAllowOsBuffer(boolean allowOsBuffer) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setAllowOsBuffer(nativeHandle_, allowOsBuffer);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setAllowOsBuffer(
|
|
|
|
long handle, boolean allowOsBuffer);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow the OS to mmap file for reading sst tables.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @return true if mmap reads are allowed.
|
|
|
|
*/
|
|
|
|
public boolean allowMmapReads() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return allowMmapReads(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean allowMmapReads(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow the OS to mmap file for reading sst tables.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param allowMmapReads true if mmap reads are allowed.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setAllowMmapReads(boolean allowMmapReads) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setAllowMmapReads(nativeHandle_, allowMmapReads);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setAllowMmapReads(
|
|
|
|
long handle, boolean allowMmapReads);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow the OS to mmap file for writing. Default: false
|
|
|
|
*
|
|
|
|
* @return true if mmap writes are allowed.
|
|
|
|
*/
|
|
|
|
public boolean allowMmapWrites() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return allowMmapWrites(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean allowMmapWrites(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow the OS to mmap file for writing. Default: false
|
|
|
|
*
|
|
|
|
* @param allowMmapWrites true if mmap writes are allowd.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setAllowMmapWrites(boolean allowMmapWrites) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setAllowMmapWrites(nativeHandle_, allowMmapWrites);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setAllowMmapWrites(
|
|
|
|
long handle, boolean allowMmapWrites);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Disable child process inherit open files. Default: true
|
|
|
|
*
|
|
|
|
* @return true if child process inheriting open files is disabled.
|
|
|
|
*/
|
|
|
|
public boolean isFdCloseOnExec() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return isFdCloseOnExec(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean isFdCloseOnExec(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Disable child process inherit open files. Default: true
|
|
|
|
*
|
|
|
|
* @param isFdCloseOnExec true if child process inheriting open
|
|
|
|
* files is disabled.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setIsFdCloseOnExec(boolean isFdCloseOnExec) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setIsFdCloseOnExec(nativeHandle_, isFdCloseOnExec);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setIsFdCloseOnExec(
|
|
|
|
long handle, boolean isFdCloseOnExec);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Skip log corruption error on recovery (If client is ok with
|
|
|
|
* losing most recent changes)
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @return true if log corruption errors are skipped during recovery.
|
|
|
|
*/
|
|
|
|
public boolean skipLogErrorOnRecovery() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return skipLogErrorOnRecovery(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean skipLogErrorOnRecovery(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Skip log corruption error on recovery (If client is ok with
|
|
|
|
* losing most recent changes)
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param skip true if log corruption errors are skipped during recovery.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setSkipLogErrorOnRecovery(boolean skip) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setSkipLogErrorOnRecovery(nativeHandle_, skip);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setSkipLogErrorOnRecovery(
|
|
|
|
long handle, boolean skip);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If not zero, dump rocksdb.stats to LOG every stats_dump_period_sec
|
|
|
|
* Default: 3600 (1 hour)
|
|
|
|
*
|
|
|
|
* @return time interval in seconds.
|
|
|
|
*/
|
|
|
|
public int statsDumpPeriodSec() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return statsDumpPeriodSec(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int statsDumpPeriodSec(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* if not zero, dump rocksdb.stats to LOG every stats_dump_period_sec
|
|
|
|
* Default: 3600 (1 hour)
|
|
|
|
*
|
|
|
|
* @param statsDumpPeriodSec time interval in seconds.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setStatsDumpPeriodSec(int statsDumpPeriodSec) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setStatsDumpPeriodSec(nativeHandle_, statsDumpPeriodSec);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setStatsDumpPeriodSec(
|
|
|
|
long handle, int statsDumpPeriodSec);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If set true, will hint the underlying file system that the file
|
|
|
|
* access pattern is random, when a sst file is opened.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @return true if hinting random access is on.
|
|
|
|
*/
|
|
|
|
public boolean adviseRandomOnOpen() {
|
|
|
|
return adviseRandomOnOpen(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean adviseRandomOnOpen(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If set true, will hint the underlying file system that the file
|
|
|
|
* access pattern is random, when a sst file is opened.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @param adviseRandomOnOpen true if hinting random access is on.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setAdviseRandomOnOpen(boolean adviseRandomOnOpen) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setAdviseRandomOnOpen(nativeHandle_, adviseRandomOnOpen);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setAdviseRandomOnOpen(
|
|
|
|
long handle, boolean adviseRandomOnOpen);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use adaptive mutex, which spins in the user space before resorting
|
|
|
|
* to kernel. This could reduce context switch when the mutex is not
|
|
|
|
* heavily contended. However, if the mutex is hot, we could end up
|
|
|
|
* wasting spin time.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @return true if adaptive mutex is used.
|
|
|
|
*/
|
|
|
|
public boolean useAdaptiveMutex() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return useAdaptiveMutex(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean useAdaptiveMutex(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use adaptive mutex, which spins in the user space before resorting
|
|
|
|
* to kernel. This could reduce context switch when the mutex is not
|
|
|
|
* heavily contended. However, if the mutex is hot, we could end up
|
|
|
|
* wasting spin time.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param useAdaptiveMutex true if adaptive mutex is used.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setUseAdaptiveMutex(boolean useAdaptiveMutex) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setUseAdaptiveMutex(nativeHandle_, useAdaptiveMutex);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setUseAdaptiveMutex(
|
|
|
|
long handle, boolean useAdaptiveMutex);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allows OS to incrementally sync files to disk while they are being
|
|
|
|
* written, asynchronously, in the background.
|
|
|
|
* Issue one request for every bytes_per_sync written. 0 turns it off.
|
|
|
|
* Default: 0
|
|
|
|
*
|
|
|
|
* @return size in bytes
|
|
|
|
*/
|
|
|
|
public long bytesPerSync() {
|
|
|
|
return bytesPerSync(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long bytesPerSync(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allows OS to incrementally sync files to disk while they are being
|
|
|
|
* written, asynchronously, in the background.
|
|
|
|
* Issue one request for every bytes_per_sync written. 0 turns it off.
|
|
|
|
* Default: 0
|
|
|
|
*
|
|
|
|
* @param bytesPerSync size in bytes
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setBytesPerSync(long bytesPerSync) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setBytesPerSync(nativeHandle_, bytesPerSync);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setBytesPerSync(
|
|
|
|
long handle, long bytesPerSync);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow RocksDB to use thread local storage to optimize performance.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @return true if thread-local storage is allowed
|
|
|
|
*/
|
|
|
|
public boolean allowThreadLocal() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return allowThreadLocal(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean allowThreadLocal(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow RocksDB to use thread local storage to optimize performance.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @param allowThreadLocal true if thread-local storage is allowed.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setAllowThreadLocal(boolean allowThreadLocal) {
|
|
|
|
assert(isInitialized());
|
|
|
|
setAllowThreadLocal(nativeHandle_, allowThreadLocal);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setAllowThreadLocal(
|
|
|
|
long handle, boolean allowThreadLocal);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the config for mem-table.
|
|
|
|
*
|
|
|
|
* @param config the mem-table config.
|
|
|
|
* @return the instance of the current Options.
|
|
|
|
*/
|
|
|
|
public Options setMemTableConfig(MemTableConfig config) {
|
|
|
|
setMemTableFactory(nativeHandle_, config.newMemTableFactoryHandle());
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use to control write rate of flush and compaction. Flush has higher
|
|
|
|
* priority than compaction. Rate limiting is disabled if nullptr.
|
|
|
|
* Default: nullptr
|
|
|
|
*
|
|
|
|
* @param config rate limiter config.
|
|
|
|
* @return the instance of the current Options.
|
|
|
|
*/
|
|
|
|
public Options setRateLimiterConfig(RateLimiterConfig config) {
|
|
|
|
setRateLimiter(nativeHandle_, config.newRateLimiterHandle());
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the name of the current mem table representation.
|
|
|
|
* Memtable format can be set using setTableFormatConfig.
|
|
|
|
*
|
|
|
|
* @return the name of the currently-used memtable factory.
|
|
|
|
* @see setTableFormatConfig()
|
|
|
|
*/
|
|
|
|
public String memTableFactoryName() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return memTableFactoryName(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the config for table format.
|
|
|
|
*
|
|
|
|
* @param config the table format config.
|
|
|
|
* @return the reference of the current Options.
|
|
|
|
*/
|
|
|
|
public Options setTableFormatConfig(TableFormatConfig config) {
|
|
|
|
setTableFactory(nativeHandle_, config.newTableFactoryHandle());
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the name of the currently used table factory.
|
|
|
|
*/
|
|
|
|
public String tableFactoryName() {
|
|
|
|
assert(isInitialized());
|
|
|
|
return tableFactoryName(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This prefix-extractor uses the first n bytes of a key as its prefix.
|
|
|
|
*
|
|
|
|
* In some hash-based memtable representation such as HashLinkedList
|
|
|
|
* and HashSkipList, prefixes are used to partition the keys into
|
|
|
|
* several buckets. Prefix extractor is used to specify how to
|
|
|
|
* extract the prefix given a key.
|
|
|
|
*
|
|
|
|
* @param n use the first n bytes of a key as its prefix.
|
|
|
|
*/
|
|
|
|
public Options useFixedLengthPrefixExtractor(int n) {
|
|
|
|
assert(isInitialized());
|
|
|
|
useFixedLengthPrefixExtractor(nativeHandle_, n);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
/**
|
|
|
|
* Number of keys between restart points for delta encoding of keys.
|
|
|
|
* This parameter can be changed dynamically. Most clients should
|
|
|
|
* leave this parameter alone.
|
|
|
|
* Default: 16
|
|
|
|
*
|
|
|
|
* @return the number of keys between restart points.
|
|
|
|
*/
|
|
|
|
public int blockRestartInterval() {
|
|
|
|
return blockRestartInterval(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int blockRestartInterval(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of keys between restart points for delta encoding of keys.
|
|
|
|
* This parameter can be changed dynamically. Most clients should
|
|
|
|
* leave this parameter alone.
|
|
|
|
* Default: 16
|
|
|
|
*
|
|
|
|
* @param blockRestartInterval the number of keys between restart points.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setBlockRestartInterval(int blockRestartInterval) {
|
|
|
|
setBlockRestartInterval(nativeHandle_, blockRestartInterval);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setBlockRestartInterval(
|
|
|
|
long handle, int blockRestartInterval);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compress blocks using the specified compression algorithm. This
|
|
|
|
parameter can be changed dynamically.
|
|
|
|
*
|
|
|
|
* Default: SNAPPY_COMPRESSION, which gives lightweight but fast compression.
|
|
|
|
*
|
|
|
|
* @return Compression type.
|
|
|
|
*/
|
|
|
|
public CompressionType compressionType() {
|
|
|
|
return CompressionType.values()[compressionType(nativeHandle_)];
|
|
|
|
}
|
|
|
|
private native byte compressionType(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compress blocks using the specified compression algorithm. This
|
|
|
|
parameter can be changed dynamically.
|
|
|
|
*
|
|
|
|
* Default: SNAPPY_COMPRESSION, which gives lightweight but fast compression.
|
|
|
|
*
|
|
|
|
* @param compressionType Compression Type.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setCompressionType(CompressionType compressionType) {
|
|
|
|
setCompressionType(nativeHandle_, compressionType.getValue());
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setCompressionType(long handle, byte compressionType);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compaction style for DB.
|
|
|
|
*
|
|
|
|
* @return Compaction style.
|
|
|
|
*/
|
|
|
|
public CompactionStyle compactionStyle() {
|
|
|
|
return CompactionStyle.values()[compactionStyle(nativeHandle_)];
|
|
|
|
}
|
|
|
|
private native byte compactionStyle(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set compaction style for DB.
|
|
|
|
*
|
|
|
|
* Default: LEVEL.
|
|
|
|
*
|
|
|
|
* @param compactionStyle Compaction style.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setCompactionStyle(CompactionStyle compactionStyle) {
|
|
|
|
setCompactionStyle(nativeHandle_, compactionStyle.getValue());
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setCompactionStyle(long handle, byte compactionStyle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If level-styled compaction is used, then this number determines
|
|
|
|
* the total number of levels.
|
|
|
|
*
|
|
|
|
* @return the number of levels.
|
|
|
|
*/
|
|
|
|
public int numLevels() {
|
|
|
|
return numLevels(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int numLevels(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the number of levels for this database
|
|
|
|
* If level-styled compaction is used, then this number determines
|
|
|
|
* the total number of levels.
|
|
|
|
*
|
|
|
|
* @param numLevels the number of levels.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setNumLevels(int numLevels) {
|
|
|
|
setNumLevels(nativeHandle_, numLevels);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setNumLevels(
|
|
|
|
long handle, int numLevels);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of files in leve 0 to trigger compaction from level-0 to
|
|
|
|
* level-1. A value < 0 means that level-0 compaction will not be
|
|
|
|
* triggered by number of files at all.
|
|
|
|
* Default: 4
|
|
|
|
*
|
|
|
|
* @return the number of files in level 0 to trigger compaction.
|
|
|
|
*/
|
|
|
|
public int levelZeroFileNumCompactionTrigger() {
|
|
|
|
return levelZeroFileNumCompactionTrigger(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int levelZeroFileNumCompactionTrigger(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of files to trigger level-0 compaction. A value <0 means that
|
|
|
|
* level-0 compaction will not be triggered by number of files at all.
|
|
|
|
* Default: 4
|
|
|
|
*
|
|
|
|
* @param numFiles the number of files in level-0 to trigger compaction.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setLevelZeroFileNumCompactionTrigger(
|
|
|
|
int numFiles) {
|
|
|
|
setLevelZeroFileNumCompactionTrigger(
|
|
|
|
nativeHandle_, numFiles);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setLevelZeroFileNumCompactionTrigger(
|
|
|
|
long handle, int numFiles);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Soft limit on the number of level-0 files. We start slowing down writes
|
|
|
|
* at this point. A value < 0 means that no writing slow down will be
|
|
|
|
* triggered by number of files in level-0.
|
|
|
|
*
|
|
|
|
* @return the soft limit on the number of level-0 files.
|
|
|
|
*/
|
|
|
|
public int levelZeroSlowdownWritesTrigger() {
|
|
|
|
return levelZeroSlowdownWritesTrigger(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int levelZeroSlowdownWritesTrigger(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Soft limit on number of level-0 files. We start slowing down writes at this
|
|
|
|
* point. A value <0 means that no writing slow down will be triggered by
|
|
|
|
* number of files in level-0.
|
|
|
|
*
|
|
|
|
* @param numFiles soft limit on number of level-0 files.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setLevelZeroSlowdownWritesTrigger(
|
|
|
|
int numFiles) {
|
|
|
|
setLevelZeroSlowdownWritesTrigger(nativeHandle_, numFiles);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setLevelZeroSlowdownWritesTrigger(
|
|
|
|
long handle, int numFiles);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of level-0 files. We stop writes at this point.
|
|
|
|
*
|
|
|
|
* @return the hard limit of the number of level-0 file.
|
|
|
|
*/
|
|
|
|
public int levelZeroStopWritesTrigger() {
|
|
|
|
return levelZeroStopWritesTrigger(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int levelZeroStopWritesTrigger(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of level-0 files. We stop writes at this point.
|
|
|
|
*
|
|
|
|
* @param numFiles the hard limit of the number of level-0 files.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setLevelZeroStopWritesTrigger(int numFiles) {
|
|
|
|
setLevelZeroStopWritesTrigger(nativeHandle_, numFiles);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setLevelZeroStopWritesTrigger(
|
|
|
|
long handle, int numFiles);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The highest level to which a new compacted memtable is pushed if it
|
|
|
|
* does not create overlap. We try to push to level 2 to avoid the
|
|
|
|
* relatively expensive level 0=>1 compactions and to avoid some
|
|
|
|
* expensive manifest file operations. We do not push all the way to
|
|
|
|
* the largest level since that can generate a lot of wasted disk
|
|
|
|
* space if the same key space is being repeatedly overwritten.
|
|
|
|
*
|
|
|
|
* @return the highest level where a new compacted memtable will be pushed.
|
|
|
|
*/
|
|
|
|
public int maxMemCompactionLevel() {
|
|
|
|
return maxMemCompactionLevel(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int maxMemCompactionLevel(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The highest level to which a new compacted memtable is pushed if it
|
|
|
|
* does not create overlap. We try to push to level 2 to avoid the
|
|
|
|
* relatively expensive level 0=>1 compactions and to avoid some
|
|
|
|
* expensive manifest file operations. We do not push all the way to
|
|
|
|
* the largest level since that can generate a lot of wasted disk
|
|
|
|
* space if the same key space is being repeatedly overwritten.
|
|
|
|
*
|
|
|
|
* @param maxMemCompactionLevel the highest level to which a new compacted
|
|
|
|
* mem-table will be pushed.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxMemCompactionLevel(int maxMemCompactionLevel) {
|
|
|
|
setMaxMemCompactionLevel(nativeHandle_, maxMemCompactionLevel);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxMemCompactionLevel(
|
|
|
|
long handle, int maxMemCompactionLevel);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The target file size for compaction.
|
|
|
|
* This targetFileSizeBase determines a level-1 file size.
|
|
|
|
* Target file size for level L can be calculated by
|
|
|
|
* targetFileSizeBase * (targetFileSizeMultiplier ^ (L-1))
|
|
|
|
* For example, if targetFileSizeBase is 2MB and
|
|
|
|
* target_file_size_multiplier is 10, then each file on level-1 will
|
|
|
|
* be 2MB, and each file on level 2 will be 20MB,
|
|
|
|
* and each file on level-3 will be 200MB.
|
|
|
|
* by default targetFileSizeBase is 2MB.
|
|
|
|
*
|
|
|
|
* @return the target size of a level-0 file.
|
|
|
|
*
|
|
|
|
* @see targetFileSizeMultiplier()
|
|
|
|
*/
|
|
|
|
public int targetFileSizeBase() {
|
|
|
|
return targetFileSizeBase(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int targetFileSizeBase(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The target file size for compaction.
|
|
|
|
* This targetFileSizeBase determines a level-1 file size.
|
|
|
|
* Target file size for level L can be calculated by
|
|
|
|
* targetFileSizeBase * (targetFileSizeMultiplier ^ (L-1))
|
|
|
|
* For example, if targetFileSizeBase is 2MB and
|
|
|
|
* target_file_size_multiplier is 10, then each file on level-1 will
|
|
|
|
* be 2MB, and each file on level 2 will be 20MB,
|
|
|
|
* and each file on level-3 will be 200MB.
|
|
|
|
* by default targetFileSizeBase is 2MB.
|
|
|
|
*
|
|
|
|
* @param targetFileSizeBase the target size of a level-0 file.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*
|
|
|
|
* @see setTargetFileSizeMultiplier()
|
|
|
|
*/
|
|
|
|
public Options setTargetFileSizeBase(int targetFileSizeBase) {
|
|
|
|
setTargetFileSizeBase(nativeHandle_, targetFileSizeBase);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setTargetFileSizeBase(
|
|
|
|
long handle, int targetFileSizeBase);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* targetFileSizeMultiplier defines the size ratio between a
|
|
|
|
* level-(L+1) file and level-L file.
|
|
|
|
* By default targetFileSizeMultiplier is 1, meaning
|
|
|
|
* files in different levels have the same target.
|
|
|
|
*
|
|
|
|
* @return the size ratio between a level-(L+1) file and level-L file.
|
|
|
|
*/
|
|
|
|
public int targetFileSizeMultiplier() {
|
|
|
|
return targetFileSizeMultiplier(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int targetFileSizeMultiplier(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* targetFileSizeMultiplier defines the size ratio between a
|
|
|
|
* level-L file and level-(L+1) file.
|
|
|
|
* By default target_file_size_multiplier is 1, meaning
|
|
|
|
* files in different levels have the same target.
|
|
|
|
*
|
|
|
|
* @param multiplier the size ratio between a level-(L+1) file
|
|
|
|
* and level-L file.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setTargetFileSizeMultiplier(int multiplier) {
|
|
|
|
setTargetFileSizeMultiplier(nativeHandle_, multiplier);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setTargetFileSizeMultiplier(
|
|
|
|
long handle, int multiplier);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The upper-bound of the total size of level-1 files in bytes.
|
|
|
|
* Maximum number of bytes for level L can be calculated as
|
|
|
|
* (maxBytesForLevelBase) * (maxBytesForLevelMultiplier ^ (L-1))
|
|
|
|
* For example, if maxBytesForLevelBase is 20MB, and if
|
|
|
|
* max_bytes_for_level_multiplier is 10, total data size for level-1
|
|
|
|
* will be 20MB, total file size for level-2 will be 200MB,
|
|
|
|
* and total file size for level-3 will be 2GB.
|
|
|
|
* by default 'maxBytesForLevelBase' is 10MB.
|
|
|
|
*
|
|
|
|
* @return the upper-bound of the total size of leve-1 files in bytes.
|
|
|
|
* @see maxBytesForLevelMultiplier()
|
|
|
|
*/
|
|
|
|
public long maxBytesForLevelBase() {
|
|
|
|
return maxBytesForLevelBase(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long maxBytesForLevelBase(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The upper-bound of the total size of level-1 files in bytes.
|
|
|
|
* Maximum number of bytes for level L can be calculated as
|
|
|
|
* (maxBytesForLevelBase) * (maxBytesForLevelMultiplier ^ (L-1))
|
|
|
|
* For example, if maxBytesForLevelBase is 20MB, and if
|
|
|
|
* max_bytes_for_level_multiplier is 10, total data size for level-1
|
|
|
|
* will be 20MB, total file size for level-2 will be 200MB,
|
|
|
|
* and total file size for level-3 will be 2GB.
|
|
|
|
* by default 'maxBytesForLevelBase' is 10MB.
|
|
|
|
*
|
|
|
|
* @return maxBytesForLevelBase the upper-bound of the total size of
|
|
|
|
* leve-1 files in bytes.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
* @see setMaxBytesForLevelMultiplier()
|
|
|
|
*/
|
|
|
|
public Options setMaxBytesForLevelBase(long maxBytesForLevelBase) {
|
|
|
|
setMaxBytesForLevelBase(nativeHandle_, maxBytesForLevelBase);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxBytesForLevelBase(
|
|
|
|
long handle, long maxBytesForLevelBase);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The ratio between the total size of level-(L+1) files and the total
|
|
|
|
* size of level-L files for all L.
|
|
|
|
* DEFAULT: 10
|
|
|
|
*
|
|
|
|
* @return the ratio between the total size of level-(L+1) files and
|
|
|
|
* the total size of level-L files for all L.
|
|
|
|
* @see maxBytesForLevelBase()
|
|
|
|
*/
|
|
|
|
public int maxBytesForLevelMultiplier() {
|
|
|
|
return maxBytesForLevelMultiplier(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int maxBytesForLevelMultiplier(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The ratio between the total size of level-(L+1) files and the total
|
|
|
|
* size of level-L files for all L.
|
|
|
|
* DEFAULT: 10
|
|
|
|
*
|
|
|
|
* @param multiplier the ratio between the total size of level-(L+1)
|
|
|
|
* files and the total size of level-L files for all L.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
* @see setMaxBytesForLevelBase()
|
|
|
|
*/
|
|
|
|
public Options setMaxBytesForLevelMultiplier(int multiplier) {
|
|
|
|
setMaxBytesForLevelMultiplier(nativeHandle_, multiplier);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxBytesForLevelMultiplier(
|
|
|
|
long handle, int multiplier);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of bytes in all compacted files. We avoid expanding
|
|
|
|
* the lower level file set of a compaction if it would make the
|
|
|
|
* total compaction cover more than
|
|
|
|
* (expanded_compaction_factor * targetFileSizeLevel()) many bytes.
|
|
|
|
*
|
|
|
|
* @return the maximum number of bytes in all compacted files.
|
|
|
|
* @see sourceCompactionFactor()
|
|
|
|
*/
|
|
|
|
public int expandedCompactionFactor() {
|
|
|
|
return expandedCompactionFactor(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int expandedCompactionFactor(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of bytes in all compacted files. We avoid expanding
|
|
|
|
* the lower level file set of a compaction if it would make the
|
|
|
|
* total compaction cover more than
|
|
|
|
* (expanded_compaction_factor * targetFileSizeLevel()) many bytes.
|
|
|
|
*
|
|
|
|
* @param expandedCompactionFactor the maximum number of bytes in all
|
|
|
|
* compacted files.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
* @see setSourceCompactionFactor()
|
|
|
|
*/
|
|
|
|
public Options setExpandedCompactionFactor(int expandedCompactionFactor) {
|
|
|
|
setExpandedCompactionFactor(nativeHandle_, expandedCompactionFactor);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setExpandedCompactionFactor(
|
|
|
|
long handle, int expandedCompactionFactor);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of bytes in all source files to be compacted in a
|
|
|
|
* single compaction run. We avoid picking too many files in the
|
|
|
|
* source level so that we do not exceed the total source bytes
|
|
|
|
* for compaction to exceed
|
|
|
|
* (source_compaction_factor * targetFileSizeLevel()) many bytes.
|
|
|
|
* Default:1, i.e. pick maxfilesize amount of data as the source of
|
|
|
|
* a compaction.
|
|
|
|
*
|
|
|
|
* @return the maximum number of bytes in all source files to be compactedo.
|
|
|
|
* @see expendedCompactionFactor()
|
|
|
|
*/
|
|
|
|
public int sourceCompactionFactor() {
|
|
|
|
return sourceCompactionFactor(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int sourceCompactionFactor(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of bytes in all source files to be compacted in a
|
|
|
|
* single compaction run. We avoid picking too many files in the
|
|
|
|
* source level so that we do not exceed the total source bytes
|
|
|
|
* for compaction to exceed
|
|
|
|
* (source_compaction_factor * targetFileSizeLevel()) many bytes.
|
|
|
|
* Default:1, i.e. pick maxfilesize amount of data as the source of
|
|
|
|
* a compaction.
|
|
|
|
*
|
|
|
|
* @param sourceCompactionFactor the maximum number of bytes in all
|
|
|
|
* source files to be compacted in a single compaction run.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
* @see setExpendedCompactionFactor()
|
|
|
|
*/
|
|
|
|
public Options setSourceCompactionFactor(int sourceCompactionFactor) {
|
|
|
|
setSourceCompactionFactor(nativeHandle_, sourceCompactionFactor);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setSourceCompactionFactor(
|
|
|
|
long handle, int sourceCompactionFactor);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Control maximum bytes of overlaps in grandparent (i.e., level+2) before we
|
|
|
|
* stop building a single file in a level->level+1 compaction.
|
|
|
|
*
|
|
|
|
* @return maximum bytes of overlaps in "grandparent" level.
|
|
|
|
*/
|
|
|
|
public int maxGrandparentOverlapFactor() {
|
|
|
|
return maxGrandparentOverlapFactor(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int maxGrandparentOverlapFactor(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Control maximum bytes of overlaps in grandparent (i.e., level+2) before we
|
|
|
|
* stop building a single file in a level->level+1 compaction.
|
|
|
|
*
|
|
|
|
* @param maxGrandparentOverlapFactor maximum bytes of overlaps in
|
|
|
|
* "grandparent" level.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxGrandparentOverlapFactor(
|
|
|
|
int maxGrandparentOverlapFactor) {
|
|
|
|
setMaxGrandparentOverlapFactor(nativeHandle_, maxGrandparentOverlapFactor);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxGrandparentOverlapFactor(
|
|
|
|
long handle, int maxGrandparentOverlapFactor);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Puts are delayed 0-1 ms when any level has a compaction score that exceeds
|
|
|
|
* soft_rate_limit. This is ignored when == 0.0.
|
|
|
|
* CONSTRAINT: soft_rate_limit <= hard_rate_limit. If this constraint does not
|
|
|
|
* hold, RocksDB will set soft_rate_limit = hard_rate_limit
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @return soft-rate-limit for put delay.
|
|
|
|
*/
|
|
|
|
public double softRateLimit() {
|
|
|
|
return softRateLimit(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native double softRateLimit(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Puts are delayed 0-1 ms when any level has a compaction score that exceeds
|
|
|
|
* soft_rate_limit. This is ignored when == 0.0.
|
|
|
|
* CONSTRAINT: soft_rate_limit <= hard_rate_limit. If this constraint does not
|
|
|
|
* hold, RocksDB will set soft_rate_limit = hard_rate_limit
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @param softRateLimit the soft-rate-limit of a compaction score
|
|
|
|
* for put delay.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setSoftRateLimit(double softRateLimit) {
|
|
|
|
setSoftRateLimit(nativeHandle_, softRateLimit);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setSoftRateLimit(
|
|
|
|
long handle, double softRateLimit);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Puts are delayed 1ms at a time when any level has a compaction score that
|
|
|
|
* exceeds hard_rate_limit. This is ignored when <= 1.0.
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @return the hard-rate-limit of a compaction score for put delay.
|
|
|
|
*/
|
|
|
|
public double hardRateLimit() {
|
|
|
|
return hardRateLimit(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native double hardRateLimit(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Puts are delayed 1ms at a time when any level has a compaction score that
|
|
|
|
* exceeds hard_rate_limit. This is ignored when <= 1.0.
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @param hardRateLimit the hard-rate-limit of a compaction score for put
|
|
|
|
* delay.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setHardRateLimit(double hardRateLimit) {
|
|
|
|
setHardRateLimit(nativeHandle_, hardRateLimit);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setHardRateLimit(
|
|
|
|
long handle, double hardRateLimit);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The maximum time interval a put will be stalled when hard_rate_limit
|
|
|
|
* is enforced. If 0, then there is no limit.
|
|
|
|
* Default: 1000
|
|
|
|
*
|
|
|
|
* @return the maximum time interval a put will be stalled when
|
|
|
|
* hard_rate_limit is enforced.
|
|
|
|
*/
|
|
|
|
public int rateLimitDelayMaxMilliseconds() {
|
|
|
|
return rateLimitDelayMaxMilliseconds(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int rateLimitDelayMaxMilliseconds(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The maximum time interval a put will be stalled when hard_rate_limit
|
|
|
|
* is enforced. If 0, then there is no limit.
|
|
|
|
* Default: 1000
|
|
|
|
*
|
|
|
|
* @param rateLimitDelayMaxMilliseconds the maximum time interval a put
|
|
|
|
* will be stalled.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setRateLimitDelayMaxMilliseconds(
|
|
|
|
int rateLimitDelayMaxMilliseconds) {
|
|
|
|
setRateLimitDelayMaxMilliseconds(
|
|
|
|
nativeHandle_, rateLimitDelayMaxMilliseconds);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setRateLimitDelayMaxMilliseconds(
|
|
|
|
long handle, int rateLimitDelayMaxMilliseconds);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The size of one block in arena memory allocation.
|
|
|
|
* If <= 0, a proper value is automatically calculated (usually 1/10 of
|
|
|
|
* writer_buffer_size).
|
|
|
|
*
|
|
|
|
* There are two additonal restriction of the The specified size:
|
|
|
|
* (1) size should be in the range of [4096, 2 << 30] and
|
|
|
|
* (2) be the multiple of the CPU word (which helps with the memory
|
|
|
|
* alignment).
|
|
|
|
*
|
|
|
|
* We'll automatically check and adjust the size number to make sure it
|
|
|
|
* conforms to the restrictions.
|
|
|
|
* Default: 0
|
|
|
|
*
|
|
|
|
* @return the size of an arena block
|
|
|
|
*/
|
|
|
|
public long arenaBlockSize() {
|
|
|
|
return arenaBlockSize(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long arenaBlockSize(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The size of one block in arena memory allocation.
|
|
|
|
* If <= 0, a proper value is automatically calculated (usually 1/10 of
|
|
|
|
* writer_buffer_size).
|
|
|
|
*
|
|
|
|
* There are two additonal restriction of the The specified size:
|
|
|
|
* (1) size should be in the range of [4096, 2 << 30] and
|
|
|
|
* (2) be the multiple of the CPU word (which helps with the memory
|
|
|
|
* alignment).
|
|
|
|
*
|
|
|
|
* We'll automatically check and adjust the size number to make sure it
|
|
|
|
* conforms to the restrictions.
|
|
|
|
* Default: 0
|
|
|
|
*
|
|
|
|
* @param arenaBlockSize the size of an arena block
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setArenaBlockSize(long arenaBlockSize) {
|
|
|
|
setArenaBlockSize(nativeHandle_, arenaBlockSize);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setArenaBlockSize(
|
|
|
|
long handle, long arenaBlockSize);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Disable automatic compactions. Manual compactions can still
|
|
|
|
* be issued on this column family
|
|
|
|
*
|
|
|
|
* @return true if auto-compactions are disabled.
|
|
|
|
*/
|
|
|
|
public boolean disableAutoCompactions() {
|
|
|
|
return disableAutoCompactions(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean disableAutoCompactions(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Disable automatic compactions. Manual compactions can still
|
|
|
|
* be issued on this column family
|
|
|
|
*
|
|
|
|
* @param disableAutoCompactions true if auto-compactions are disabled.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setDisableAutoCompactions(boolean disableAutoCompactions) {
|
|
|
|
setDisableAutoCompactions(nativeHandle_, disableAutoCompactions);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setDisableAutoCompactions(
|
|
|
|
long handle, boolean disableAutoCompactions);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Purge duplicate/deleted keys when a memtable is flushed to storage.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @return true if purging keys is disabled.
|
|
|
|
*/
|
|
|
|
public boolean purgeRedundantKvsWhileFlush() {
|
|
|
|
return purgeRedundantKvsWhileFlush(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean purgeRedundantKvsWhileFlush(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Purge duplicate/deleted keys when a memtable is flushed to storage.
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @param purgeRedundantKvsWhileFlush true if purging keys is disabled.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setPurgeRedundantKvsWhileFlush(
|
|
|
|
boolean purgeRedundantKvsWhileFlush) {
|
|
|
|
setPurgeRedundantKvsWhileFlush(
|
|
|
|
nativeHandle_, purgeRedundantKvsWhileFlush);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setPurgeRedundantKvsWhileFlush(
|
|
|
|
long handle, boolean purgeRedundantKvsWhileFlush);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, compaction will verify checksum on every read that happens
|
|
|
|
* as part of compaction
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @return true if compaction verifies checksum on every read.
|
|
|
|
*/
|
|
|
|
public boolean verifyChecksumsInCompaction() {
|
|
|
|
return verifyChecksumsInCompaction(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean verifyChecksumsInCompaction(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, compaction will verify checksum on every read that happens
|
|
|
|
* as part of compaction
|
|
|
|
* Default: true
|
|
|
|
*
|
|
|
|
* @param verifyChecksumsInCompaction true if compaction verifies
|
|
|
|
* checksum on every read.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setVerifyChecksumsInCompaction(
|
|
|
|
boolean verifyChecksumsInCompaction) {
|
|
|
|
setVerifyChecksumsInCompaction(
|
|
|
|
nativeHandle_, verifyChecksumsInCompaction);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setVerifyChecksumsInCompaction(
|
|
|
|
long handle, boolean verifyChecksumsInCompaction);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use KeyMayExist API to filter deletes when this is true.
|
|
|
|
* If KeyMayExist returns false, i.e. the key definitely does not exist, then
|
|
|
|
* the delete is a noop. KeyMayExist only incurs in-memory look up.
|
|
|
|
* This optimization avoids writing the delete to storage when appropriate.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @return true if filter-deletes behavior is on.
|
|
|
|
*/
|
|
|
|
public boolean filterDeletes() {
|
|
|
|
return filterDeletes(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean filterDeletes(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use KeyMayExist API to filter deletes when this is true.
|
|
|
|
* If KeyMayExist returns false, i.e. the key definitely does not exist, then
|
|
|
|
* the delete is a noop. KeyMayExist only incurs in-memory look up.
|
|
|
|
* This optimization avoids writing the delete to storage when appropriate.
|
|
|
|
* Default: false
|
|
|
|
*
|
|
|
|
* @param filterDeletes true if filter-deletes behavior is on.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setFilterDeletes(boolean filterDeletes) {
|
|
|
|
setFilterDeletes(nativeHandle_, filterDeletes);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setFilterDeletes(
|
|
|
|
long handle, boolean filterDeletes);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* An iteration->Next() sequentially skips over keys with the same
|
|
|
|
* user-key unless this option is set. This number specifies the number
|
|
|
|
* of keys (with the same userkey) that will be sequentially
|
|
|
|
* skipped before a reseek is issued.
|
|
|
|
* Default: 8
|
|
|
|
*
|
|
|
|
* @return the number of keys could be skipped in a iteration.
|
|
|
|
*/
|
|
|
|
public long maxSequentialSkipInIterations() {
|
|
|
|
return maxSequentialSkipInIterations(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long maxSequentialSkipInIterations(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* An iteration->Next() sequentially skips over keys with the same
|
|
|
|
* user-key unless this option is set. This number specifies the number
|
|
|
|
* of keys (with the same userkey) that will be sequentially
|
|
|
|
* skipped before a reseek is issued.
|
|
|
|
* Default: 8
|
|
|
|
*
|
|
|
|
* @param maxSequentialSkipInIterations the number of keys could
|
|
|
|
* be skipped in a iteration.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxSequentialSkipInIterations(long maxSequentialSkipInIterations) {
|
|
|
|
setMaxSequentialSkipInIterations(nativeHandle_, maxSequentialSkipInIterations);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxSequentialSkipInIterations(
|
|
|
|
long handle, long maxSequentialSkipInIterations);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allows thread-safe inplace updates.
|
|
|
|
* If inplace_callback function is not set,
|
|
|
|
* Put(key, new_value) will update inplace the existing_value iff
|
|
|
|
* * key exists in current memtable
|
|
|
|
* * new sizeof(new_value) <= sizeof(existing_value)
|
|
|
|
* * existing_value for that key is a put i.e. kTypeValue
|
|
|
|
* If inplace_callback function is set, check doc for inplace_callback.
|
|
|
|
* Default: false.
|
|
|
|
*
|
|
|
|
* @return true if thread-safe inplace updates are allowed.
|
|
|
|
*/
|
|
|
|
public boolean inplaceUpdateSupport() {
|
|
|
|
return inplaceUpdateSupport(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native boolean inplaceUpdateSupport(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allows thread-safe inplace updates.
|
|
|
|
* If inplace_callback function is not set,
|
|
|
|
* Put(key, new_value) will update inplace the existing_value iff
|
|
|
|
* * key exists in current memtable
|
|
|
|
* * new sizeof(new_value) <= sizeof(existing_value)
|
|
|
|
* * existing_value for that key is a put i.e. kTypeValue
|
|
|
|
* If inplace_callback function is set, check doc for inplace_callback.
|
|
|
|
* Default: false.
|
|
|
|
*
|
|
|
|
* @param inplaceUpdateSupport true if thread-safe inplace updates
|
|
|
|
* are allowed.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setInplaceUpdateSupport(boolean inplaceUpdateSupport) {
|
|
|
|
setInplaceUpdateSupport(nativeHandle_, inplaceUpdateSupport);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setInplaceUpdateSupport(
|
|
|
|
long handle, boolean inplaceUpdateSupport);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of locks used for inplace update
|
|
|
|
* Default: 10000, if inplace_update_support = true, else 0.
|
|
|
|
*
|
|
|
|
* @return the number of locks used for inplace update.
|
|
|
|
*/
|
|
|
|
public long inplaceUpdateNumLocks() {
|
|
|
|
return inplaceUpdateNumLocks(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long inplaceUpdateNumLocks(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of locks used for inplace update
|
|
|
|
* Default: 10000, if inplace_update_support = true, else 0.
|
|
|
|
*
|
|
|
|
* @param inplaceUpdateNumLocks the number of locks used for
|
|
|
|
* inplace updates.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setInplaceUpdateNumLocks(long inplaceUpdateNumLocks) {
|
|
|
|
setInplaceUpdateNumLocks(nativeHandle_, inplaceUpdateNumLocks);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setInplaceUpdateNumLocks(
|
|
|
|
long handle, long inplaceUpdateNumLocks);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the number of bits used in the prefix bloom filter.
|
|
|
|
*
|
|
|
|
* This value will be used only when a prefix-extractor is specified.
|
|
|
|
*
|
|
|
|
* @return the number of bloom-bits.
|
|
|
|
* @see useFixedLengthPrefixExtractor()
|
|
|
|
*/
|
|
|
|
public int memtablePrefixBloomBits() {
|
|
|
|
return memtablePrefixBloomBits(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int memtablePrefixBloomBits(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the number of bits used in the prefix bloom filter.
|
|
|
|
*
|
|
|
|
* This value will be used only when a prefix-extractor is specified.
|
|
|
|
*
|
|
|
|
* @param memtablePrefixBloomBits the number of bits used in the
|
|
|
|
* prefix bloom filter.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMemtablePrefixBloomBits(int memtablePrefixBloomBits) {
|
|
|
|
setMemtablePrefixBloomBits(nativeHandle_, memtablePrefixBloomBits);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMemtablePrefixBloomBits(
|
|
|
|
long handle, int memtablePrefixBloomBits);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of hash probes per key used in the mem-table.
|
|
|
|
*
|
|
|
|
* @return the number of hash probes per key.
|
|
|
|
*/
|
|
|
|
public int memtablePrefixBloomProbes() {
|
|
|
|
return memtablePrefixBloomProbes(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int memtablePrefixBloomProbes(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of hash probes per key used in the mem-table.
|
|
|
|
*
|
|
|
|
* @param memtablePrefixBloomProbes the number of hash probes per key.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMemtablePrefixBloomProbes(int memtablePrefixBloomProbes) {
|
|
|
|
setMemtablePrefixBloomProbes(nativeHandle_, memtablePrefixBloomProbes);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMemtablePrefixBloomProbes(
|
|
|
|
long handle, int memtablePrefixBloomProbes);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Control locality of bloom filter probes to improve cache miss rate.
|
|
|
|
* This option only applies to memtable prefix bloom and plaintable
|
|
|
|
* prefix bloom. It essentially limits the max number of cache lines each
|
|
|
|
* bloom filter check can touch.
|
|
|
|
* This optimization is turned off when set to 0. The number should never
|
|
|
|
* be greater than number of probes. This option can boost performance
|
|
|
|
* for in-memory workload but should use with care since it can cause
|
|
|
|
* higher false positive rate.
|
|
|
|
* Default: 0
|
|
|
|
*
|
|
|
|
* @return the level of locality of bloom-filter probes.
|
|
|
|
* @see setMemTablePrefixBloomProbes
|
|
|
|
*/
|
|
|
|
public int bloomLocality() {
|
|
|
|
return bloomLocality(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int bloomLocality(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Control locality of bloom filter probes to improve cache miss rate.
|
|
|
|
* This option only applies to memtable prefix bloom and plaintable
|
|
|
|
* prefix bloom. It essentially limits the max number of cache lines each
|
|
|
|
* bloom filter check can touch.
|
|
|
|
* This optimization is turned off when set to 0. The number should never
|
|
|
|
* be greater than number of probes. This option can boost performance
|
|
|
|
* for in-memory workload but should use with care since it can cause
|
|
|
|
* higher false positive rate.
|
|
|
|
* Default: 0
|
|
|
|
*
|
|
|
|
* @param bloomLocality the level of locality of bloom-filter probes.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setBloomLocality(int bloomLocality) {
|
|
|
|
setBloomLocality(nativeHandle_, bloomLocality);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setBloomLocality(
|
|
|
|
long handle, int bloomLocality);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of successive merge operations on a key in the memtable.
|
|
|
|
*
|
|
|
|
* When a merge operation is added to the memtable and the maximum number of
|
|
|
|
* successive merges is reached, the value of the key will be calculated and
|
|
|
|
* inserted into the memtable instead of the merge operation. This will
|
|
|
|
* ensure that there are never more than max_successive_merges merge
|
|
|
|
* operations in the memtable.
|
|
|
|
*
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @return the maximum number of successive merges.
|
|
|
|
*/
|
|
|
|
public long maxSuccessiveMerges() {
|
|
|
|
return maxSuccessiveMerges(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native long maxSuccessiveMerges(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Maximum number of successive merge operations on a key in the memtable.
|
|
|
|
*
|
|
|
|
* When a merge operation is added to the memtable and the maximum number of
|
|
|
|
* successive merges is reached, the value of the key will be calculated and
|
|
|
|
* inserted into the memtable instead of the merge operation. This will
|
|
|
|
* ensure that there are never more than max_successive_merges merge
|
|
|
|
* operations in the memtable.
|
|
|
|
*
|
|
|
|
* Default: 0 (disabled)
|
|
|
|
*
|
|
|
|
* @param maxSuccessiveMerges the maximum number of successive merges.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMaxSuccessiveMerges(long maxSuccessiveMerges) {
|
|
|
|
setMaxSuccessiveMerges(nativeHandle_, maxSuccessiveMerges);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMaxSuccessiveMerges(
|
|
|
|
long handle, long maxSuccessiveMerges);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The minimum number of write buffers that will be merged together
|
|
|
|
* before writing to storage. If set to 1, then
|
|
|
|
* all write buffers are fushed to L0 as individual files and this increases
|
|
|
|
* read amplification because a get request has to check in all of these
|
|
|
|
* files. Also, an in-memory merge may result in writing lesser
|
|
|
|
* data to storage if there are duplicate records in each of these
|
|
|
|
* individual write buffers. Default: 1
|
|
|
|
*
|
|
|
|
* @return the minimum number of write buffers that will be merged together.
|
|
|
|
*/
|
|
|
|
public int minWriteBufferNumberToMerge() {
|
|
|
|
return minWriteBufferNumberToMerge(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int minWriteBufferNumberToMerge(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The minimum number of write buffers that will be merged together
|
|
|
|
* before writing to storage. If set to 1, then
|
|
|
|
* all write buffers are fushed to L0 as individual files and this increases
|
|
|
|
* read amplification because a get request has to check in all of these
|
|
|
|
* files. Also, an in-memory merge may result in writing lesser
|
|
|
|
* data to storage if there are duplicate records in each of these
|
|
|
|
* individual write buffers. Default: 1
|
|
|
|
*
|
|
|
|
* @param minWriteBufferNumberToMerge the minimum number of write buffers
|
|
|
|
* that will be merged together.
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMinWriteBufferNumberToMerge(int minWriteBufferNumberToMerge) {
|
|
|
|
setMinWriteBufferNumberToMerge(nativeHandle_, minWriteBufferNumberToMerge);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMinWriteBufferNumberToMerge(
|
|
|
|
long handle, int minWriteBufferNumberToMerge);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of partial merge operands to accumulate before partial
|
|
|
|
* merge will be performed. Partial merge will not be called
|
|
|
|
* if the list of values to merge is less than min_partial_merge_operands.
|
|
|
|
*
|
|
|
|
* If min_partial_merge_operands < 2, then it will be treated as 2.
|
|
|
|
*
|
|
|
|
* Default: 2
|
|
|
|
*
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public int minPartialMergeOperands() {
|
|
|
|
return minPartialMergeOperands(nativeHandle_);
|
|
|
|
}
|
|
|
|
private native int minPartialMergeOperands(long handle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of partial merge operands to accumulate before partial
|
|
|
|
* merge will be performed. Partial merge will not be called
|
|
|
|
* if the list of values to merge is less than min_partial_merge_operands.
|
|
|
|
*
|
|
|
|
* If min_partial_merge_operands < 2, then it will be treated as 2.
|
|
|
|
*
|
|
|
|
* Default: 2
|
|
|
|
*
|
|
|
|
* @param minPartialMergeOperands
|
|
|
|
* @return the reference to the current option.
|
|
|
|
*/
|
|
|
|
public Options setMinPartialMergeOperands(int minPartialMergeOperands) {
|
|
|
|
setMinPartialMergeOperands(nativeHandle_, minPartialMergeOperands);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private native void setMinPartialMergeOperands(
|
|
|
|
long handle, int minPartialMergeOperands);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Release the memory allocated for the current instance
|
|
|
|
* in the c++ side.
|
|
|
|
*/
|
[Java] Generalize dis-own native handle and refine dispose framework.
Summary:
1. Move disOwnNativeHandle() function from RocksDB to RocksObject
to allow other RocksObject to use disOwnNativeHandle() when its
ownership of native handle has been transferred.
2. RocksObject now has an abstract implementation of dispose(),
which does the following two things. First, it checks whether
both isOwningNativeHandle() and isInitialized() return true.
If so, it will call the protected abstract function dispose0(),
which all the subclasses of RocksObject should implement. Second,
it sets nativeHandle_ = 0. This redesign ensure all subclasses
of RocksObject have the same dispose behavior.
3. All subclasses of RocksObject now should implement dispose0()
instead of dispose(), and dispose0() will be called only when
isInitialized() returns true.
Test Plan:
make rocksdbjava
make jtest
Reviewers: dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett, haobo
Reviewed By: haobo
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D18801
11 years ago
|
|
|
@Override protected void disposeInternal() {
|
|
|
|
assert(isInitialized());
|
|
|
|
disposeInternal(nativeHandle_);
|
|
|
|
}
|
|
|
|
|
|
|
|
static final int DEFAULT_PLAIN_TABLE_BLOOM_BITS_PER_KEY = 10;
|
|
|
|
static final double DEFAULT_PLAIN_TABLE_HASH_TABLE_RATIO = 0.75;
|
|
|
|
static final int DEFAULT_PLAIN_TABLE_INDEX_SPARSENESS = 16;
|
|
|
|
|
|
|
|
private native void newOptions();
|
[Java] Generalize dis-own native handle and refine dispose framework.
Summary:
1. Move disOwnNativeHandle() function from RocksDB to RocksObject
to allow other RocksObject to use disOwnNativeHandle() when its
ownership of native handle has been transferred.
2. RocksObject now has an abstract implementation of dispose(),
which does the following two things. First, it checks whether
both isOwningNativeHandle() and isInitialized() return true.
If so, it will call the protected abstract function dispose0(),
which all the subclasses of RocksObject should implement. Second,
it sets nativeHandle_ = 0. This redesign ensure all subclasses
of RocksObject have the same dispose behavior.
3. All subclasses of RocksObject now should implement dispose0()
instead of dispose(), and dispose0() will be called only when
isInitialized() returns true.
Test Plan:
make rocksdbjava
make jtest
Reviewers: dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett, haobo
Reviewed By: haobo
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D18801
11 years ago
|
|
|
private native void disposeInternal(long handle);
|
|
|
|
private native void setCreateIfMissing(long handle, boolean flag);
|
|
|
|
private native boolean createIfMissing(long handle);
|
|
|
|
private native void setWriteBufferSize(long handle, long writeBufferSize);
|
|
|
|
private native long writeBufferSize(long handle);
|
|
|
|
private native void setMaxWriteBufferNumber(
|
|
|
|
long handle, int maxWriteBufferNumber);
|
|
|
|
private native int maxWriteBufferNumber(long handle);
|
|
|
|
private native void setMaxBackgroundCompactions(
|
|
|
|
long handle, int maxBackgroundCompactions);
|
|
|
|
private native int maxBackgroundCompactions(long handle);
|
|
|
|
private native void createStatistics(long optHandle);
|
|
|
|
private native long statisticsPtr(long optHandle);
|
|
|
|
|
|
|
|
private native void setMemTableFactory(long handle, long factoryHandle);
|
|
|
|
private native void setRateLimiter(long handle,
|
|
|
|
long rateLimiterHandle);
|
|
|
|
private native String memTableFactoryName(long handle);
|
|
|
|
|
|
|
|
private native void setTableFactory(long handle, long factoryHandle);
|
|
|
|
private native String tableFactoryName(long handle);
|
|
|
|
|
|
|
|
private native void useFixedLengthPrefixExtractor(
|
|
|
|
long handle, int prefixLength);
|
|
|
|
|
|
|
|
long cacheSize_;
|
|
|
|
int numShardBits_;
|
|
|
|
RocksEnv env_;
|
|
|
|
}
|