Unverified Commit fa83ff19 authored by JAYICE's avatar JAYICE Committed by GitHub

Reduce boxing in callback (#671)

* reduce extra boxing
close https://github.com/tikv/rust-rocksdb/issues/513Signed-off-by: 's avatarJayice <1185430411@qq.com>

* rename generic
close https://github.com/tikv/rust-rocksdb/issues/513Signed-off-by: 's avatarJayice <1185430411@qq.com>

* format code
close https://github.com/tikv/rust-rocksdb/issues/513Signed-off-by: 's avatarJayice <1185430411@qq.com>
parent 035db162
This diff is collapsed.
...@@ -1387,20 +1387,17 @@ impl ColumnFamilyOptions { ...@@ -1387,20 +1387,17 @@ impl ColumnFamilyOptions {
/// recent call to GetSnapshot() to filter. /// recent call to GetSnapshot() to filter.
/// ///
/// See also `CompactionFilter`. /// See also `CompactionFilter`.
pub fn set_compaction_filter<S>( pub fn set_compaction_filter<S, C>(&mut self, name: S, filter: C) -> Result<(), String>
&mut self,
name: S,
filter: Box<dyn CompactionFilter>,
) -> Result<(), String>
where where
S: Into<Vec<u8>>, S: Into<Vec<u8>>,
C: CompactionFilter,
{ {
unsafe { unsafe {
let c_name = match CString::new(name) { let c_name = match CString::new(name) {
Ok(s) => s, Ok(s) => s,
Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)), Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)),
}; };
let filter = new_compaction_filter(c_name, filter); let filter = new_compaction_filter::<C>(c_name, filter);
crocksdb_ffi::crocksdb_options_set_compaction_filter(self.inner, filter.inner); crocksdb_ffi::crocksdb_options_set_compaction_filter(self.inner, filter.inner);
self.filter = Some(filter); self.filter = Some(filter);
Ok(()) Ok(())
...@@ -1410,20 +1407,17 @@ impl ColumnFamilyOptions { ...@@ -1410,20 +1407,17 @@ impl ColumnFamilyOptions {
/// Set compaction filter factory. /// Set compaction filter factory.
/// ///
/// See also `CompactionFilterFactory`. /// See also `CompactionFilterFactory`.
pub fn set_compaction_filter_factory<S>( pub fn set_compaction_filter_factory<S, C>(&mut self, name: S, factory: C) -> Result<(), String>
&mut self,
name: S,
factory: Box<dyn CompactionFilterFactory>,
) -> Result<(), String>
where where
S: Into<Vec<u8>>, S: Into<Vec<u8>>,
C: CompactionFilterFactory,
{ {
let c_name = match CString::new(name) { let c_name = match CString::new(name) {
Ok(s) => s, Ok(s) => s,
Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)), Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)),
}; };
unsafe { unsafe {
let factory = new_compaction_filter_factory(c_name, factory)?; let factory = new_compaction_filter_factory::<C>(c_name, factory)?;
crocksdb_ffi::crocksdb_options_set_compaction_filter_factory(self.inner, factory.inner); crocksdb_ffi::crocksdb_options_set_compaction_filter_factory(self.inner, factory.inner);
std::mem::forget(factory); // Deconstructor will be called after `self` is dropped. std::mem::forget(factory); // Deconstructor will be called after `self` is dropped.
Ok(()) Ok(())
...@@ -1789,20 +1783,17 @@ impl ColumnFamilyOptions { ...@@ -1789,20 +1783,17 @@ impl ColumnFamilyOptions {
unsafe { crocksdb_ffi::crocksdb_options_get_num_levels(self.inner) as usize } unsafe { crocksdb_ffi::crocksdb_options_get_num_levels(self.inner) as usize }
} }
pub fn set_prefix_extractor<S>( pub fn set_prefix_extractor<S, ST>(&mut self, name: S, transform: ST) -> Result<(), String>
&mut self,
name: S,
transform: Box<dyn SliceTransform>,
) -> Result<(), String>
where where
S: Into<Vec<u8>>, S: Into<Vec<u8>>,
ST: SliceTransform,
{ {
unsafe { unsafe {
let c_name = match CString::new(name) { let c_name = match CString::new(name) {
Ok(s) => s, Ok(s) => s,
Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)), Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)),
}; };
let transform = new_slice_transform(c_name, transform)?; let transform = new_slice_transform::<ST>(c_name, transform)?;
crocksdb_ffi::crocksdb_options_set_prefix_extractor(self.inner, transform); crocksdb_ffi::crocksdb_options_set_prefix_extractor(self.inner, transform);
Ok(()) Ok(())
} }
...@@ -1814,20 +1805,21 @@ impl ColumnFamilyOptions { ...@@ -1814,20 +1805,21 @@ impl ColumnFamilyOptions {
} }
} }
pub fn set_memtable_insert_hint_prefix_extractor<S>( pub fn set_memtable_insert_hint_prefix_extractor<S, ST>(
&mut self, &mut self,
name: S, name: S,
transform: Box<dyn SliceTransform>, transform: ST,
) -> Result<(), String> ) -> Result<(), String>
where where
S: Into<Vec<u8>>, S: Into<Vec<u8>>,
ST: SliceTransform,
{ {
unsafe { unsafe {
let c_name = match CString::new(name) { let c_name = match CString::new(name) {
Ok(s) => s, Ok(s) => s,
Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)), Err(e) => return Err(format!("failed to convert to cstring: {:?}", e)),
}; };
let transform = new_slice_transform(c_name, transform)?; let transform = new_slice_transform::<ST>(c_name, transform)?;
crocksdb_ffi::crocksdb_options_set_memtable_insert_with_hint_prefix_extractor( crocksdb_ffi::crocksdb_options_set_memtable_insert_with_hint_prefix_extractor(
self.inner, transform, self.inner, transform,
); );
......
...@@ -16,7 +16,7 @@ use libc::{c_char, c_void, size_t}; ...@@ -16,7 +16,7 @@ use libc::{c_char, c_void, size_t};
use std::ffi::CString; use std::ffi::CString;
use std::slice; use std::slice;
// `SliceTranform` is a generic pluggable way of transforming one string // `SliceTransform` is a generic pluggable way of transforming one string
// mainly used for prefix blooms. // mainly used for prefix blooms.
pub trait SliceTransform { pub trait SliceTransform {
// Extract a prefix from a specified key // Extract a prefix from a specified key
...@@ -38,29 +38,29 @@ pub trait SliceTransform { ...@@ -38,29 +38,29 @@ pub trait SliceTransform {
} }
#[repr(C)] #[repr(C)]
pub struct SliceTransformProxy { pub struct SliceTransformProxy<S: SliceTransform> {
name: CString, name: CString,
transform: Box<dyn SliceTransform>, transform: S,
} }
extern "C" fn name(transform: *mut c_void) -> *const c_char { extern "C" fn name<S: SliceTransform>(transform: *mut c_void) -> *const c_char {
unsafe { (*(transform as *mut SliceTransformProxy)).name.as_ptr() } unsafe { (*(transform as *mut SliceTransformProxy<S>)).name.as_ptr() }
} }
extern "C" fn destructor(transform: *mut c_void) { extern "C" fn destructor<S: SliceTransform>(transform: *mut c_void) {
unsafe { unsafe {
Box::from_raw(transform as *mut SliceTransformProxy); Box::from_raw(transform as *mut SliceTransformProxy<S>);
} }
} }
extern "C" fn transform( extern "C" fn transform<S: SliceTransform>(
transform: *mut c_void, transform: *mut c_void,
key: *const u8, key: *const u8,
key_len: size_t, key_len: size_t,
dest_len: *mut size_t, dest_len: *mut size_t,
) -> *const u8 { ) -> *const u8 {
unsafe { unsafe {
let transform = &mut *(transform as *mut SliceTransformProxy); let transform = &mut *(transform as *mut SliceTransformProxy<S>);
let key = slice::from_raw_parts(key, key_len); let key = slice::from_raw_parts(key, key_len);
let prefix = transform.transform.transform(key); let prefix = transform.transform.transform(key);
*dest_len = prefix.len() as size_t; *dest_len = prefix.len() as size_t;
...@@ -68,25 +68,33 @@ extern "C" fn transform( ...@@ -68,25 +68,33 @@ extern "C" fn transform(
} }
} }
extern "C" fn in_domain(transform: *mut c_void, key: *const u8, key_len: size_t) -> u8 { extern "C" fn in_domain<S: SliceTransform>(
transform: *mut c_void,
key: *const u8,
key_len: size_t,
) -> u8 {
unsafe { unsafe {
let transform = &mut *(transform as *mut SliceTransformProxy); let transform = &mut *(transform as *mut SliceTransformProxy<S>);
let key = slice::from_raw_parts(key, key_len); let key = slice::from_raw_parts(key, key_len);
transform.transform.in_domain(key) as u8 transform.transform.in_domain(key) as u8
} }
} }
extern "C" fn in_range(transform: *mut c_void, key: *const u8, key_len: size_t) -> u8 { extern "C" fn in_range<S: SliceTransform>(
transform: *mut c_void,
key: *const u8,
key_len: size_t,
) -> u8 {
unsafe { unsafe {
let transform = &mut *(transform as *mut SliceTransformProxy); let transform = &mut *(transform as *mut SliceTransformProxy<S>);
let key = slice::from_raw_parts(key, key_len); let key = slice::from_raw_parts(key, key_len);
transform.transform.in_range(key) as u8 transform.transform.in_range(key) as u8
} }
} }
pub unsafe fn new_slice_transform( pub unsafe fn new_slice_transform<S: SliceTransform>(
c_name: CString, c_name: CString,
f: Box<dyn SliceTransform>, f: S,
) -> Result<*mut DBSliceTransform, String> { ) -> Result<*mut DBSliceTransform, String> {
let proxy = Box::into_raw(Box::new(SliceTransformProxy { let proxy = Box::into_raw(Box::new(SliceTransformProxy {
name: c_name, name: c_name,
...@@ -94,11 +102,11 @@ pub unsafe fn new_slice_transform( ...@@ -94,11 +102,11 @@ pub unsafe fn new_slice_transform(
})); }));
let transform = crocksdb_ffi::crocksdb_slicetransform_create( let transform = crocksdb_ffi::crocksdb_slicetransform_create(
proxy as *mut c_void, proxy as *mut c_void,
destructor, destructor::<S>,
transform, transform::<S>,
in_domain, in_domain::<S>,
in_range, in_range::<S>,
name, name::<S>,
); );
Ok(transform) Ok(transform)
} }
...@@ -55,12 +55,12 @@ fn test_compaction_filter() { ...@@ -55,12 +55,12 @@ fn test_compaction_filter() {
// reregister with ignore_snapshots set to true // reregister with ignore_snapshots set to true
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
cf_opts cf_opts
.set_compaction_filter( .set_compaction_filter::<&str, Filter>(
"test", "test",
Box::new(Filter { Filter {
drop_called: drop_called.clone(), drop_called: drop_called.clone(),
filtered_kvs: filtered_kvs.clone(), filtered_kvs: filtered_kvs.clone(),
}), },
) )
.unwrap(); .unwrap();
......
...@@ -639,9 +639,9 @@ fn test_delete_range_prefix_bloom_case_1() { ...@@ -639,9 +639,9 @@ fn test_delete_range_prefix_bloom_case_1() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -714,9 +714,9 @@ fn test_delete_range_prefix_bloom_case_2() { ...@@ -714,9 +714,9 @@ fn test_delete_range_prefix_bloom_case_2() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -770,9 +770,9 @@ fn test_delete_range_prefix_bloom_case_2() { ...@@ -770,9 +770,9 @@ fn test_delete_range_prefix_bloom_case_2() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -807,9 +807,9 @@ fn test_delete_range_prefix_bloom_case_3() { ...@@ -807,9 +807,9 @@ fn test_delete_range_prefix_bloom_case_3() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -852,9 +852,9 @@ fn test_delete_range_prefix_bloom_case_3() { ...@@ -852,9 +852,9 @@ fn test_delete_range_prefix_bloom_case_3() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -903,9 +903,9 @@ fn test_delete_range_prefix_bloom_case_4() { ...@@ -903,9 +903,9 @@ fn test_delete_range_prefix_bloom_case_4() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -948,9 +948,9 @@ fn test_delete_range_prefix_bloom_case_4() { ...@@ -948,9 +948,9 @@ fn test_delete_range_prefix_bloom_case_4() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -1000,9 +1000,9 @@ fn test_delete_range_prefix_bloom_case_5() { ...@@ -1000,9 +1000,9 @@ fn test_delete_range_prefix_bloom_case_5() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -1043,9 +1043,9 @@ fn test_delete_range_prefix_bloom_case_5() { ...@@ -1043,9 +1043,9 @@ fn test_delete_range_prefix_bloom_case_5() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -1092,9 +1092,9 @@ fn test_delete_range_prefix_bloom_case_6() { ...@@ -1092,9 +1092,9 @@ fn test_delete_range_prefix_bloom_case_6() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -1137,9 +1137,9 @@ fn test_delete_range_prefix_bloom_case_6() { ...@@ -1137,9 +1137,9 @@ fn test_delete_range_prefix_bloom_case_6() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -1210,9 +1210,9 @@ fn test_delete_range_prefix_bloom_compact_case() { ...@@ -1210,9 +1210,9 @@ fn test_delete_range_prefix_bloom_compact_case() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
...@@ -1255,9 +1255,9 @@ fn test_delete_range_prefix_bloom_compact_case() { ...@@ -1255,9 +1255,9 @@ fn test_delete_range_prefix_bloom_compact_case() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
// Prefix extractor(trim the timestamp at tail) for write cf. // Prefix extractor(trim the timestamp at tail) for write cf.
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixSliceTransform>(
"FixedSuffixSliceTransform", "FixedSuffixSliceTransform",
Box::new(FixedSuffixSliceTransform::new(3)), FixedSuffixSliceTransform::new(3),
) )
.unwrap_or_else(|err| panic!(format!("{:?}", err))); .unwrap_or_else(|err| panic!(format!("{:?}", err)));
// Create prefix bloom filter for memtable. // Create prefix bloom filter for memtable.
......
...@@ -295,9 +295,9 @@ fn test_total_order_seek() { ...@@ -295,9 +295,9 @@ fn test_total_order_seek() {
opts.create_if_missing(true); opts.create_if_missing(true);
cf_opts.set_block_based_table_factory(&bbto); cf_opts.set_block_based_table_factory(&bbto);
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedPrefixTransform>(
"FixedPrefixTransform", "FixedPrefixTransform",
Box::new(FixedPrefixTransform { prefix_len: 2 }), FixedPrefixTransform { prefix_len: 2 },
) )
.unwrap(); .unwrap();
// also create prefix bloom for memtable // also create prefix bloom for memtable
...@@ -383,9 +383,9 @@ fn test_fixed_suffix_seek() { ...@@ -383,9 +383,9 @@ fn test_fixed_suffix_seek() {
opts.create_if_missing(true); opts.create_if_missing(true);
cf_opts.set_block_based_table_factory(&bbto); cf_opts.set_block_based_table_factory(&bbto);
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedSuffixTransform>(
"FixedSuffixTransform", "FixedSuffixTransform",
Box::new(FixedSuffixTransform { suffix_len: 2 }), FixedSuffixTransform { suffix_len: 2 },
) )
.unwrap(); .unwrap();
...@@ -428,7 +428,7 @@ fn test_iter_sequence_number() { ...@@ -428,7 +428,7 @@ fn test_iter_sequence_number() {
} }
} }
let (tx, rx) = mpsc::sync_channel(8); let (tx, rx) = mpsc::sync_channel(8);
let filter = Box::new(TestCompactionFilter(tx)); let filter = TestCompactionFilter(tx);
let path = tempdir_with_prefix("_rust_rocksdb_sequence_number"); let path = tempdir_with_prefix("_rust_rocksdb_sequence_number");
let mut opts = DBOptions::new(); let mut opts = DBOptions::new();
...@@ -436,7 +436,9 @@ fn test_iter_sequence_number() { ...@@ -436,7 +436,9 @@ fn test_iter_sequence_number() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
cf_opts.set_disable_auto_compactions(true); cf_opts.set_disable_auto_compactions(true);
cf_opts.set_num_levels(7); cf_opts.set_num_levels(7);
cf_opts.set_compaction_filter("test", filter).unwrap(); cf_opts
.set_compaction_filter::<&str, TestCompactionFilter>("test", filter)
.unwrap();
let db = DB::open_cf( let db = DB::open_cf(
opts, opts,
path.path().to_str().unwrap(), path.path().to_str().unwrap(),
......
...@@ -60,9 +60,9 @@ fn test_prefix_extractor_compatibility() { ...@@ -60,9 +60,9 @@ fn test_prefix_extractor_compatibility() {
opts.create_if_missing(false); opts.create_if_missing(false);
cf_opts.set_block_based_table_factory(&bbto); cf_opts.set_block_based_table_factory(&bbto);
cf_opts cf_opts
.set_prefix_extractor( .set_prefix_extractor::<&str, FixedPrefixTransform>(
"FixedPrefixTransform", "FixedPrefixTransform",
Box::new(FixedPrefixTransform { prefix_len: 2 }), FixedPrefixTransform { prefix_len: 2 },
) )
.unwrap(); .unwrap();
// also create prefix bloom for memtable // also create prefix bloom for memtable
......
...@@ -124,9 +124,9 @@ fn test_memtable_insert_hint_prefix_extractor() { ...@@ -124,9 +124,9 @@ fn test_memtable_insert_hint_prefix_extractor() {
let mut cf_opts = ColumnFamilyOptions::new(); let mut cf_opts = ColumnFamilyOptions::new();
opts.create_if_missing(true); opts.create_if_missing(true);
cf_opts cf_opts
.set_memtable_insert_hint_prefix_extractor( .set_memtable_insert_hint_prefix_extractor::<&str, FixedPrefixTransform>(
"FixedPrefixTransform", "FixedPrefixTransform",
Box::new(FixedPrefixTransform { prefix_len: 2 }), FixedPrefixTransform { prefix_len: 2 },
) )
.unwrap(); .unwrap();
let db = DB::open_cf( let db = DB::open_cf(
......
...@@ -46,7 +46,10 @@ fn test_slice_transform() { ...@@ -46,7 +46,10 @@ fn test_slice_transform() {
cf_opts.set_memtable_prefix_bloom_size_ratio(0.25); cf_opts.set_memtable_prefix_bloom_size_ratio(0.25);
cf_opts cf_opts
.set_prefix_extractor("test", Box::new(FixedPostfixTransform { postfix_len: 2 })) .set_prefix_extractor::<&str, FixedPostfixTransform>(
"test",
FixedPostfixTransform { postfix_len: 2 },
)
.unwrap(); .unwrap();
opts.create_if_missing(true); opts.create_if_missing(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