Commit 9129309a authored by Wallace's avatar Wallace Committed by yiwu-arbug

Cherry-Pick Doubly-SkipList (#339)

Signed-off-by: Little-Wallace liuwei@pingcap.com

Cherry-Pick pingcap#338 to master
parent cfcb93fb
...@@ -2646,6 +2646,13 @@ void crocksdb_options_set_memtable_huge_page_size(crocksdb_options_t* opt, ...@@ -2646,6 +2646,13 @@ void crocksdb_options_set_memtable_huge_page_size(crocksdb_options_t* opt,
size_t v) { size_t v) {
opt->rep.memtable_huge_page_size = v; opt->rep.memtable_huge_page_size = v;
} }
const char* crocksdb_options_get_memtable_factory_name(
crocksdb_options_t *opt) {
if (!opt->rep.memtable_factory) {
return nullptr;
}
return opt->rep.memtable_factory->Name();
}
void crocksdb_options_set_hash_skip_list_rep( void crocksdb_options_set_hash_skip_list_rep(
crocksdb_options_t *opt, size_t bucket_count, crocksdb_options_t *opt, size_t bucket_count,
...@@ -2660,6 +2667,11 @@ void crocksdb_options_set_hash_link_list_rep( ...@@ -2660,6 +2667,11 @@ void crocksdb_options_set_hash_link_list_rep(
opt->rep.memtable_factory.reset(rocksdb::NewHashLinkListRepFactory(bucket_count)); opt->rep.memtable_factory.reset(rocksdb::NewHashLinkListRepFactory(bucket_count));
} }
void crocksdb_options_set_doubly_skip_list_rep(crocksdb_options_t *opt) {
rocksdb::MemTableRepFactory* factory = new rocksdb::DoublySkipListFactory();
opt->rep.memtable_factory.reset(factory);
}
void crocksdb_options_set_plain_table_factory( void crocksdb_options_set_plain_table_factory(
crocksdb_options_t *opt, uint32_t user_key_len, int bloom_bits_per_key, crocksdb_options_t *opt, uint32_t user_key_len, int bloom_bits_per_key,
double hash_table_ratio, size_t index_sparseness) { double hash_table_ratio, size_t index_sparseness) {
......
...@@ -1033,6 +1033,7 @@ crocksdb_options_set_delete_obsolete_files_period_micros(crocksdb_options_t*, ...@@ -1033,6 +1033,7 @@ crocksdb_options_set_delete_obsolete_files_period_micros(crocksdb_options_t*,
uint64_t); uint64_t);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_prepare_for_bulk_load( extern C_ROCKSDB_LIBRARY_API void crocksdb_options_prepare_for_bulk_load(
crocksdb_options_t*); crocksdb_options_t*);
extern C_ROCKSDB_LIBRARY_API const char* crocksdb_options_get_memtable_factory_name(crocksdb_options_t *opt);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_memtable_vector_rep( extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_memtable_vector_rep(
crocksdb_options_t*); crocksdb_options_t*);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_memtable_prefix_bloom_size_ratio( extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_memtable_prefix_bloom_size_ratio(
...@@ -1043,6 +1044,7 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_hash_skip_list_rep( ...@@ -1043,6 +1044,7 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_hash_skip_list_rep(
crocksdb_options_t*, size_t, int32_t, int32_t); crocksdb_options_t*, size_t, int32_t, int32_t);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_hash_link_list_rep( extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_hash_link_list_rep(
crocksdb_options_t*, size_t); crocksdb_options_t*, size_t);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_doubly_skip_list_rep(crocksdb_options_t *opt);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_plain_table_factory( extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_plain_table_factory(
crocksdb_options_t*, uint32_t, int, double, size_t); crocksdb_options_t*, uint32_t, int, double, size_t);
......
Subproject commit 862b680230647774c6825d6278de22d68a0be909 Subproject commit a29144f8e992c36f429d74603c43cb22fbead616
...@@ -507,12 +507,14 @@ extern "C" { ...@@ -507,12 +507,14 @@ extern "C" {
pub fn crocksdb_options_set_keep_log_file_num(options: *mut Options, num: size_t); pub fn crocksdb_options_set_keep_log_file_num(options: *mut Options, num: size_t);
pub fn crocksdb_options_set_recycle_log_file_num(options: *mut Options, num: size_t); pub fn crocksdb_options_set_recycle_log_file_num(options: *mut Options, num: size_t);
pub fn crocksdb_options_set_max_manifest_file_size(options: *mut Options, bytes: u64); pub fn crocksdb_options_set_max_manifest_file_size(options: *mut Options, bytes: u64);
pub fn crocksdb_options_get_memtable_factory_name(options: *mut Options) -> *const c_char;
pub fn crocksdb_options_set_hash_skip_list_rep( pub fn crocksdb_options_set_hash_skip_list_rep(
options: *mut Options, options: *mut Options,
bytes: u64, bytes: u64,
a1: i32, a1: i32,
a2: i32, a2: i32,
); );
pub fn crocksdb_options_set_doubly_skip_list_rep(options: *mut Options);
pub fn crocksdb_options_set_compaction_style(options: *mut Options, cs: DBCompactionStyle); pub fn crocksdb_options_set_compaction_style(options: *mut Options, cs: DBCompactionStyle);
pub fn crocksdb_options_set_fifo_compaction_options( pub fn crocksdb_options_set_fifo_compaction_options(
options: *mut Options, options: *mut Options,
......
...@@ -34,6 +34,7 @@ use std::ffi::{CStr, CString}; ...@@ -34,6 +34,7 @@ use std::ffi::{CStr, CString};
use std::mem; use std::mem;
use std::path::Path; use std::path::Path;
use std::ptr; use std::ptr;
use std::ptr::null;
use std::sync::Arc; use std::sync::Arc;
use table_filter::{destroy_table_filter, table_filter, TableFilter}; use table_filter::{destroy_table_filter, table_filter, TableFilter};
use table_properties_collector_factory::{ use table_properties_collector_factory::{
...@@ -1065,6 +1066,23 @@ impl DBOptions { ...@@ -1065,6 +1066,23 @@ impl DBOptions {
crocksdb_ffi::crocksdb_options_set_paranoid_checks(self.inner, enable as u8); crocksdb_ffi::crocksdb_options_set_paranoid_checks(self.inner, enable as u8);
} }
} }
pub fn set_doubly_skiplist(&self) {
unsafe {
crocksdb_ffi::crocksdb_options_set_doubly_skip_list_rep(self.inner);
}
}
pub fn get_memtable_name(&self) -> Option<&str> {
unsafe {
let memtable_name =
crocksdb_ffi::crocksdb_options_get_memtable_factory_name(self.inner);
if memtable_name.is_null() {
return None;
}
Some(CStr::from_ptr(memtable_name).to_str().unwrap())
}
}
} }
pub struct ColumnFamilyOptions { pub struct ColumnFamilyOptions {
...@@ -1550,6 +1568,23 @@ impl ColumnFamilyOptions { ...@@ -1550,6 +1568,23 @@ impl ColumnFamilyOptions {
crocksdb_ffi::crocksdb_options_set_vector_memtable_factory(self.inner, reserved_bytes); crocksdb_ffi::crocksdb_options_set_vector_memtable_factory(self.inner, reserved_bytes);
} }
} }
pub fn set_doubly_skiplist(&self) {
unsafe {
crocksdb_ffi::crocksdb_options_set_doubly_skip_list_rep(self.inner);
}
}
pub fn get_memtable_factory_name(&self) -> Option<&str> {
unsafe {
let memtable_name =
crocksdb_ffi::crocksdb_options_get_memtable_factory_name(self.inner);
if memtable_name.is_null() {
return None;
}
Some(CStr::from_ptr(memtable_name).to_str().unwrap())
}
}
} }
// ColumnFamilyDescriptor is a pair of column family's name and options. // ColumnFamilyDescriptor is a pair of column family's name and options.
......
...@@ -147,3 +147,14 @@ fn test_provided_merge( ...@@ -147,3 +147,14 @@ fn test_provided_merge(
} }
result result
} }
#[test]
pub fn test_column_family_option_use_doubly_skiplist() {
let mut cf_opts = ColumnFamilyOptions::new();
let memtable_name = cf_opts.get_memtable_factory_name();
assert!(memtable_name.is_some());
assert_eq!("SkipListFactory", memtable_name.unwrap());
cf_opts.set_doubly_skiplist();
let memtable_name = cf_opts.get_memtable_factory_name();
assert_eq!("DoublySkipListFactory", memtable_name.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