Commit ee4c6ebb authored by Dylan Wen's avatar Dylan Wen Committed by siddontang

add constructor for sst file writer (#43)

parent c92d8f39
...@@ -2482,6 +2482,14 @@ crocksdb_envoptions_t* crocksdb_envoptions_create() { ...@@ -2482,6 +2482,14 @@ crocksdb_envoptions_t* crocksdb_envoptions_create() {
void crocksdb_envoptions_destroy(crocksdb_envoptions_t* opt) { delete opt; } void crocksdb_envoptions_destroy(crocksdb_envoptions_t* opt) { delete opt; }
crocksdb_sstfilewriter_t* crocksdb_sstfilewriter_create( crocksdb_sstfilewriter_t* crocksdb_sstfilewriter_create(
const crocksdb_envoptions_t* env, const crocksdb_options_t* io_options) {
crocksdb_sstfilewriter_t* writer = new crocksdb_sstfilewriter_t;
writer->rep =
new SstFileWriter(env->rep, io_options->rep, io_options->rep.comparator);
return writer;
}
crocksdb_sstfilewriter_t* crocksdb_sstfilewriter_create_cf(
const crocksdb_envoptions_t* env, const crocksdb_options_t* io_options, const crocksdb_envoptions_t* env, const crocksdb_options_t* io_options,
crocksdb_column_family_handle_t* column_family) { crocksdb_column_family_handle_t* column_family) {
crocksdb_sstfilewriter_t* writer = new crocksdb_sstfilewriter_t; crocksdb_sstfilewriter_t* writer = new crocksdb_sstfilewriter_t;
......
...@@ -994,6 +994,9 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_envoptions_destroy( ...@@ -994,6 +994,9 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_envoptions_destroy(
extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilewriter_t* extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilewriter_t*
crocksdb_sstfilewriter_create(const crocksdb_envoptions_t* env, crocksdb_sstfilewriter_create(const crocksdb_envoptions_t* env,
const crocksdb_options_t* io_options);
extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilewriter_t*
crocksdb_sstfilewriter_create_cf(const crocksdb_envoptions_t* env,
const crocksdb_options_t* io_options, const crocksdb_options_t* io_options,
crocksdb_column_family_handle_t* column_family); crocksdb_column_family_handle_t* column_family);
extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilewriter_t* extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilewriter_t*
......
...@@ -663,6 +663,9 @@ extern "C" { ...@@ -663,6 +663,9 @@ extern "C" {
// SstFileWriter // SstFileWriter
pub fn crocksdb_sstfilewriter_create(env: *mut EnvOptions, pub fn crocksdb_sstfilewriter_create(env: *mut EnvOptions,
io_options: *const DBOptions)
-> *mut SstFileWriter;
pub fn crocksdb_sstfilewriter_create_cf(env: *mut EnvOptions,
io_options: *const DBOptions, io_options: *const DBOptions,
cf: *mut DBCFHandle) cf: *mut DBCFHandle)
-> *mut SstFileWriter; -> *mut SstFileWriter;
......
...@@ -1343,10 +1343,18 @@ pub struct SstFileWriter { ...@@ -1343,10 +1343,18 @@ pub struct SstFileWriter {
unsafe impl Send for SstFileWriter {} unsafe impl Send for SstFileWriter {}
impl SstFileWriter { impl SstFileWriter {
pub fn new(env_opt: &EnvOptions, opt: &Options, cf: &CFHandle) -> SstFileWriter { pub fn new(env_opt: &EnvOptions, opt: &Options) -> SstFileWriter {
unsafe { unsafe {
SstFileWriter { SstFileWriter {
inner: crocksdb_ffi::crocksdb_sstfilewriter_create(env_opt.inner, inner: crocksdb_ffi::crocksdb_sstfilewriter_create(env_opt.inner, opt.inner),
}
}
}
pub fn new_cf(env_opt: &EnvOptions, opt: &Options, cf: &CFHandle) -> SstFileWriter {
unsafe {
SstFileWriter {
inner: crocksdb_ffi::crocksdb_sstfilewriter_create_cf(env_opt.inner,
opt.inner, opt.inner,
cf.inner), cf.inner),
} }
...@@ -1802,7 +1810,8 @@ mod test { ...@@ -1802,7 +1810,8 @@ mod test {
} }
db.flush_cf(cf_handle, true).unwrap(); db.flush_cf(cf_handle, true).unwrap();
let total_sst_files_size = db.get_property_int_cf(cf_handle, "rocksdb.total-sst-files-size").unwrap(); let total_sst_files_size = db.get_property_int_cf(cf_handle, "rocksdb.total-sst-files-size")
.unwrap();
assert!(total_sst_files_size > 0); assert!(total_sst_files_size > 0);
} }
} }
...@@ -16,10 +16,14 @@ use rocksdb::*; ...@@ -16,10 +16,14 @@ use rocksdb::*;
use std::fs; use std::fs;
use tempdir::TempDir; use tempdir::TempDir;
fn gen_sst(opt: &Options, cf: &CFHandle, path: &str, data: &[(&[u8], &[u8])]) { fn gen_sst(opt: &Options, cf: Option<&CFHandle>, path: &str, data: &[(&[u8], &[u8])]) {
let _ = fs::remove_file(path); let _ = fs::remove_file(path);
let env_opt = EnvOptions::new(); let env_opt = EnvOptions::new();
let mut writer = SstFileWriter::new(&env_opt, opt, cf); let mut writer = if cf.is_some() {
SstFileWriter::new_cf(&env_opt, opt, cf.unwrap())
} else {
SstFileWriter::new(&env_opt, opt)
};
writer.open(path).unwrap(); writer.open(path).unwrap();
for &(k, v) in data { for &(k, v) in data {
writer.add(k, v).unwrap(); writer.add(k, v).unwrap();
...@@ -45,7 +49,7 @@ fn test_ingest_external_file() { ...@@ -45,7 +49,7 @@ fn test_ingest_external_file() {
let default_options = db.get_options(); let default_options = db.get_options();
gen_sst(&default_options, gen_sst(&default_options,
db.cf_handle("default").unwrap(), Some(db.cf_handle("default").unwrap()),
test_sstfile_str, test_sstfile_str,
&[(b"k1", b"v1"), (b"k2", b"v2")]); &[(b"k1", b"v1"), (b"k2", b"v2")]);
...@@ -56,7 +60,7 @@ fn test_ingest_external_file() { ...@@ -56,7 +60,7 @@ fn test_ingest_external_file() {
assert_eq!(db.get(b"k2").unwrap().unwrap(), b"v2"); assert_eq!(db.get(b"k2").unwrap().unwrap(), b"v2");
gen_sst(&cf_opts, gen_sst(&cf_opts,
handle, None,
test_sstfile_str, test_sstfile_str,
&[(b"k1", b"v3"), (b"k2", b"v4")]); &[(b"k1", b"v3"), (b"k2", b"v4")]);
db.ingest_external_file_cf(handle, &ingest_opt, &[test_sstfile_str]).unwrap(); db.ingest_external_file_cf(handle, &ingest_opt, &[test_sstfile_str]).unwrap();
...@@ -66,7 +70,7 @@ fn test_ingest_external_file() { ...@@ -66,7 +70,7 @@ fn test_ingest_external_file() {
let snap = db.snapshot(); let snap = db.snapshot();
gen_sst(&default_options, gen_sst(&default_options,
handle, None,
test_sstfile_str, test_sstfile_str,
&[(b"k2", b"v5"), (b"k3", b"v6")]); &[(b"k2", b"v5"), (b"k3", b"v6")]);
ingest_opt = ingest_opt.move_files(true); ingest_opt = ingest_opt.move_files(true);
......
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