Implement support for DirectIO

As per: 972f96b3fb
master
Karl Hobley 7 years ago committed by Richard Dodd
parent 87f802479d
commit 6b407a3486
  1. 3
      librocksdb-sys/src/lib.rs
  2. 54
      src/db_options.rs

@ -633,7 +633,8 @@ extern "C" {
pub fn rocksdb_options_set_purge_redundant_kvs_while_flush(opt: *mut rocksdb_options_t,
v: c_uchar);
pub fn rocksdb_options_set_allow_os_buffer(opt: *mut rocksdb_options_t, v: c_uchar);
pub fn rocksdb_options_set_use_direct_reads(opt: *mut rocksdb_options_t, v: c_uchar);
pub fn rocksdb_options_set_use_direct_writes(opt: *mut rocksdb_options_t, v: c_uchar);
pub fn rocksdb_options_set_allow_mmap_reads(opt: *mut rocksdb_options_t, v: c_uchar);

@ -351,6 +351,54 @@ impl Options {
unsafe { ffi::rocksdb_options_set_disable_data_sync(self.inner, disable as c_int) }
}
/// Enable direct I/O mode for reading
/// they may or may not improve performance depending on the use case
///
/// Files will be opened in "direct I/O" mode
/// which means that data read from the disk will not be cached or
/// buffered. The hardware buffer of the devices may however still
/// be used. Memory mapped files are not impacted by these parameters.
///
/// Default: false
///
/// # Example
///
/// ```
/// use rocksdb::Options;
///
/// let mut opts = Options::default();
/// opts.set_use_direct_reads(true);
/// ```
pub fn set_use_direct_reads(&mut self, enabled: bool) {
unsafe {
ffi::rocksdb_options_set_use_direct_reads(self.inner, enabled as c_uchar);
}
}
/// Enable direct I/O mode for writing
/// they may or may not improve performance depending on the use case
///
/// Files will be opened in "direct I/O" mode
/// which means that data written to the disk will not be cached or
/// buffered. The hardware buffer of the devices may however still
/// be used. Memory mapped files are not impacted by these parameters.
///
/// Default: false
///
/// # Example
///
/// ```
/// use rocksdb::Options;
///
/// let mut opts = Options::default();
/// opts.set_use_direct_writes(true);
/// ```
pub fn set_use_direct_writes(&mut self, enabled: bool) {
unsafe {
ffi::rocksdb_options_set_use_direct_writes(self.inner, enabled as c_uchar);
}
}
/// Hints to the OS that it should not buffer disk I/O. Enabling this
/// parameter may improve performance but increases pressure on the
/// system cache.
@ -378,10 +426,10 @@ impl Options {
/// let mut opts = Options::default();
/// opts.set_allow_os_buffer(false);
/// ```
#[deprecated(since="0.7.0", note="replaced with set_use_direct_reads/set_use_direct_writes methods")]
pub fn set_allow_os_buffer(&mut self, is_allow: bool) {
unsafe {
ffi::rocksdb_options_set_allow_os_buffer(self.inner, is_allow as c_uchar);
}
self.set_use_direct_reads(!is_allow);
self.set_use_direct_writes(!is_allow);
}
/// Sets the number of shards used for table cache.

Loading…
Cancel
Save