Commit f375f9ce authored by zhangjinpeng1987's avatar zhangjinpeng1987 Committed by Huachao Huang

set_env for DBOptions (#246)

* set_env for DBOptions
Signed-off-by: 's avatarzhangjinpeng1987 <zhangjinpeng@pingcap.com>
parent 05aaf93f
...@@ -547,6 +547,7 @@ impl Drop for CompactionOptions { ...@@ -547,6 +547,7 @@ impl Drop for CompactionOptions {
pub struct DBOptions { pub struct DBOptions {
pub inner: *mut Options, pub inner: *mut Options,
env: Option<Arc<Env>>,
} }
impl Drop for DBOptions { impl Drop for DBOptions {
...@@ -562,7 +563,10 @@ impl Default for DBOptions { ...@@ -562,7 +563,10 @@ impl Default for DBOptions {
unsafe { unsafe {
let opts = crocksdb_ffi::crocksdb_options_create(); let opts = crocksdb_ffi::crocksdb_options_create();
assert!(!opts.is_null(), "Could not create rocksdb db options"); assert!(!opts.is_null(), "Could not create rocksdb db options");
DBOptions { inner: opts } DBOptions {
inner: opts,
env: None,
}
} }
} }
} }
...@@ -572,7 +576,10 @@ impl Clone for DBOptions { ...@@ -572,7 +576,10 @@ impl Clone for DBOptions {
unsafe { unsafe {
let opts = crocksdb_ffi::crocksdb_options_copy(self.inner); let opts = crocksdb_ffi::crocksdb_options_copy(self.inner);
assert!(!opts.is_null()); assert!(!opts.is_null());
DBOptions { inner: opts } DBOptions {
inner: opts,
env: self.env.clone(),
}
} }
} }
} }
...@@ -583,7 +590,10 @@ impl DBOptions { ...@@ -583,7 +590,10 @@ impl DBOptions {
} }
pub unsafe fn from_raw(inner: *mut Options) -> DBOptions { pub unsafe fn from_raw(inner: *mut Options) -> DBOptions {
DBOptions { inner: inner } DBOptions {
inner: inner,
env: None,
}
} }
pub fn increase_parallelism(&mut self, parallelism: i32) { pub fn increase_parallelism(&mut self, parallelism: i32) {
...@@ -603,6 +613,13 @@ impl DBOptions { ...@@ -603,6 +613,13 @@ impl DBOptions {
} }
} }
pub fn set_env(&mut self, env: Arc<Env>) {
unsafe {
crocksdb_ffi::crocksdb_options_set_env(self.inner, env.inner);
self.env = Some(env);
}
}
pub fn set_max_open_files(&mut self, nfiles: c_int) { pub fn set_max_open_files(&mut self, nfiles: c_int) {
unsafe { unsafe {
crocksdb_ffi::crocksdb_options_set_max_open_files(self.inner, nfiles); crocksdb_ffi::crocksdb_options_set_max_open_files(self.inner, nfiles);
......
...@@ -16,10 +16,11 @@ use rocksdb::crocksdb_ffi::{ ...@@ -16,10 +16,11 @@ use rocksdb::crocksdb_ffi::{
DBStatisticsHistogramType as HistogramType, DBStatisticsTickerType as TickerType, DBStatisticsHistogramType as HistogramType, DBStatisticsTickerType as TickerType,
}; };
use rocksdb::{ use rocksdb::{
BlockBasedOptions, ColumnFamilyOptions, CompactOptions, DBOptions, FifoCompactionOptions, BlockBasedOptions, ColumnFamilyOptions, CompactOptions, DBOptions, Env, FifoCompactionOptions,
ReadOptions, SeekKey, SliceTransform, Writable, WriteOptions, DB, ReadOptions, SeekKey, SliceTransform, Writable, WriteOptions, DB,
}; };
use std::path::Path; use std::path::Path;
use std::sync::Arc;
use std::thread; use std::thread;
use std::time::Duration; use std::time::Duration;
use tempdir::TempDir; use tempdir::TempDir;
...@@ -730,3 +731,14 @@ fn test_vector_memtable_factory_options() { ...@@ -730,3 +731,14 @@ fn test_vector_memtable_factory_options() {
assert!(!iter.next()); assert!(!iter.next());
assert!(!iter.valid()); assert!(!iter.valid());
} }
#[test]
fn test_dboptions_set_env() {
let path = TempDir::new("_rust_rocksdb_dboptions_set_env").unwrap();
let path_str = path.path().to_str().unwrap();
let mut opts = DBOptions::new();
opts.create_if_missing(true);
opts.set_env(Arc::new(Env::default()));
let _db = DB::open(opts, path_str).unwrap();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment