From ab347d2741bfd9df0789acaff95675bb587d7a9f Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Wed, 10 Mar 2021 20:17:55 +0800 Subject: [PATCH 01/52] Level Region Accessor interface that allows to compact by region size ratio --- librocksdb_sys/crocksdb/c.cc | 127 +++++++++++++++++++++++++++ librocksdb_sys/crocksdb/crocksdb/c.h | 51 +++++++++++ librocksdb_sys/src/lib.rs | 57 ++++++++++++ src/level_region_accessor.rs | 70 +++++++++++++++ src/lib.rs | 9 +- src/rocksdb_options.rs | 8 ++ 6 files changed, 320 insertions(+), 2 deletions(-) create mode 100644 src/level_region_accessor.rs diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index f079f8eaf..0ac0dd994 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -37,6 +37,7 @@ #include "rocksdb/sst_dump_tool.h" #include "rocksdb/sst_file_reader.h" #include "rocksdb/sst_partitioner.h" +#include "rocksdb/level_region_accessor.h" #include "rocksdb/statistics.h" #include "rocksdb/status.h" #include "rocksdb/table.h" @@ -118,6 +119,9 @@ using rocksdb::NewLRUCache; using rocksdb::Options; using rocksdb::PartitionerRequest; using rocksdb::PartitionerResult; +using rocksdb::AccessorRequest; +using rocksdb::AccessorResult; +using rocksdb::RegionBoundaries; using rocksdb::PinnableSlice; using rocksdb::RandomAccessFile; using rocksdb::Range; @@ -135,6 +139,7 @@ using rocksdb::SstFileReader; using rocksdb::SstFileWriter; using rocksdb::SstPartitioner; using rocksdb::SstPartitionerFactory; +using rocksdb::LevelRegionAccessor; using rocksdb::Status; using rocksdb::TableProperties; using rocksdb::TablePropertiesCollection; @@ -660,6 +665,20 @@ struct crocksdb_sst_partitioner_factory_t { std::shared_ptr rep; }; +struct crocksdb_level_region_accessor_t { + std::unique_ptr rep; +}; + +struct crocksdb_level_region_accessor_request_t { + AccessorRequest* rep; + Slice smallest_user_key; + Slice largest_user_key; +}; + +struct crocksdb_level_region_accessor_result_t { + AccessorResult rep; +}; + static bool SaveError(char** errptr, const Status& s) { assert(errptr != nullptr); if (s.ok()) { @@ -2526,6 +2545,19 @@ void crocksdb_options_set_sst_partitioner_factory( opt->rep.sst_partitioner_factory = factory->rep; } +crocksdb_level_region_accessor_t* +crocksdb_options_get_level_region_accessor(crocksdb_options_t* opt) { + crocksdb_level_region_accessor_t* accessor = + new crocksdb_level_region_accessor_t; + accessor->rep = opt->rep.level_region_accessor; + return accessor; +} + +void crocksdb_options_set_level_region_accessor( + crocksdb_options_t* opt, crocksdb_level_region_accessor_t* accessor) { + opt->rep.level_region_accessor = accessor->rep; +} + void crocksdb_options_enable_statistics(crocksdb_options_t* opt, unsigned char v) { if (v) { @@ -5914,6 +5946,101 @@ crocksdb_sst_partitioner_t* crocksdb_sst_partitioner_factory_create_partitioner( return partitioner; } +/* level region accessor */ + +crocksdb_level_region_accessor_request_t* crocksdb_level_region_accessor_request_create() { + auto* req = new crocksdb_level_region_accessor_request_t; + req->rep = + new AccessorRequest(req->smallest_user_key, req->largest_user_key); + return req; +} + +void crocksdb_level_region_accessor_request_destroy( + crocksdb_level_region_accessor_request_t* req) { + delete req->rep; + delete req; +} + +const char* crocksdb_level_region_accessor_request_smallest_user_key( + crocksdb_level_region_accessor_request_t* req, size_t* len) { + const Slice* smallest_key = req->rep->smallest_user_key; + *len = smallest_key->size(); + return smallest_key->data(); +} + +const char* crocksdb_level_region_accessor_request_largest_user_key( + crocksdb_level_region_accessor_request_t* req, size_t* len) { + const Slice* largest_key = req->rep->largest_user_key; + *len = largest_key->size(); + return largest_key->data(); +} + +void crocksdb_level_region_accessor_request_set_smallest_user_key( + crocksdb_level_region_accessor_request_t* req, const char* key, size_t len) { + req->smallest_user_key = Slice(key, len); + req->rep->smallest_user_key = &req->smallest_user_key; +} + +void crocksdb_level_region_accessor_request_set_largest_user_key( + crocksdb_level_region_accessor_request_t* req, const char* key, size_t len) { + req->largest_user_key = Slice(key, len); + req->rep->largest_user_key = &req->largest_user_key; +} + + +struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { + void* underlying; + void (*destructor)(void*); + crocksdb_level_region_accessor_name_cb name_cb; + crocksdb_level_region_accessor_level_regions_cb level_regions_cb; + + virtual ~crocksdb_level_region_accessor_impl_t() { destructor(underlying); } + + const char* Name() const override { return name_cb(underlying); } + + AccessorResult LevelRegions( + const AccessorRequest& request) const override { + crocksdb_level_region_accessor_request_t req; + req.rep = const_cast(&request); + return static_cast( + level_regions_cb(underlying, &req)); + } +}; + +crocksdb_level_region_accessor_t* crocksdb_level_region_accessor_create( + void* underlying, void (*destructor)(void*), + crocksdb_level_region_accessor_name_cb name_cb, + crocksdb_level_region_accessor_level_regions_cb + level_regions_cb) { + crocksdb_level_region_accessor_impl_t* accessor_impl = + new crocksdb_level_region_accessor_impl_t; + accessor_impl->underlying = underlying; + accessor_impl->destructor = destructor; + accessor_impl->name_cb = name_cb; + accessor_impl->level_regions_cb = level_regions_cb; + crocksdb_level_region_accessor_t* accessor = + new crocksdb_level_region_accessor__t; + accessor->rep.reset(accessor_impl); + return accessor; +} + +void crocksdb_level_region_accessor_destroy( + crocksdb_level_region_accessor_t* accessor) { + delete accessor; +} + +const char* crocksdb_level_region_accessor_name( + crocksdb_level_region_accessor_t* accessor) { + return accessor->rep->Name(); +} + +crocksdb_level_region_accessor_result_t crocksdb_level_region_accessor_level_regions( + crocksdb_level_region_accessor_t* accessor, + crocksdb_level_region_accessor_request_t* req) { + return static_cast( + accessor->rep->LevelRegions(*req->rep)); +} + /* Tools */ void crocksdb_run_ldb_tool(int argc, char** argv, diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index fd5296d7a..3fb5beedd 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -167,6 +167,12 @@ typedef struct crocksdb_sst_partitioner_context_t typedef struct crocksdb_sst_partitioner_factory_t crocksdb_sst_partitioner_factory_t; +typedef struct crocksdb_level_region_accessor_t crocksdb_level_region_accessor_t; +typedef struct crocksdb_level_region_accessor_request_t + crocksdb_level_region_accessor_request_t; +typedef struct crocksdb_level_region_accessor_result_t + crocksdb_level_region_accessor_result_t; + typedef enum crocksdb_table_property_t { kDataSize = 1, kIndexSize = 2, @@ -1022,6 +1028,10 @@ extern C_ROCKSDB_LIBRARY_API crocksdb_sst_partitioner_factory_t* crocksdb_options_get_sst_partitioner_factory(crocksdb_options_t*); extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_sst_partitioner_factory( crocksdb_options_t*, crocksdb_sst_partitioner_factory_t*); +extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_t* +crocksdb_options_get_level_region_accessor(crocksdb_options_t*); +extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_level_region_accessor( + crocksdb_options_t*, crocksdb_level_region_accessor_t*); extern C_ROCKSDB_LIBRARY_API void crocksdb_options_enable_statistics( crocksdb_options_t*, unsigned char); extern C_ROCKSDB_LIBRARY_API void crocksdb_options_reset_statistics( @@ -2351,6 +2361,47 @@ crocksdb_sst_partitioner_factory_create_partitioner( crocksdb_sst_partitioner_factory_t* factory, crocksdb_sst_partitioner_context_t* context); +/* Level Region Accessor */ + +extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_request_t* +crocksdb_level_region_accessor_request_create(); +extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_request_destroy( + crocksdb_level_region_accessor_request_t* req); +extern C_ROCKSDB_LIBRARY_API const char* +crocksdb_level_region_accessor_request_smallest_user_key( + crocksdb_level_region_accessor_request_t* req, size_t* len); +extern C_ROCKSDB_LIBRARY_API const char* +crocksdb_level_region_accessor_request_largest_user_key( + crocksdb_level_region_accessor_request_t* req, size_t* len); +extern C_ROCKSDB_LIBRARY_API void +crocksdb_level_region_accessor_req_set_smallest_user_key( + crocksdb_level_region_accessor_request_t* req, const char* key, size_t len); +extern C_ROCKSDB_LIBRARY_API void +crocksdb_level_region_accessor_req_set_largest_user_key( + crocksdb_level_region_accessor_request_t* req, const char* key, size_t len); + +typedef const char* (*crocksdb_level_region_accessor_name_cb)( + void* underlying); +typedef crocksdb_level_region_accessor_results_t ( + *crocksdb_level_region_accessor_level_regions_cb)( + void* underlying, crocksdb_level_region_accessor_requests_t* requests); + +extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_t* +crocksdb_level_region_accessor_create( + void* underlying, void (*destructor)(void*), + crocksdb_level_region_accessor_name_cb name_cb, + crocksdb_level_region_accessor_level_regions_cb + level_regions_cb); +extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_destroy( + crocksdb_sst_partitioner_factory_t* factory); +extern C_ROCKSDB_LIBRARY_API const char* crocksdb_level_region_accessor_name( + crocksdb_sst_partitioner_factory_t* factory); +extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_result_t +crocksdb_level_region_accessor_level_regions( + crocksdb_level_region_accessor_t* factory, + crocksdb_level_region_accessor_request_t* request); + + extern C_ROCKSDB_LIBRARY_API void crocksdb_run_ldb_tool( int argc, char** argv, const crocksdb_options_t* opts); extern C_ROCKSDB_LIBRARY_API void crocksdb_run_sst_dump_tool( diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index c087e241a..1785608a7 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -172,8 +172,19 @@ pub struct DBSstPartitionerContext(c_void); #[repr(C)] pub struct DBSstPartitionerFactory(c_void); #[repr(C)] +pub struct DBLevelRegionAccessor(c_void); +#[repr(C)] +pub struct DBLevelRegionAccessorRequest(c_void); +#[repr(C)] pub struct DBWriteBatchIterator(c_void); +#[derive(Clone, Debug, Default)] +#[repr(C)] +pub struct DBLevelRegionAccessorResult { + pub regions: RegionBoundaries, + pub region_count: u64, +} + #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[repr(C)] pub enum WriteStallCondition { @@ -847,6 +858,13 @@ extern "C" { option: *mut Options, factory: *mut DBSstPartitionerFactory, ); + pub fn crocksdb_options_get_level_region_accessor( + option: *mut Options, + ) -> *mut DBLevelRegionAccessor; + pub fn crocksdb_options_set_level_region_accessor( + option: *mut Options, + accessor: *mut DBLevelRegionAccessor, + ); pub fn crocksdb_filterpolicy_create_bloom_full(bits_per_key: c_int) -> *mut DBFilterPolicy; pub fn crocksdb_filterpolicy_create_bloom(bits_per_key: c_int) -> *mut DBFilterPolicy; pub fn crocksdb_open( @@ -2403,6 +2421,45 @@ extern "C" { context: *mut DBSstPartitionerContext, ) -> *mut DBSstPartitioner; + pub fn crocksdb_level_region_accessor_request_create() -> *mut DBLevelRegionAccessorRequest; + pub fn crocksdb_level_region_accessor_request_destroy(state: *mut DBLevelRegionAccessorRequest); + pub fn crocksdb_level_region_accessor_request_smallest_user_key( + state: *mut DBLevelRegionAccessorRequest, + len: *mut size_t, + ) -> *const c_char; + pub fn crocksdb_level_region_accessor_request_largest_user_key( + state: *mut DBLevelRegionAccessorRequest, + len: *mut size_t, + ) -> *const c_char; + pub fn crocksdb_level_region_accessor_request_set_smallest_user_key( + state: *mut DBLevelRegionAccessorRequest, + key: *const c_char, + len: size_t, + ); + pub fn crocksdb_level_region_accessor_request_set_largest_user_key( + state: *mut DBLevelRegionAccessorRequest, + key: *const c_char, + len: size_t, + ); + + pub fn crocksdb_level_region_accessor_create( + underlying: *mut c_void, + destructor: extern "C" fn(*mut c_void), + name_cb: extern "C" fn(*mut c_void) -> *const c_char, + level_regions_cb: extern "C" fn( + *mut c_void, + *mut DBLevelRegionAccessorRequest, + ) -> DBLevelRegionAccessorResult, + ) -> *mut DBLevelRegionAccessor; + pub fn crocksdb_level_region_accessor_destroy(accessor: *mut DBLevelRegionAccessor); + pub fn crocksdb_level_region_accessor_name( + accessor: *mut DBLevelRegionAccessor, + ) -> *const c_char; + pub fn crocksdb_level_region_accessor_level_regions( + accessor: *mut DBLevelRegionAccessor, + request: *mut DBLevelRegionAccessorRequest, + ) -> DBLevelRegionAccessorResult; + pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( argc: c_int, diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs new file mode 100644 index 000000000..78f25a134 --- /dev/null +++ b/src/level_region_accessor.rs @@ -0,0 +1,70 @@ +// Copyright 2020 TiKV Project Authors. Licensed under Apache-2.0. + +use super::LevelRegionAccessorResult; +use crocksdb_ffi::{ + self, DBLevelRegionAccessor, DBLevelRegionAccessorRequest, +}; +use libc::{c_char, c_uchar, c_void, size_t}; +use std::{ffi::CString, ptr, slice}; + +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct LevelRegionAccessorRequest<'a> { + pub smallest_user_key: &'a [u8], + pub largest_user_key: &'a [u8], +} + +pub trait LevelRegionAccessor { + fn name(&self) -> &Ctring; + fn level_regions(&self, req: &LevelRegionAccessorRequest) -> LevelRegionAccessorResult; +} + +extern "C" fn level_region_destructor(ctx: *mut c_void) { + unsafe { + // Recover from raw pointer and implicitly drop. + Box::from_raw(ctx as *mut P); + } +} + +extern "C" fn level_region_accessor_name( + ctx: *mut c_void, +) -> *const c_char { + let accessor = unsafe { &*(ctx as *mut A) }; + accessor.name().as_ptr() +} + +extern "C" fn level_region_accessor_level_regions( + ctx: *mut c_void, + request: *mut DBLevelRegionAccessorRequest, +) -> LevelRegionAccessorResult { + let accessor = unsafe { &*(ctx as *mut A) }; + let req = unsafe { + let mut smallest_key_len: usize = 0; + let smallest_key = crocksdb_ffi::crocksdb_level_region_accessor_request_smallest_user_key( + request, + &mut smallest_key_len, + ) as *const u8; + let mut largest_key_len: usize = 0; + let largest_key = crocksdb_ffi::crocksdb_level_region_accessor_request_largest_user_key( + request, + &mut largest_key_len, + ) as *const u8; + LevelRegionAccessorRequest { + smallest_user_key: slice::from_raw_parts(smallest_key, smallest_key_len), + largest_user_key: slice::from_raw_parts(largest_key, largest_key_len), + } + }; + accessor.level_regions(&req) as _ +} + +pub fn new_level_region_accessor( + accessor: A, +) -> *mut DBLevelRegionAccessor { + unsafe { + crocksdb_ffi::crocksdb_level_region_accessor_create( + Box::into_raw(Box::new(accessor)) as *mut c_void, + level_region_destructor::, + level_region_accessor_name::, + level_region_accessor_level_regions::, + ) + } +} diff --git a/src/lib.rs b/src/lib.rs index 2ba8c62df..2e359708f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -43,8 +43,9 @@ pub use librocksdb_sys::{ self as crocksdb_ffi, new_bloom_filter, CompactionPriority, CompactionReason, DBBackgroundErrorReason, DBBottommostLevelCompaction, DBCompactionStyle, DBCompressionType, DBEntryType, DBInfoLogLevel, DBRateLimiterMode, DBRecoveryMode, - DBSstPartitionerResult as SstPartitionerResult, DBStatisticsHistogramType, - DBStatisticsTickerType, DBStatusPtr, DBTitanDBBlobRunMode, IndexType, WriteStallCondition, + DBSstPartitionerResult as SstPartitionerResult, DBLevelRegionAccessorResult as LevelRegionAccessorResult, + DBStatisticsHistogramType, DBStatisticsTickerType, DBStatusPtr, + DBTitanDBBlobRunMode, IndexType, WriteStallCondition, }; pub use logger::Logger; pub use merge_operator::MergeOperands; @@ -65,6 +66,9 @@ pub use slice_transform::SliceTransform; pub use sst_partitioner::{ SstPartitioner, SstPartitionerContext, SstPartitionerFactory, SstPartitionerRequest, }; +pub use level_region_accessor::{ + LevelRegionAccessor, LevelRegionAccessorRequest, +}; pub use table_filter::TableFilter; pub use table_properties::{ TableProperties, TablePropertiesCollection, TablePropertiesCollectionView, @@ -93,6 +97,7 @@ pub mod rocksdb; pub mod rocksdb_options; mod slice_transform; pub mod sst_partitioner; +pub mod level_region_accessor; mod table_filter; mod table_properties; mod table_properties_collector; diff --git a/src/rocksdb_options.rs b/src/rocksdb_options.rs index 9b12ea59d..d9a7a3b41 100644 --- a/src/rocksdb_options.rs +++ b/src/rocksdb_options.rs @@ -35,6 +35,7 @@ use rocksdb::Env; use rocksdb::{Cache, MemoryAllocator}; use slice_transform::{new_slice_transform, SliceTransform}; use sst_partitioner::{new_sst_partitioner_factory, SstPartitionerFactory}; +use level_region_accessor::{new_level_region_accessor, LevelRegionAccessor}; use std::ffi::{CStr, CString}; use std::path::Path; use std::ptr; @@ -1748,6 +1749,13 @@ impl ColumnFamilyOptions { crocksdb_ffi::crocksdb_options_set_sst_partitioner_factory(self.inner, f); } } + + pub fn set_level_region_accessor(&mut self, accessor: A) { + let a = new_level_region_accessor(accessor); + unsafe { + crocksdb_ffi::crocksdb_options_set_level_region_accessor(self.inner, a); + } + } } // ColumnFamilyDescriptor is a pair of column family's name and options. From ea4d34f7eb3d39ee05468da69f196979dd173606 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Fri, 12 Mar 2021 10:52:34 +0800 Subject: [PATCH 02/52] convert from rust to c --- librocksdb_sys/crocksdb/c.cc | 11 ++++++----- librocksdb_sys/crocksdb/crocksdb/c.h | 4 ++-- librocksdb_sys/src/lib.rs | 19 +++++++++++++------ src/level_region_accessor.rs | 4 ++-- src/lib.rs | 4 ++-- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 0ac0dd994..288f02c50 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -676,7 +676,7 @@ struct crocksdb_level_region_accessor_request_t { }; struct crocksdb_level_region_accessor_result_t { - AccessorResult rep; + AccessorResult* rep; }; static bool SaveError(char** errptr, const Status& s) { @@ -5998,11 +5998,11 @@ struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { const char* Name() const override { return name_cb(underlying); } - AccessorResult LevelRegions( + AccessorResult* LevelRegions( const AccessorRequest& request) const override { crocksdb_level_region_accessor_request_t req; req.rep = const_cast(&request); - return static_cast( + return static_cast( level_regions_cb(underlying, &req)); } }; @@ -6037,8 +6037,9 @@ const char* crocksdb_level_region_accessor_name( crocksdb_level_region_accessor_result_t crocksdb_level_region_accessor_level_regions( crocksdb_level_region_accessor_t* accessor, crocksdb_level_region_accessor_request_t* req) { - return static_cast( - accessor->rep->LevelRegions(*req->rep)); + crocksdb_level_region_accessor_result_t res; + res.rep = accessor->rep->LevelRegions(*req->rep); + return res; } /* Tools */ diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index 3fb5beedd..ed5c9720d 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -2382,9 +2382,9 @@ crocksdb_level_region_accessor_req_set_largest_user_key( typedef const char* (*crocksdb_level_region_accessor_name_cb)( void* underlying); -typedef crocksdb_level_region_accessor_results_t ( +typedef crocksdb_level_region_accessor_result_t ( *crocksdb_level_region_accessor_level_regions_cb)( - void* underlying, crocksdb_level_region_accessor_requests_t* requests); + void* underlying, crocksdb_level_region_accessor_request_t* requests); extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_t* crocksdb_level_region_accessor_create( diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index 1785608a7..2c9a51681 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -178,11 +178,18 @@ pub struct DBLevelRegionAccessorRequest(c_void); #[repr(C)] pub struct DBWriteBatchIterator(c_void); -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, PartialEq, Eq)] +#[repr(C)] +pub struct DBLevelRegionBoundaries<'a> { + pub start_key: &'a [u8], + pub end_key: &'a [u8], +} + +#[derive(Clone, Debug, PartialEq, Eq)] #[repr(C)] -pub struct DBLevelRegionAccessorResult { - pub regions: RegionBoundaries, - pub region_count: u64, +pub struct DBLevelRegionAccessorResult<'a> { + pub regions: *const DBLevelRegionBoundaries<'a>, + pub region_count: i32, } #[derive(Copy, Clone, Debug, Eq, PartialEq)] @@ -2449,7 +2456,7 @@ extern "C" { level_regions_cb: extern "C" fn( *mut c_void, *mut DBLevelRegionAccessorRequest, - ) -> DBLevelRegionAccessorResult, + ) -> *const DBLevelRegionAccessorResult, ) -> *mut DBLevelRegionAccessor; pub fn crocksdb_level_region_accessor_destroy(accessor: *mut DBLevelRegionAccessor); pub fn crocksdb_level_region_accessor_name( @@ -2458,7 +2465,7 @@ extern "C" { pub fn crocksdb_level_region_accessor_level_regions( accessor: *mut DBLevelRegionAccessor, request: *mut DBLevelRegionAccessorRequest, - ) -> DBLevelRegionAccessorResult; + ) -> *const DBLevelRegionAccessorResult; pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 78f25a134..ad396cbf9 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -15,7 +15,7 @@ pub struct LevelRegionAccessorRequest<'a> { pub trait LevelRegionAccessor { fn name(&self) -> &Ctring; - fn level_regions(&self, req: &LevelRegionAccessorRequest) -> LevelRegionAccessorResult; + fn level_regions(&self, req: &LevelRegionAccessorRequest) -> *const LevelRegionAccessorResult; } extern "C" fn level_region_destructor(ctx: *mut c_void) { @@ -35,7 +35,7 @@ extern "C" fn level_region_accessor_name( extern "C" fn level_region_accessor_level_regions( ctx: *mut c_void, request: *mut DBLevelRegionAccessorRequest, -) -> LevelRegionAccessorResult { +) -> *const LevelRegionAccessorResult { let accessor = unsafe { &*(ctx as *mut A) }; let req = unsafe { let mut smallest_key_len: usize = 0; diff --git a/src/lib.rs b/src/lib.rs index 2e359708f..355d93581 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -44,8 +44,8 @@ pub use librocksdb_sys::{ DBBackgroundErrorReason, DBBottommostLevelCompaction, DBCompactionStyle, DBCompressionType, DBEntryType, DBInfoLogLevel, DBRateLimiterMode, DBRecoveryMode, DBSstPartitionerResult as SstPartitionerResult, DBLevelRegionAccessorResult as LevelRegionAccessorResult, - DBStatisticsHistogramType, DBStatisticsTickerType, DBStatusPtr, - DBTitanDBBlobRunMode, IndexType, WriteStallCondition, + DBLevelRegionBoundaries as LevelRegionBoundaries, DBStatisticsHistogramType, + DBStatisticsTickerType, DBStatusPtr, DBTitanDBBlobRunMode, IndexType, WriteStallCondition, }; pub use logger::Logger; pub use merge_operator::MergeOperands; From eacac659cc6ade1912ea20fc141734d2b83946c8 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Fri, 12 Mar 2021 21:44:50 +0800 Subject: [PATCH 03/52] fix compile bug --- .gitmodules | 4 ++-- librocksdb_sys/crocksdb/c.cc | 9 +++++---- librocksdb_sys/crocksdb/crocksdb/c.h | 6 +++--- .../librocksdb_cloud_sys/rocksdb-cloud | 2 +- librocksdb_sys/libtitan_sys/titan | 2 +- librocksdb_sys/rocksdb | 2 +- librocksdb_sys/src/lib.rs | 8 ++++---- src/level_region_accessor.rs | 18 +++++++++--------- src/rocksdb_options.rs | 2 +- 9 files changed, 27 insertions(+), 26 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7547a83fa..1c5f586d7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "rocksdb"] path = librocksdb_sys/rocksdb - url = https://github.com/tikv/rocksdb.git - branch = 6.4.tikv + url = https://github.com/CheneyDing/rocksdb.git + branch = size-ratio-compaction [submodule "titan"] path = librocksdb_sys/libtitan_sys/titan diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 288f02c50..d942141dc 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -666,7 +666,7 @@ struct crocksdb_sst_partitioner_factory_t { }; struct crocksdb_level_region_accessor_t { - std::unique_ptr rep; + std::shared_ptr rep; }; struct crocksdb_level_region_accessor_request_t { @@ -6002,8 +6002,9 @@ struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { const AccessorRequest& request) const override { crocksdb_level_region_accessor_request_t req; req.rep = const_cast(&request); - return static_cast( - level_regions_cb(underlying, &req)); + crocksdb_level_region_accessor_result_t res; + res = level_regions_cb(underlying, &req); + return res.rep; } }; @@ -6019,7 +6020,7 @@ crocksdb_level_region_accessor_t* crocksdb_level_region_accessor_create( accessor_impl->name_cb = name_cb; accessor_impl->level_regions_cb = level_regions_cb; crocksdb_level_region_accessor_t* accessor = - new crocksdb_level_region_accessor__t; + new crocksdb_level_region_accessor_t; accessor->rep.reset(accessor_impl); return accessor; } diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index ed5c9720d..f55eab17b 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -2393,12 +2393,12 @@ crocksdb_level_region_accessor_create( crocksdb_level_region_accessor_level_regions_cb level_regions_cb); extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_destroy( - crocksdb_sst_partitioner_factory_t* factory); + crocksdb_level_region_accessor_t* accessor); extern C_ROCKSDB_LIBRARY_API const char* crocksdb_level_region_accessor_name( - crocksdb_sst_partitioner_factory_t* factory); + crocksdb_level_region_accessor_t* accessor); extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_result_t crocksdb_level_region_accessor_level_regions( - crocksdb_level_region_accessor_t* factory, + crocksdb_level_region_accessor_t* accessor, crocksdb_level_region_accessor_request_t* request); diff --git a/librocksdb_sys/librocksdb_cloud_sys/rocksdb-cloud b/librocksdb_sys/librocksdb_cloud_sys/rocksdb-cloud index ac0e18f44..ff40f807b 160000 --- a/librocksdb_sys/librocksdb_cloud_sys/rocksdb-cloud +++ b/librocksdb_sys/librocksdb_cloud_sys/rocksdb-cloud @@ -1 +1 @@ -Subproject commit ac0e18f441de3e265c9f15d69dec22220f916814 +Subproject commit ff40f807ba1b18ba5c460f1f5ac5697acb37e13d diff --git a/librocksdb_sys/libtitan_sys/titan b/librocksdb_sys/libtitan_sys/titan index 9df8f0516..46809e590 160000 --- a/librocksdb_sys/libtitan_sys/titan +++ b/librocksdb_sys/libtitan_sys/titan @@ -1 +1 @@ -Subproject commit 9df8f051619fc6f5161a3f9e1e4fb01fe5332783 +Subproject commit 46809e5902cdbbc3d574bd9cab5730b15751b9de diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index c1178cda4..fedf973f5 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit c1178cda46770ca1e02b9fc304aa7df2338c4d5d +Subproject commit fedf973f5d107bb780e1bab880dbd616afced305 diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index 2c9a51681..1522a3c23 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -2453,19 +2453,19 @@ extern "C" { underlying: *mut c_void, destructor: extern "C" fn(*mut c_void), name_cb: extern "C" fn(*mut c_void) -> *const c_char, - level_regions_cb: extern "C" fn( + level_regions_cb: extern "C" fn ( *mut c_void, *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult, + ) -> *const DBLevelRegionAccessorResult<'static>, ) -> *mut DBLevelRegionAccessor; pub fn crocksdb_level_region_accessor_destroy(accessor: *mut DBLevelRegionAccessor); pub fn crocksdb_level_region_accessor_name( accessor: *mut DBLevelRegionAccessor, ) -> *const c_char; - pub fn crocksdb_level_region_accessor_level_regions( + pub fn crocksdb_level_region_accessor_level_regions<'a>( accessor: *mut DBLevelRegionAccessor, request: *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult; + ) -> *const DBLevelRegionAccessorResult<'a>; pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index ad396cbf9..42ae9cf71 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -4,8 +4,8 @@ use super::LevelRegionAccessorResult; use crocksdb_ffi::{ self, DBLevelRegionAccessor, DBLevelRegionAccessorRequest, }; -use libc::{c_char, c_uchar, c_void, size_t}; -use std::{ffi::CString, ptr, slice}; +use libc::{c_char, c_void}; +use std::{ffi::CString, slice}; #[derive(Clone, PartialEq, Eq, Debug)] pub struct LevelRegionAccessorRequest<'a> { @@ -14,7 +14,7 @@ pub struct LevelRegionAccessorRequest<'a> { } pub trait LevelRegionAccessor { - fn name(&self) -> &Ctring; + fn name(&self) -> &CString; fn level_regions(&self, req: &LevelRegionAccessorRequest) -> *const LevelRegionAccessorResult; } @@ -32,10 +32,10 @@ extern "C" fn level_region_accessor_name( accessor.name().as_ptr() } -extern "C" fn level_region_accessor_level_regions( +extern "C" fn level_region_accessor_level_regions<'a, A: 'a + LevelRegionAccessor>( ctx: *mut c_void, request: *mut DBLevelRegionAccessorRequest, -) -> *const LevelRegionAccessorResult { +) -> *const LevelRegionAccessorResult<'a> { let accessor = unsafe { &*(ctx as *mut A) }; let req = unsafe { let mut smallest_key_len: usize = 0; @@ -56,15 +56,15 @@ extern "C" fn level_region_accessor_level_regions( accessor.level_regions(&req) as _ } -pub fn new_level_region_accessor( +pub fn new_level_region_accessor( accessor: A, ) -> *mut DBLevelRegionAccessor { unsafe { crocksdb_ffi::crocksdb_level_region_accessor_create( Box::into_raw(Box::new(accessor)) as *mut c_void, - level_region_destructor::, - level_region_accessor_name::, - level_region_accessor_level_regions::, + level_region_destructor::, + level_region_accessor_name::, + level_region_accessor_level_regions::, ) } } diff --git a/src/rocksdb_options.rs b/src/rocksdb_options.rs index d9a7a3b41..d7d48718d 100644 --- a/src/rocksdb_options.rs +++ b/src/rocksdb_options.rs @@ -1750,7 +1750,7 @@ impl ColumnFamilyOptions { } } - pub fn set_level_region_accessor(&mut self, accessor: A) { + pub fn set_level_region_accessor(&mut self, accessor: A) { let a = new_level_region_accessor(accessor); unsafe { crocksdb_ffi::crocksdb_options_set_level_region_accessor(self.inner, a); From e05182ac8590ca790c5f7931ac16ca2883aeb977 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Sat, 13 Mar 2021 19:56:57 +0800 Subject: [PATCH 04/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index fedf973f5..70d52574a 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit fedf973f5d107bb780e1bab880dbd616afced305 +Subproject commit 70d52574a240e02c36c953ec1f490a6208d12e06 From 45199d2bbee677d1f816f9646907dd736fdac827 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Sat, 13 Mar 2021 20:17:37 +0800 Subject: [PATCH 05/52] fix bug --- librocksdb_sys/crocksdb/c.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index e573485ad..92b48fbd1 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -689,7 +689,7 @@ struct crocksdb_level_region_accessor_request_t { struct crocksdb_level_region_accessor_result_t { AccessorResult* rep; -} +}; struct crocksdb_file_system_inspector_t { std::shared_ptr rep; From 67ff07894fa791f67fd116f462b4180269b1dd28 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 15 Mar 2021 20:27:47 +0800 Subject: [PATCH 06/52] fix compile bug --- librocksdb_sys/src/lib.rs | 4 ++-- src/level_region_accessor.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index c3ba7d213..3aad33ac4 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -2557,7 +2557,7 @@ extern "C" { level_regions_cb: extern "C" fn ( *mut c_void, *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult<'static>, + ) -> DBLevelRegionAccessorResult<'static>, ) -> *mut DBLevelRegionAccessor; pub fn crocksdb_level_region_accessor_destroy(accessor: *mut DBLevelRegionAccessor); pub fn crocksdb_level_region_accessor_name( @@ -2566,7 +2566,7 @@ extern "C" { pub fn crocksdb_level_region_accessor_level_regions<'a>( accessor: *mut DBLevelRegionAccessor, request: *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult<'a>; + ) -> DBLevelRegionAccessorResult<'a>; pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 42ae9cf71..100740321 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -15,7 +15,7 @@ pub struct LevelRegionAccessorRequest<'a> { pub trait LevelRegionAccessor { fn name(&self) -> &CString; - fn level_regions(&self, req: &LevelRegionAccessorRequest) -> *const LevelRegionAccessorResult; + fn level_regions(&self, req: &LevelRegionAccessorRequest) -> LevelRegionAccessorResult; } extern "C" fn level_region_destructor(ctx: *mut c_void) { @@ -35,7 +35,7 @@ extern "C" fn level_region_accessor_name( extern "C" fn level_region_accessor_level_regions<'a, A: 'a + LevelRegionAccessor>( ctx: *mut c_void, request: *mut DBLevelRegionAccessorRequest, -) -> *const LevelRegionAccessorResult<'a> { +) -> LevelRegionAccessorResult<'a> { let accessor = unsafe { &*(ctx as *mut A) }; let req = unsafe { let mut smallest_key_len: usize = 0; From 4c647a1633a6ece4fda77c4a14d0dca411c54a12 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Wed, 17 Mar 2021 17:24:22 +0800 Subject: [PATCH 07/52] fix compile bug --- librocksdb_sys/crocksdb/c.cc | 11 ++--------- librocksdb_sys/crocksdb/crocksdb/c.h | 3 +-- librocksdb_sys/src/lib.rs | 29 ++++++++++++++++++++-------- src/level_region_accessor.rs | 28 ++++++++++++++++++++++----- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 92b48fbd1..b6c17f6a1 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -687,10 +687,6 @@ struct crocksdb_level_region_accessor_request_t { Slice largest_user_key; }; -struct crocksdb_level_region_accessor_result_t { - AccessorResult* rep; -}; - struct crocksdb_file_system_inspector_t { std::shared_ptr rep; }; @@ -6226,9 +6222,7 @@ struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { const AccessorRequest& request) const override { crocksdb_level_region_accessor_request_t req; req.rep = const_cast(&request); - crocksdb_level_region_accessor_result_t res; - res = level_regions_cb(underlying, &req); - return res.rep; + return level_regions_cb(underlying, &req); } }; @@ -6263,8 +6257,7 @@ crocksdb_level_region_accessor_result_t crocksdb_level_region_accessor_level_reg crocksdb_level_region_accessor_t* accessor, crocksdb_level_region_accessor_request_t* req) { crocksdb_level_region_accessor_result_t res; - res.rep = accessor->rep->LevelRegions(*req->rep); - return res; + return accessor->rep->LevelRegions(*req->rep); } /* Tools */ diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index 76a85e729..395e61577 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -171,8 +171,7 @@ typedef struct crocksdb_sst_partitioner_factory_t typedef struct crocksdb_level_region_accessor_t crocksdb_level_region_accessor_t; typedef struct crocksdb_level_region_accessor_request_t crocksdb_level_region_accessor_request_t; -typedef struct crocksdb_level_region_accessor_result_t - crocksdb_level_region_accessor_result_t; +typedef AccessorResult* crocksdb_level_region_accessor_result_t; typedef enum crocksdb_table_property_t { kDataSize = 1, diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index c3ba7d213..bd01f7308 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -182,17 +182,30 @@ pub struct DBWriteBatchIterator(c_void); #[repr(C)] pub struct DBFileSystemInspectorInstance(c_void); +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct DBLevelRegionBoundaries { + pub start_key: Vec, + pub end_key: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct DBLevelRegionAccessorResult { + pub regions: Vec, +} + #[derive(Clone, Debug, PartialEq, Eq)] #[repr(C)] -pub struct DBLevelRegionBoundaries<'a> { - pub start_key: &'a [u8], - pub end_key: &'a [u8], +pub struct C_LevelRegionBoundaries { + pub start_key: *const c_char, + pub start_key_len: c_int, + pub end_key: *const c_char, + pub end_key_len: c_int, } #[derive(Clone, Debug, PartialEq, Eq)] #[repr(C)] -pub struct DBLevelRegionAccessorResult<'a> { - pub regions: *const DBLevelRegionBoundaries<'a>, +pub struct C_LevelRegionAccessorResult { + pub regions: *const C_LevelRegionBoundaries, pub region_count: i32, } @@ -2557,16 +2570,16 @@ extern "C" { level_regions_cb: extern "C" fn ( *mut c_void, *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult<'static>, + ) -> *const C_LevelRegionAccessorResult, ) -> *mut DBLevelRegionAccessor; pub fn crocksdb_level_region_accessor_destroy(accessor: *mut DBLevelRegionAccessor); pub fn crocksdb_level_region_accessor_name( accessor: *mut DBLevelRegionAccessor, ) -> *const c_char; - pub fn crocksdb_level_region_accessor_level_regions<'a>( + pub fn crocksdb_level_region_accessor_level_regions( accessor: *mut DBLevelRegionAccessor, request: *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult<'a>; + ) -> *const C_LevelRegionAccessorResult; pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 42ae9cf71..c0efe651a 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -3,9 +3,12 @@ use super::LevelRegionAccessorResult; use crocksdb_ffi::{ self, DBLevelRegionAccessor, DBLevelRegionAccessorRequest, + C_LevelRegionBoundaries, C_LevelRegionAccessorResult, }; -use libc::{c_char, c_void}; +use libc::{c_char, c_void, malloc, memcpy}; use std::{ffi::CString, slice}; +use std::intrinsics::size_of; +use std::mem::{size_of_val}; #[derive(Clone, PartialEq, Eq, Debug)] pub struct LevelRegionAccessorRequest<'a> { @@ -15,7 +18,7 @@ pub struct LevelRegionAccessorRequest<'a> { pub trait LevelRegionAccessor { fn name(&self) -> &CString; - fn level_regions(&self, req: &LevelRegionAccessorRequest) -> *const LevelRegionAccessorResult; + fn level_regions(&self, req: &LevelRegionAccessorRequest) -> LevelRegionAccessorResult; } extern "C" fn level_region_destructor(ctx: *mut c_void) { @@ -32,10 +35,10 @@ extern "C" fn level_region_accessor_name( accessor.name().as_ptr() } -extern "C" fn level_region_accessor_level_regions<'a, A: 'a + LevelRegionAccessor>( +extern "C" fn level_region_accessor_level_regions( ctx: *mut c_void, request: *mut DBLevelRegionAccessorRequest, -) -> *const LevelRegionAccessorResult<'a> { +) -> *const C_LevelRegionAccessorResult { let accessor = unsafe { &*(ctx as *mut A) }; let req = unsafe { let mut smallest_key_len: usize = 0; @@ -53,7 +56,22 @@ extern "C" fn level_region_accessor_level_regions<'a, A: 'a + LevelRegionAccesso largest_user_key: slice::from_raw_parts(largest_key, largest_key_len), } }; - accessor.level_regions(&req) as _ + unsafe { + let res = malloc(size_of::()) as *const C_LevelRegionAccessorResult; + let result = accessor.level_regions(&req); + let region_count = result.regions.len(); + let regions = malloc(size_of::() * region_count) as *const C_LevelRegionBoundaries; + let mut i = 0; + for region in result.regions { + regions[i].start_key_len = region.start_key.len(); + regions[i].start_key = malloc(regions[i].start_key_len); + memcpy(regions[i].start_key, region.start_key.as_ptr(), regions[i].start_key_len); + regions[i].end_key_len = region.end_key.len(); + regions[i].end_key = malloc(regions[i].end_key_len); + memcpy(regions[i].end_key, region.end_key.as_ptr(), regions[i].end_key_len); + } + res + } } pub fn new_level_region_accessor( From b3054e4887f9297fc33f8075e2b7f503304df555 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Wed, 17 Mar 2021 22:26:48 +0800 Subject: [PATCH 08/52] redefine struct --- librocksdb_sys/crocksdb/c.cc | 16 +++++--- librocksdb_sys/crocksdb/crocksdb/c.h | 12 +++--- librocksdb_sys/src/lib.rs | 32 ++------------- src/level_region_accessor.rs | 61 +++++++++++++++++++++------- src/lib.rs | 2 - 5 files changed, 68 insertions(+), 55 deletions(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index b6c17f6a1..4b01ad00e 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -687,6 +687,10 @@ struct crocksdb_level_region_accessor_request_t { Slice largest_user_key; }; +struct crocksdb_level_region_accessor_result_t { + AccessorResult rep; +}; + struct crocksdb_file_system_inspector_t { std::shared_ptr rep; }; @@ -6253,11 +6257,13 @@ const char* crocksdb_level_region_accessor_name( return accessor->rep->Name(); } -crocksdb_level_region_accessor_result_t crocksdb_level_region_accessor_level_regions( - crocksdb_level_region_accessor_t* accessor, - crocksdb_level_region_accessor_request_t* req) { - crocksdb_level_region_accessor_result_t res; - return accessor->rep->LevelRegions(*req->rep); +crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_result_create() { + return new crocksdb_level_region_accessor_result_t; +} + +void crocksdb_level_region_accessor_result_append(crocksdb_level_region_accessor_result_t* dest, + const char* s, size_t slen, const char* e, size_t elen) { + dest->rep.append(Slice(s, slen), Slice(e, elen)); } /* Tools */ diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index 395e61577..c7491ac01 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -171,7 +171,8 @@ typedef struct crocksdb_sst_partitioner_factory_t typedef struct crocksdb_level_region_accessor_t crocksdb_level_region_accessor_t; typedef struct crocksdb_level_region_accessor_request_t crocksdb_level_region_accessor_request_t; -typedef AccessorResult* crocksdb_level_region_accessor_result_t; +typedef struct crocksdb_level_region_accessor_result_t + crocksdb_level_region_accessor_result_t; typedef enum crocksdb_table_property_t { kDataSize = 1, @@ -2454,10 +2455,11 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_destroy( crocksdb_level_region_accessor_t* accessor); extern C_ROCKSDB_LIBRARY_API const char* crocksdb_level_region_accessor_name( crocksdb_level_region_accessor_t* accessor); -extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_result_t -crocksdb_level_region_accessor_level_regions( - crocksdb_level_region_accessor_t* accessor, - crocksdb_level_region_accessor_request_t* request); +extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_result_t* +crocksdb_level_region_accessor_result_create(); +extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_result_append( + crocksdb_level_region_accessor_result_t* dest, + const char* s, size_t slen, const char* e, size_t elen); extern C_ROCKSDB_LIBRARY_API void crocksdb_run_ldb_tool( diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index bd01f7308..78312347d 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -178,36 +178,12 @@ pub struct DBLevelRegionAccessor(c_void); #[repr(C)] pub struct DBLevelRegionAccessorRequest(c_void); #[repr(C)] +pub struct DBLevelRegionAccessorResult(c_void); +#[repr(C)] pub struct DBWriteBatchIterator(c_void); #[repr(C)] pub struct DBFileSystemInspectorInstance(c_void); -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct DBLevelRegionBoundaries { - pub start_key: Vec, - pub end_key: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct DBLevelRegionAccessorResult { - pub regions: Vec, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -#[repr(C)] -pub struct C_LevelRegionBoundaries { - pub start_key: *const c_char, - pub start_key_len: c_int, - pub end_key: *const c_char, - pub end_key_len: c_int, -} - -#[derive(Clone, Debug, PartialEq, Eq)] -#[repr(C)] -pub struct C_LevelRegionAccessorResult { - pub regions: *const C_LevelRegionBoundaries, - pub region_count: i32, -} #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[repr(C)] @@ -2570,7 +2546,7 @@ extern "C" { level_regions_cb: extern "C" fn ( *mut c_void, *mut DBLevelRegionAccessorRequest, - ) -> *const C_LevelRegionAccessorResult, + ) -> *const DBLevelRegionAccessorResult, ) -> *mut DBLevelRegionAccessor; pub fn crocksdb_level_region_accessor_destroy(accessor: *mut DBLevelRegionAccessor); pub fn crocksdb_level_region_accessor_name( @@ -2579,7 +2555,7 @@ extern "C" { pub fn crocksdb_level_region_accessor_level_regions( accessor: *mut DBLevelRegionAccessor, request: *mut DBLevelRegionAccessorRequest, - ) -> *const C_LevelRegionAccessorResult; + ) -> *const DBLevelRegionAccessorResult; pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index c0efe651a..283b934bc 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -1,9 +1,7 @@ // Copyright 2020 TiKV Project Authors. Licensed under Apache-2.0. -use super::LevelRegionAccessorResult; use crocksdb_ffi::{ - self, DBLevelRegionAccessor, DBLevelRegionAccessorRequest, - C_LevelRegionBoundaries, C_LevelRegionAccessorResult, + self, DBLevelRegionAccessor, DBLevelRegionAccessorRequest, DBLevelRegionAccessorResult, }; use libc::{c_char, c_void, malloc, memcpy}; use std::{ffi::CString, slice}; @@ -16,6 +14,47 @@ pub struct LevelRegionAccessorRequest<'a> { pub largest_user_key: &'a [u8], } +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct LevelRegionBoundaries { + pub start_key: Vec, + pub end_key: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct LevelRegionAccessorResult { + pub regions: Vec, +} + +pub struct AccessorResult { + pub(crate) inner: *mut DBLevelRegionAccessorResult, +} + +unsafe impl Send for AccessorResult {} +impl Default for AccessorResult { + fn default() -> AccessorResult { + AccessorResult { + inner: unsafe { crocksdb_ffi::crocksdb_level_region_accessor_result_create() }, + } + } +} + +impl AccessorResult { + pub fn new() -> AccessorResult { inner: AccessorResult::default() } + + pub fn append(&mut self, start_key: &[u8], end_key: &[u8]) { + unsafe { + crocksdb_ffi::crocksdb_level_region_accessor_result_append( + self.inner, + start_key.as_ptr(), + start_key.len() as size_t, + end_key.as_ptr(), + end_key.len() as size_t, + ); + } + } +} + + pub trait LevelRegionAccessor { fn name(&self) -> &CString; fn level_regions(&self, req: &LevelRegionAccessorRequest) -> LevelRegionAccessorResult; @@ -38,7 +77,7 @@ extern "C" fn level_region_accessor_name( extern "C" fn level_region_accessor_level_regions( ctx: *mut c_void, request: *mut DBLevelRegionAccessorRequest, -) -> *const C_LevelRegionAccessorResult { +) -> *const DBLevelRegionAccessorResult { let accessor = unsafe { &*(ctx as *mut A) }; let req = unsafe { let mut smallest_key_len: usize = 0; @@ -57,20 +96,12 @@ extern "C" fn level_region_accessor_level_regions( } }; unsafe { - let res = malloc(size_of::()) as *const C_LevelRegionAccessorResult; let result = accessor.level_regions(&req); - let region_count = result.regions.len(); - let regions = malloc(size_of::() * region_count) as *const C_LevelRegionBoundaries; - let mut i = 0; + let mut r = AccessorResult::new(); for region in result.regions { - regions[i].start_key_len = region.start_key.len(); - regions[i].start_key = malloc(regions[i].start_key_len); - memcpy(regions[i].start_key, region.start_key.as_ptr(), regions[i].start_key_len); - regions[i].end_key_len = region.end_key.len(); - regions[i].end_key = malloc(regions[i].end_key_len); - memcpy(regions[i].end_key, region.end_key.as_ptr(), regions[i].end_key_len); + r.append(region.start_key.as_slice(), region.end_key.as_slice()); } - res + r.inner } } diff --git a/src/lib.rs b/src/lib.rs index 967bfb143..e6ddcf042 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,8 +46,6 @@ pub use librocksdb_sys::{ self as crocksdb_ffi, new_bloom_filter, CompactionPriority, CompactionReason, DBBackgroundErrorReason, DBBottommostLevelCompaction, DBCompactionStyle, DBCompressionType, DBEntryType, DBInfoLogLevel, DBRateLimiterMode, DBRecoveryMode, - DBLevelRegionAccessorResult as LevelRegionAccessorResult, - DBLevelRegionBoundaries as LevelRegionBoundaries, DBSstPartitionerResult as SstPartitionerResult, DBStatisticsHistogramType, DBStatisticsTickerType, DBStatusPtr, DBTitanDBBlobRunMode, DBValueType, IndexType, WriteStallCondition, From f32e7d8adeb2adfc3d6d07125213e3122a63941c Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 17 Mar 2021 22:36:43 +0800 Subject: [PATCH 09/52] fix compile bug --- librocksdb_sys/rocksdb | 2 +- librocksdb_sys/src/lib.rs | 12 ++++++++---- src/level_region_accessor.rs | 18 +++++++----------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 70d52574a..252b7b707 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 70d52574a240e02c36c953ec1f490a6208d12e06 +Subproject commit 252b7b707861b07d93033abc693a8e2ee6f16919 diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index 78312347d..4c819f1b8 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -2552,10 +2552,14 @@ extern "C" { pub fn crocksdb_level_region_accessor_name( accessor: *mut DBLevelRegionAccessor, ) -> *const c_char; - pub fn crocksdb_level_region_accessor_level_regions( - accessor: *mut DBLevelRegionAccessor, - request: *mut DBLevelRegionAccessorRequest, - ) -> *const DBLevelRegionAccessorResult; + pub fn crocksdb_level_region_accessor_result_create() -> *mut DBLevelRegionAccessorResult; + pub fn crocksdb_level_region_accessor_result_append( + dest: *mut DBLevelRegionAccessorResult, + s: *const u8, + slen: size_t, + e: *const u8, + elen: size_t, + ); pub fn crocksdb_run_ldb_tool(argc: c_int, argv: *const *const c_char, opts: *const Options); pub fn crocksdb_run_sst_dump_tool( diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 283b934bc..3bcde0dd8 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -3,10 +3,8 @@ use crocksdb_ffi::{ self, DBLevelRegionAccessor, DBLevelRegionAccessorRequest, DBLevelRegionAccessorResult, }; -use libc::{c_char, c_void, malloc, memcpy}; +use libc::{c_char, c_void, size_t}; use std::{ffi::CString, slice}; -use std::intrinsics::size_of; -use std::mem::{size_of_val}; #[derive(Clone, PartialEq, Eq, Debug)] pub struct LevelRegionAccessorRequest<'a> { @@ -39,7 +37,7 @@ impl Default for AccessorResult { } impl AccessorResult { - pub fn new() -> AccessorResult { inner: AccessorResult::default() } + pub fn new() -> AccessorResult { AccessorResult::default() } pub fn append(&mut self, start_key: &[u8], end_key: &[u8]) { unsafe { @@ -95,14 +93,12 @@ extern "C" fn level_region_accessor_level_regions( largest_user_key: slice::from_raw_parts(largest_key, largest_key_len), } }; - unsafe { - let result = accessor.level_regions(&req); - let mut r = AccessorResult::new(); - for region in result.regions { - r.append(region.start_key.as_slice(), region.end_key.as_slice()); - } - r.inner + let result = accessor.level_regions(&req); + let mut r = AccessorResult::new(); + for region in result.regions { + r.append(region.start_key.as_slice(), region.end_key.as_slice()); } + r.inner } pub fn new_level_region_accessor( From 61d8b52690faf76a64ccd75cbfd07a2d82b13ffe Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 17 Mar 2021 22:49:49 +0800 Subject: [PATCH 10/52] fix compile bug --- librocksdb_sys/crocksdb/c.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 4b01ad00e..f36592843 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6226,7 +6226,9 @@ struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { const AccessorRequest& request) const override { crocksdb_level_region_accessor_request_t req; req.rep = const_cast(&request); - return level_regions_cb(underlying, &req); + crocksdb_level_region_accessor_result_t res; + res = level_regions_cb(underlying, &req); + return &res.rep } }; From 19ae8f9347b544c1cf11c8989a8204561b54a7cf Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 17 Mar 2021 22:55:03 +0800 Subject: [PATCH 11/52] fix compile bug --- librocksdb_sys/crocksdb/c.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index f36592843..01dee54a6 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6228,7 +6228,7 @@ struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { req.rep = const_cast(&request); crocksdb_level_region_accessor_result_t res; res = level_regions_cb(underlying, &req); - return &res.rep + return &res.rep; } }; From bb8ade9a049c5d1d6cc50eb61e998f17edc9282e Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 17 Mar 2021 23:03:36 +0800 Subject: [PATCH 12/52] fix compile bug --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index e6ddcf042..f6d093695 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -70,7 +70,7 @@ pub use sst_partitioner::{ SstPartitioner, SstPartitionerContext, SstPartitionerFactory, SstPartitionerRequest, }; pub use level_region_accessor::{ - LevelRegionAccessor, LevelRegionAccessorRequest, + LevelRegionAccessor, LevelRegionAccessorRequest, LevelRegionAccessorResult, }; pub use table_filter::TableFilter; pub use table_properties::{ From b389ffc9776c849c14b92d87c1678fb4c3160ee6 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 17 Mar 2021 23:11:34 +0800 Subject: [PATCH 13/52] fix compile bug --- src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index f6d093695..620a70795 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -70,7 +70,8 @@ pub use sst_partitioner::{ SstPartitioner, SstPartitionerContext, SstPartitionerFactory, SstPartitionerRequest, }; pub use level_region_accessor::{ - LevelRegionAccessor, LevelRegionAccessorRequest, LevelRegionAccessorResult, + LevelRegionAccessor, LevelRegionAccessorRequest, + LevelRegionAccessorResult, LevelRegionAccessorBoundaries, }; pub use table_filter::TableFilter; pub use table_properties::{ From b57e01f639b7851c4fb4d070a6ed4e0f2eff4841 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 17 Mar 2021 23:15:58 +0800 Subject: [PATCH 14/52] fix compile bug --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 620a70795..eba2ab9ef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -71,7 +71,7 @@ pub use sst_partitioner::{ }; pub use level_region_accessor::{ LevelRegionAccessor, LevelRegionAccessorRequest, - LevelRegionAccessorResult, LevelRegionAccessorBoundaries, + LevelRegionAccessorResult, LevelRegionBoundaries, }; pub use table_filter::TableFilter; pub use table_properties::{ From 51a37a611aeb6f75175fee9c7f56847acc41f6f6 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Thu, 18 Mar 2021 16:13:17 +0800 Subject: [PATCH 15/52] new compaction pri --- librocksdb_sys/src/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index 4c819f1b8..b35c38d82 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -290,6 +290,9 @@ pub enum CompactionPriority { // and its size is the smallest. It in many cases can optimize write // amplification. MinOverlappingRatio = 3, + // First compact files whose size ratio violation is the largest. It can + // reduce compaction in delete scenarios. + MaxViolatingSizeRatio = 4, } #[derive(Copy, Clone, Debug, Eq, PartialEq)] From b6ae5b058420e70039224d326ab38ce46dd1503d Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Thu, 18 Mar 2021 16:14:31 +0800 Subject: [PATCH 16/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 252b7b707..a66cf48ae 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 252b7b707861b07d93033abc693a8e2ee6f16919 +Subproject commit a66cf48ae5dfef3e168a86734a07da226c1649d0 From 43c31456fe4313d45040ccfb54d642e9e0176373 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Fri, 19 Mar 2021 15:27:53 +0800 Subject: [PATCH 17/52] generate bindings --- .../x86_64-unknown-linux-gnu-bindings.rs | 227 ++++++++---------- librocksdb_sys/crocksdb/c.cc | 5 +- librocksdb_sys/crocksdb/crocksdb/c.h | 2 +- 3 files changed, 109 insertions(+), 125 deletions(-) diff --git a/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs b/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs index 7702c02d5..9adc7e375 100644 --- a/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs +++ b/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs @@ -3,9 +3,9 @@ pub const __GNUC_VA_LIST: u32 = 1; pub const _STDINT_H: u32 = 1; pub const _FEATURES_H: u32 = 1; +pub const __USE_ANSI: u32 = 1; pub const _BSD_SOURCE: u32 = 1; pub const _SVID_SOURCE: u32 = 1; -pub const __USE_ISOC11: u32 = 1; pub const __USE_ISOC99: u32 = 1; pub const __USE_ISOC95: u32 = 1; pub const _POSIX_SOURCE: u32 = 1; @@ -30,12 +30,15 @@ pub const __STDC_ISO_10646__: u32 = 201103; pub const __STDC_NO_THREADS__: u32 = 1; pub const __GNU_LIBRARY__: u32 = 6; pub const __GLIBC__: u32 = 2; -pub const __GLIBC_MINOR__: u32 = 18; +pub const __GLIBC_MINOR__: u32 = 17; +pub const __GLIBC_HAVE_LONG_LONG: u32 = 1; pub const _SYS_CDEFS_H: u32 = 1; pub const __WORDSIZE: u32 = 64; pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; pub const __SYSCALL_WORDSIZE: u32 = 64; pub const _BITS_WCHAR_H: u32 = 1; +pub const __WCHAR_MIN: i32 = -2147483648; +pub const __WCHAR_MAX: u32 = 2147483647; pub const INT8_MIN: i32 = -128; pub const INT16_MIN: i32 = -32768; pub const INT32_MIN: i32 = -2147483648; @@ -71,56 +74,13 @@ pub const PTRDIFF_MAX: u64 = 9223372036854775807; pub const SIG_ATOMIC_MIN: i32 = -2147483648; pub const SIG_ATOMIC_MAX: u32 = 2147483647; pub const SIZE_MAX: i32 = -1; +pub const WCHAR_MIN: i32 = -2147483648; +pub const WCHAR_MAX: u32 = 2147483647; pub const WINT_MIN: u32 = 0; pub const WINT_MAX: u32 = 4294967295; pub type va_list = __builtin_va_list; pub type __gnuc_va_list = __builtin_va_list; pub type wchar_t = libc::c_int; -#[repr(C)] -#[repr(align(16))] -#[derive(Debug, Copy, Clone)] -pub struct max_align_t { - pub __clang_max_align_nonce1: libc::c_longlong, - pub __bindgen_padding_0: u64, - pub __clang_max_align_nonce2: u128, -} -#[test] -fn bindgen_test_layout_max_align_t() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(max_align_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 16usize, - concat!("Alignment of ", stringify!(max_align_t)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).__clang_max_align_nonce1 as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(max_align_t), - "::", - stringify!(__clang_max_align_nonce1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).__clang_max_align_nonce2 as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(max_align_t), - "::", - stringify!(__clang_max_align_nonce2) - ) - ); -} pub type int_least8_t = libc::c_schar; pub type int_least16_t = libc::c_short; pub type int_least32_t = libc::c_int; @@ -507,6 +467,21 @@ pub struct crocksdb_sst_partitioner_context_t { pub struct crocksdb_sst_partitioner_factory_t { _unused: [u8; 0], } +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct crocksdb_level_region_accessor_t { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct crocksdb_level_region_accessor_request_t { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct crocksdb_level_region_accessor_result_t { + _unused: [u8; 0], +} pub const crocksdb_table_property_t_kDataSize: crocksdb_table_property_t = 1; pub const crocksdb_table_property_t_kIndexSize: crocksdb_table_property_t = 2; pub const crocksdb_table_property_t_kFilterSize: crocksdb_table_property_t = 3; @@ -2224,6 +2199,17 @@ extern "C" { arg2: *mut crocksdb_sst_partitioner_factory_t, ); } +extern "C" { + pub fn crocksdb_options_get_level_region_accessor( + arg1: *mut crocksdb_options_t, + ) -> *mut crocksdb_level_region_accessor_t; +} +extern "C" { + pub fn crocksdb_options_set_level_region_accessor( + arg1: *mut crocksdb_options_t, + arg2: *mut crocksdb_level_region_accessor_t, + ); +} extern "C" { pub fn crocksdb_options_enable_statistics(arg1: *mut crocksdb_options_t, arg2: libc::c_uchar); } @@ -4621,6 +4607,79 @@ extern "C" { context: *mut crocksdb_sst_partitioner_context_t, ) -> *mut crocksdb_sst_partitioner_t; } +extern "C" { + pub fn crocksdb_level_region_accessor_request_create( + ) -> *mut crocksdb_level_region_accessor_request_t; +} +extern "C" { + pub fn crocksdb_level_region_accessor_request_destroy( + req: *mut crocksdb_level_region_accessor_request_t, + ); +} +extern "C" { + pub fn crocksdb_level_region_accessor_request_smallest_user_key( + req: *mut crocksdb_level_region_accessor_request_t, + len: *mut usize, + ) -> *const libc::c_char; +} +extern "C" { + pub fn crocksdb_level_region_accessor_request_largest_user_key( + req: *mut crocksdb_level_region_accessor_request_t, + len: *mut usize, + ) -> *const libc::c_char; +} +extern "C" { + pub fn crocksdb_level_region_accessor_req_set_smallest_user_key( + req: *mut crocksdb_level_region_accessor_request_t, + key: *const libc::c_char, + len: usize, + ); +} +extern "C" { + pub fn crocksdb_level_region_accessor_req_set_largest_user_key( + req: *mut crocksdb_level_region_accessor_request_t, + key: *const libc::c_char, + len: usize, + ); +} +pub type crocksdb_level_region_accessor_name_cb = ::std::option::Option< + unsafe extern "C" fn(underlying: *mut libc::c_void) -> *const libc::c_char, +>; +pub type crocksdb_level_region_accessor_level_regions_cb = ::std::option::Option< + unsafe extern "C" fn( + underlying: *mut libc::c_void, + requests: *mut crocksdb_level_region_accessor_request_t, + ) -> *mut crocksdb_level_region_accessor_result_t, +>; +extern "C" { + pub fn crocksdb_level_region_accessor_create( + underlying: *mut libc::c_void, + destructor: ::std::option::Option, + name_cb: crocksdb_level_region_accessor_name_cb, + level_regions_cb: crocksdb_level_region_accessor_level_regions_cb, + ) -> *mut crocksdb_level_region_accessor_t; +} +extern "C" { + pub fn crocksdb_level_region_accessor_destroy(accessor: *mut crocksdb_level_region_accessor_t); +} +extern "C" { + pub fn crocksdb_level_region_accessor_name( + accessor: *mut crocksdb_level_region_accessor_t, + ) -> *const libc::c_char; +} +extern "C" { + pub fn crocksdb_level_region_accessor_result_create( + ) -> *mut crocksdb_level_region_accessor_result_t; +} +extern "C" { + pub fn crocksdb_level_region_accessor_result_append( + dest: *mut crocksdb_level_region_accessor_result_t, + s: *const libc::c_char, + slen: usize, + e: *const libc::c_char, + elen: usize, + ); +} extern "C" { pub fn crocksdb_run_ldb_tool( argc: libc::c_int, @@ -4654,40 +4713,6 @@ fn bindgen_test_layout_ctitandb_blob_index_t() { 8usize, concat!("Alignment of ", stringify!(ctitandb_blob_index_t)) ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).file_number as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ctitandb_blob_index_t), - "::", - stringify!(file_number) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).blob_offset as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ctitandb_blob_index_t), - "::", - stringify!(blob_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).blob_size as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(ctitandb_blob_index_t), - "::", - stringify!(blob_size) - ) - ); } #[repr(C)] #[derive(Debug, Copy, Clone)] @@ -5000,44 +5025,4 @@ fn bindgen_test_layout___va_list_tag() { 8usize, concat!("Alignment of ", stringify!(__va_list_tag)) ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).gp_offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(gp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).fp_offset as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(fp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).overflow_arg_area as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(overflow_arg_area) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).reg_save_area as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(reg_save_area) - ) - ); } diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 01dee54a6..39354d1c6 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6226,9 +6226,8 @@ struct crocksdb_level_region_accessor_impl_t : public LevelRegionAccessor { const AccessorRequest& request) const override { crocksdb_level_region_accessor_request_t req; req.rep = const_cast(&request); - crocksdb_level_region_accessor_result_t res; - res = level_regions_cb(underlying, &req); - return &res.rep; + crocksdb_level_region_accessor_result_t* res = level_regions_cb(underlying, &req); + return &(res->rep); } }; diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index c7491ac01..7d96d4117 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -2441,7 +2441,7 @@ crocksdb_level_region_accessor_req_set_largest_user_key( typedef const char* (*crocksdb_level_region_accessor_name_cb)( void* underlying); -typedef crocksdb_level_region_accessor_result_t ( +typedef crocksdb_level_region_accessor_result_t* ( *crocksdb_level_region_accessor_level_regions_cb)( void* underlying, crocksdb_level_region_accessor_request_t* requests); From 4a30f4bb1d4fc381f52150f5e742a2cca20be43f Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Fri, 19 Mar 2021 21:41:17 +0800 Subject: [PATCH 18/52] add unit test --- librocksdb_sys/crocksdb/c.cc | 15 +++ librocksdb_sys/crocksdb/crocksdb/c.h | 5 + librocksdb_sys/src/lib.rs | 4 + src/level_region_accessor.rs | 146 +++++++++++++++++++++++++++ 4 files changed, 170 insertions(+) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 39354d1c6..6dcedb771 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6258,10 +6258,25 @@ const char* crocksdb_level_region_accessor_name( return accessor->rep->Name(); } +crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_level_regions( + crocksdb_level_region_accessor_t* accessor, + crocksdb_level_region_accessor_request_t* req) { + return static_castaccessor->rep->LevelRegions(*req->rep); +} + crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_result_create() { return new crocksdb_level_region_accessor_result_t; } +void crocksdb_level_region_accessor_result_destory(croksdb_level_region_accessor_result_t* result) { + delete result; +} + +bool crocksdb_level_region_accessor_result_equal(crocksdb_level_region_accessor_result_t* result1, + crocksdb_level_region_accessor_result_t* result2) { + return result1->rep.regions == result2->rep.regions; +} + void crocksdb_level_region_accessor_result_append(crocksdb_level_region_accessor_result_t* dest, const char* s, size_t slen, const char* e, size_t elen) { dest->rep.append(Slice(s, slen), Slice(e, elen)); diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index 7d96d4117..62d862339 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -2457,6 +2457,11 @@ extern C_ROCKSDB_LIBRARY_API const char* crocksdb_level_region_accessor_name( crocksdb_level_region_accessor_t* accessor); extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_result_create(); +extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_result_destory( + croksdb_level_region_accessor_result_t* result); +extern C_ROCKSDB_LIBRARY_API bool crocksdb_level_region_accessor_result_equal( + crocksdb_level_region_accessor_result_t* result1, + crocksdb_level_region_accessor_result_t* result2); extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_result_append( crocksdb_level_region_accessor_result_t* dest, const char* s, size_t slen, const char* e, size_t elen); diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index b35c38d82..804bf30cf 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -2555,6 +2555,10 @@ extern "C" { pub fn crocksdb_level_region_accessor_name( accessor: *mut DBLevelRegionAccessor, ) -> *const c_char; + pub fn crocksdb_level_region_accessor_level_regions( + accessor: *mut DBLevelRegionAccessor, + req: *mut DBLevelRegionAccessorRequest, + ) -> *const DBLevelRegionAccessorResult; pub fn crocksdb_level_region_accessor_result_create() -> *mut DBLevelRegionAccessorResult; pub fn crocksdb_level_region_accessor_result_append( dest: *mut DBLevelRegionAccessorResult, diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 3bcde0dd8..6f3c022e6 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -113,3 +113,149 @@ pub fn new_level_region_accessor( ) } } + +#[cfg(test)] +mod test { + use std::{ + ffi::{CStr, CString}, + sync::{Arc, Mutex}, + }; + + use super::*; + + struct TestState { + pub call_level_regions: usize, + pub drop_accessor: usize, + pub level_regions_result: LevelRegionAccessorResult, + + // LevelRegionAccessorRequest fields + pub smallest_user_key: Option>, + pub largest_user_key: Option>, + } + + impl Default for TestState { + fn default() -> Self { + TestState { + call_level_regions: 0, + drop_accessor: 0, + level_regions_result: LevelRegionAccessorResult{regions: Vec::new()}, + smallest_user_key: None, + largest_user_key: None, + } + } + } + + struct TestLevelRegionAccessor { + state: Arc>, + } + + lazy_static! { + static ref ACCESSOR_NAME: CString = + CString::new(b"TestLevelRegionAccessor".to_vec()).unwrap(); + } + + impl LevelRegionAccessor for TestLevelRegionAccessor { + fn name(&self) -> &CString { &ACCESSOR_NAME } + + fn level_regions(&self, req: &LevelRegionAccessorRequest) -> LevelRegionAccessorResult { + let mut s = self.state.lock().unwrap(); + s.call_level_regions += 1; + s.smallest_user_key = Some(req.smallest_user_key.to_vec()); + s.largest_user_key = Some(req.largest_user_key.to_vec()); + + s.level_regions_result.clone() + } + } + + impl Drop for TestLevelRegionAccessor { + fn drop(&mut self) { + self.state.lock().unwrap().drop_accessor += 1; + } + } + + #[test] + fn accessor_name() { + let s = Arc::new(Mutex::new(TestState::default())); + let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s}); + let accessor_name = + unsafe { CStr::from_ptr(crocksdb_ffi::crocksdb_level_region_accessor_name(accessor)) }; + assert_eq!(*ACCESSOR_NAME.as_c_str(), *accessor_name); + unsafe { + crocksdb_ffi::crocksdb_level_region_accessor_destroy(accessor); + } + } + + #[test] + fn accessor_level_regions() { + const ACCESSOR_RESULT: LevelRegionAccessorResult = LevelRegionAccessorResult { regions: Vec::new() }; + const REGION_1: LevelRegionBoundaries = LevelRegionBoundaries { + start_key: b"test_key_region_abc".to_vec(), + end_key: b"test_key_region_def".to_vec(), + }; + const REGION_2: LevelRegionBoundaries = LevelRegionBoundaries { + start_key: b"test_key_region_def".to_vec(), + end_key: b"test_key_region_ghi".to_vec(), + }; + const REGION_3: LevelRegionBoundaries = LevelRegionBoundaries { + start_key: b"test_key_region_ghi".to_vec(), + end_key: b"test_key_region_jkl".to_vec(), + }; + ACCESSOR_RESULT.regions.push(REGION_1); + ACCESSOR_RESULT.regions.push(REGION_2); + ACCESSOR_RESULT.regions.push(REGION_3); + + const SMALLEST_USER_KEY: &[u8] = b"test_key_region_bcd"; + const LARGEST_USER_KEY: &[u8] = b"test_key_region_hij"; + + const EQUAL: bool = true; + + let s = Arc::new(Mutex::new(TestState::default())); + s.lock().unwrap().level_regions_result = ACCESSOR_RESULT; + let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s}); + let req = unsafe { crocksdb_ffi::crocksdb_level_region_accessor_request_create() }; + unsafe { + crocksdb_ffi::crocksdb_level_region_accessor_request_set_smallest_user_key( + req, + SMALLEST_USER_KEY.as_ptr() as *const c_char, + SMALLEST_USER_KEY.len(), + ); + crocksdb_ffi::crocksdb_level_region_accessor_request_set_largest_user_key( + req, + LARGEST_USER_KEY.as_ptr() as *const c_char, + LARGEST_USER_KEY.len(), + ); + } + let accessor_result = + unsafe { crocksdb_ffi::crocksdb_level_region_accessor_level_regions(accessor, req) }; + let mut r = AccessorResult::new(); + for region in ACCESSOR_RESULT.regions { + r.append(region.start_key.as_slice(), region.end_key.as_slice()); + } + let res = crocksdb_ffi::crocksdb_level_region_accessor_result_equal(r.inner, accessor_result); + assert_eq!(EQUAL, res); + let sl = s.lock().unwrap(); + assert_eq!(1, sl.call_level_regions); + assert_eq!(SMALLEST_USER_KEY, sl.smallest_user_key.as_ref().unwrap().as_slice()); + assert_eq!(LARGEST_USER_KEY, sl.largest_user_key.as_ref().unwrap().as_slice()); + unsafe { + crocksdb_ffi::crocksdb_level_region_accessor_destroy(accessor); + } + } + + #[test] + fn drop() { + let s = Arc::new(Mutex::new(TestState::default())); + let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s}); + unsafe { + let sl = s.lock().unwrap(); + assert_eq!(0, sl.drop_accessor); + } + unsafe { + crocksdb_ffi::crocksdb_level_region_accessor_destroy(accessor); + } + unsafe { + let sl = s.lock().unwrap(); + assert_eq!(1, sl.drop_accessor); + } + } +} \ No newline at end of file From aa1839e4912761ac1a7b5dc349165072197aa531 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Fri, 19 Mar 2021 21:48:06 +0800 Subject: [PATCH 19/52] add unit test --- librocksdb_sys/src/lib.rs | 4 ++++ src/level_region_accessor.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index 804bf30cf..eb78c64ad 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -2560,6 +2560,10 @@ extern "C" { req: *mut DBLevelRegionAccessorRequest, ) -> *const DBLevelRegionAccessorResult; pub fn crocksdb_level_region_accessor_result_create() -> *mut DBLevelRegionAccessorResult; + pub fn crocksdb_level_region_accessor_result_equal( + res1: *mut DBLevelRegionAccessorResult, + res2: *mut DBLevelRegionAccessorResult, + ) -> bool; pub fn crocksdb_level_region_accessor_result_append( dest: *mut DBLevelRegionAccessorResult, s: *const u8, diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 6f3c022e6..b4504d8d2 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -231,7 +231,7 @@ mod test { for region in ACCESSOR_RESULT.regions { r.append(region.start_key.as_slice(), region.end_key.as_slice()); } - let res = crocksdb_ffi::crocksdb_level_region_accessor_result_equal(r.inner, accessor_result); + let res = unsafe { crocksdb_ffi::crocksdb_level_region_accessor_result_equal(r.inner, accessor_result as *mut DBLevelRegionAccessorResult) }; assert_eq!(EQUAL, res); let sl = s.lock().unwrap(); assert_eq!(1, sl.call_level_regions); From 194737585fed4a368d0ef2d186a99fbaccd442dc Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Fri, 19 Mar 2021 22:22:42 +0800 Subject: [PATCH 20/52] fix compile bug --- .../x86_64-unknown-linux-gnu-bindings.rs | 11 +++++ librocksdb_sys/crocksdb/c.cc | 8 ++-- librocksdb_sys/crocksdb/crocksdb/c.h | 4 +- librocksdb_sys/rocksdb | 2 +- src/level_region_accessor.rs | 46 +++++++++---------- 5 files changed, 42 insertions(+), 29 deletions(-) diff --git a/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs b/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs index 9adc7e375..3448cafb0 100644 --- a/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs +++ b/librocksdb_sys/bindings/x86_64-unknown-linux-gnu-bindings.rs @@ -4671,6 +4671,17 @@ extern "C" { pub fn crocksdb_level_region_accessor_result_create( ) -> *mut crocksdb_level_region_accessor_result_t; } +extern "C" { + pub fn crocksdb_level_region_accessor_result_destory( + result: *mut crocksdb_level_region_accessor_result_t, + ); +} +extern "C" { + pub fn crocksdb_level_region_accessor_result_equal( + result1: *mut crocksdb_level_region_accessor_result_t, + result2: *mut crocksdb_level_region_accessor_result_t, + ) -> libc::c_uchar; +} extern "C" { pub fn crocksdb_level_region_accessor_result_append( dest: *mut crocksdb_level_region_accessor_result_t, diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 6dcedb771..61bcc344f 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6261,18 +6261,20 @@ const char* crocksdb_level_region_accessor_name( crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_level_regions( crocksdb_level_region_accessor_t* accessor, crocksdb_level_region_accessor_request_t* req) { - return static_castaccessor->rep->LevelRegions(*req->rep); + crocksdb_level_region_accessor_result_t* res = new crocksdb_level_region_accessor_result_t; + res->rep = *(accessor->rep->LevelRegions(*req->rep)); + return res; } crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_result_create() { return new crocksdb_level_region_accessor_result_t; } -void crocksdb_level_region_accessor_result_destory(croksdb_level_region_accessor_result_t* result) { +void crocksdb_level_region_accessor_result_destory(crocksdb_level_region_accessor_result_t* result) { delete result; } -bool crocksdb_level_region_accessor_result_equal(crocksdb_level_region_accessor_result_t* result1, +unsigned char crocksdb_level_region_accessor_result_equal(crocksdb_level_region_accessor_result_t* result1, crocksdb_level_region_accessor_result_t* result2) { return result1->rep.regions == result2->rep.regions; } diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index 62d862339..0860e5a78 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -2458,8 +2458,8 @@ extern C_ROCKSDB_LIBRARY_API const char* crocksdb_level_region_accessor_name( extern C_ROCKSDB_LIBRARY_API crocksdb_level_region_accessor_result_t* crocksdb_level_region_accessor_result_create(); extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_result_destory( - croksdb_level_region_accessor_result_t* result); -extern C_ROCKSDB_LIBRARY_API bool crocksdb_level_region_accessor_result_equal( + crocksdb_level_region_accessor_result_t* result); +extern C_ROCKSDB_LIBRARY_API unsigned char crocksdb_level_region_accessor_result_equal( crocksdb_level_region_accessor_result_t* result1, crocksdb_level_region_accessor_result_t* result2); extern C_ROCKSDB_LIBRARY_API void crocksdb_level_region_accessor_result_append( diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index a66cf48ae..488f6c70c 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit a66cf48ae5dfef3e168a86734a07da226c1649d0 +Subproject commit 488f6c70c9eb7a11c087f51c3c351cdbee373927 diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index b4504d8d2..4eda93e77 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -188,21 +188,25 @@ mod test { #[test] fn accessor_level_regions() { const ACCESSOR_RESULT: LevelRegionAccessorResult = LevelRegionAccessorResult { regions: Vec::new() }; - const REGION_1: LevelRegionBoundaries = LevelRegionBoundaries { - start_key: b"test_key_region_abc".to_vec(), - end_key: b"test_key_region_def".to_vec(), + const BOUNDARIES_1: &[u8] = b"test_key_region_abc"; + const BOUNDARIES_2: &[u8] = b"test_key_region_def"; + const BOUNDARIES_3: &[u8] = b"test_key_region_ghi"; + const BOUNDARIES_4: &[u8] = b"test_key_region_jkl"; + let region_1: LevelRegionBoundaries = LevelRegionBoundaries { + start_key: BOUNDARIES_1.to_vec(), + end_key: BOUNDARIES_2.to_vec(), }; - const REGION_2: LevelRegionBoundaries = LevelRegionBoundaries { - start_key: b"test_key_region_def".to_vec(), - end_key: b"test_key_region_ghi".to_vec(), + let region_2: LevelRegionBoundaries = LevelRegionBoundaries { + start_key: BOUNDARIES_2.to_vec(), + end_key: BOUNDARIES_3.to_vec(), }; - const REGION_3: LevelRegionBoundaries = LevelRegionBoundaries { - start_key: b"test_key_region_ghi".to_vec(), - end_key: b"test_key_region_jkl".to_vec(), + let region_3: LevelRegionBoundaries = LevelRegionBoundaries { + start_key: BOUNDARIES_3.to_vec(), + end_key: BOUNDARIES_4.to_vec(), }; - ACCESSOR_RESULT.regions.push(REGION_1); - ACCESSOR_RESULT.regions.push(REGION_2); - ACCESSOR_RESULT.regions.push(REGION_3); + ACCESSOR_RESULT.regions.push(region_1); + ACCESSOR_RESULT.regions.push(region_2); + ACCESSOR_RESULT.regions.push(region_3); const SMALLEST_USER_KEY: &[u8] = b"test_key_region_bcd"; const LARGEST_USER_KEY: &[u8] = b"test_key_region_hij"; @@ -211,7 +215,7 @@ mod test { let s = Arc::new(Mutex::new(TestState::default())); s.lock().unwrap().level_regions_result = ACCESSOR_RESULT; - let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s}); + let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s.clone()}); let req = unsafe { crocksdb_ffi::crocksdb_level_region_accessor_request_create() }; unsafe { crocksdb_ffi::crocksdb_level_region_accessor_request_set_smallest_user_key( @@ -245,17 +249,13 @@ mod test { #[test] fn drop() { let s = Arc::new(Mutex::new(TestState::default())); - let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s}); - unsafe { - let sl = s.lock().unwrap(); - assert_eq!(0, sl.drop_accessor); - } + let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s.clone()}); + let sl = s.lock().unwrap(); + assert_eq!(0, sl.drop_accessor); unsafe { crocksdb_ffi::crocksdb_level_region_accessor_destroy(accessor); } - unsafe { - let sl = s.lock().unwrap(); - assert_eq!(1, sl.drop_accessor); - } + let sl = s.lock().unwrap(); + assert_eq!(1, sl.drop_accessor); } -} \ No newline at end of file +} From d72f316a480f9e1511f4042b0d71380547866ee0 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Sat, 20 Mar 2021 09:35:22 +0800 Subject: [PATCH 21/52] fix compile bug --- librocksdb_sys/crocksdb/c.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 61bcc344f..37eff1eed 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6276,7 +6276,18 @@ void crocksdb_level_region_accessor_result_destory(crocksdb_level_region_accesso unsigned char crocksdb_level_region_accessor_result_equal(crocksdb_level_region_accessor_result_t* result1, crocksdb_level_region_accessor_result_t* result2) { - return result1->rep.regions == result2->rep.regions; + regions_1 = result1->rep.regions; + regions_2 = result2->rep.regions; + if (regions_1.size() != region_2.size()) return 0; + else { + for (int i = 0; i < regions_1.size(); ++i) { + if (regions_1[i].smallest_user_key.Compare(regions_2[i].smallest_user_key) != 0 || + regions_1[i].largest_user_key.Compare(regions_2[i].largest_user_key) != 0) { + return 0; + } + } + } + return 1; } void crocksdb_level_region_accessor_result_append(crocksdb_level_region_accessor_result_t* dest, From 967484551b15a85c8e1096e9aeb8708a14051c66 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Sat, 20 Mar 2021 09:37:50 +0800 Subject: [PATCH 22/52] fix compile bug --- librocksdb_sys/crocksdb/c.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 37eff1eed..e7f4b5bec 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6276,13 +6276,11 @@ void crocksdb_level_region_accessor_result_destory(crocksdb_level_region_accesso unsigned char crocksdb_level_region_accessor_result_equal(crocksdb_level_region_accessor_result_t* result1, crocksdb_level_region_accessor_result_t* result2) { - regions_1 = result1->rep.regions; - regions_2 = result2->rep.regions; - if (regions_1.size() != region_2.size()) return 0; + if (result1->rep.regions.size() != result2->rep.regions.size()) return 0; else { - for (int i = 0; i < regions_1.size(); ++i) { - if (regions_1[i].smallest_user_key.Compare(regions_2[i].smallest_user_key) != 0 || - regions_1[i].largest_user_key.Compare(regions_2[i].largest_user_key) != 0) { + for (int i = 0; i < result1->rep.regions.size(); ++i) { + if (result1->rep.regions[i].smallest_user_key.Compare(result2->rep.regions[i].smallest_user_key) != 0 || + result1->rep.regions[i].largest_user_key.Compare(result2->rep.regions[i].largest_user_key) != 0) { return 0; } } From fa4a95a38bea860a39708f01c64234e625adbffa Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Sat, 20 Mar 2021 09:39:13 +0800 Subject: [PATCH 23/52] fix compile bug --- librocksdb_sys/crocksdb/c.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index e7f4b5bec..2523b78b9 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6279,8 +6279,8 @@ unsigned char crocksdb_level_region_accessor_result_equal(crocksdb_level_region_ if (result1->rep.regions.size() != result2->rep.regions.size()) return 0; else { for (int i = 0; i < result1->rep.regions.size(); ++i) { - if (result1->rep.regions[i].smallest_user_key.Compare(result2->rep.regions[i].smallest_user_key) != 0 || - result1->rep.regions[i].largest_user_key.Compare(result2->rep.regions[i].largest_user_key) != 0) { + if (result1->rep.regions[i].smallest_user_key.compare(result2->rep.regions[i].smallest_user_key) != 0 || + result1->rep.regions[i].largest_user_key.compare(result2->rep.regions[i].largest_user_key) != 0) { return 0; } } From 8f326712948b16bc7604d8a24a8b413fb4d3a52e Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Sat, 20 Mar 2021 11:38:05 +0800 Subject: [PATCH 24/52] modify unit test --- src/level_region_accessor.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 4eda93e77..073e6f6cc 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -250,12 +250,16 @@ mod test { fn drop() { let s = Arc::new(Mutex::new(TestState::default())); let accessor = new_level_region_accessor(TestLevelRegionAccessor {state: s.clone()}); - let sl = s.lock().unwrap(); - assert_eq!(0, sl.drop_accessor); + { + let sl = s.lock().unwrap(); + assert_eq!(0, sl.drop_accessor); + } unsafe { crocksdb_ffi::crocksdb_level_region_accessor_destroy(accessor); } - let sl = s.lock().unwrap(); - assert_eq!(1, sl.drop_accessor); + { + let sl = s.lock().unwrap(); + assert_eq!(1, sl.drop_accessor); + } } } From b84ac3234c4959de972ce5401f29a269b56c1074 Mon Sep 17 00:00:00 2001 From: DingC <1017472599@qq.com> Date: Sat, 20 Mar 2021 11:40:21 +0800 Subject: [PATCH 25/52] modify unit test --- src/level_region_accessor.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/level_region_accessor.rs b/src/level_region_accessor.rs index 073e6f6cc..dd241c926 100644 --- a/src/level_region_accessor.rs +++ b/src/level_region_accessor.rs @@ -237,10 +237,12 @@ mod test { } let res = unsafe { crocksdb_ffi::crocksdb_level_region_accessor_result_equal(r.inner, accessor_result as *mut DBLevelRegionAccessorResult) }; assert_eq!(EQUAL, res); - let sl = s.lock().unwrap(); - assert_eq!(1, sl.call_level_regions); - assert_eq!(SMALLEST_USER_KEY, sl.smallest_user_key.as_ref().unwrap().as_slice()); - assert_eq!(LARGEST_USER_KEY, sl.largest_user_key.as_ref().unwrap().as_slice()); + { + let sl = s.lock().unwrap(); + assert_eq!(1, sl.call_level_regions); + assert_eq!(SMALLEST_USER_KEY, sl.smallest_user_key.as_ref().unwrap().as_slice()); + assert_eq!(LARGEST_USER_KEY, sl.largest_user_key.as_ref().unwrap().as_slice()); + } unsafe { crocksdb_ffi::crocksdb_level_region_accessor_destroy(accessor); } From 4e31ccd3deb06cbaa531d94b0728bed055028d1e Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Sat, 20 Mar 2021 11:46:38 +0800 Subject: [PATCH 26/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 488f6c70c..50fa66b94 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 488f6c70c9eb7a11c087f51c3c351cdbee373927 +Subproject commit 50fa66b94fdbb23df976f941ba40a651a2bcefc7 From a6a6421cd4c6030d00e747322abdaf03c572a9b2 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Sat, 20 Mar 2021 14:45:24 +0800 Subject: [PATCH 27/52] update submodule --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 50fa66b94..5dcd6c86e 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 50fa66b94fdbb23df976f941ba40a651a2bcefc7 +Subproject commit 5dcd6c86ecd9b808c7f56d9de595b480349f8f49 From 0fdc95ff3708107d97077fa00116e5d2bbea0b1c Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Sat, 20 Mar 2021 14:54:30 +0800 Subject: [PATCH 28/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 5dcd6c86e..656c78097 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 5dcd6c86ecd9b808c7f56d9de595b480349f8f49 +Subproject commit 656c780977cef61516aa7cb0193a32a8c601fb69 From 87d0cdce9d042fdec0dcec1045bc742e2c21d1f1 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 22 Mar 2021 14:29:09 +0800 Subject: [PATCH 29/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 656c78097..91ffffebc 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 656c780977cef61516aa7cb0193a32a8c601fb69 +Subproject commit 91ffffebc32c82b8576d34e2e664fbdd5372271e From a8f5e596b7af8b3d5dacc53db73366ab5a1a899f Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 22 Mar 2021 15:22:06 +0800 Subject: [PATCH 30/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 91ffffebc..9c959be94 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 91ffffebc32c82b8576d34e2e664fbdd5372271e +Subproject commit 9c959be9429b4c65767ef2e91977817fb53db8b0 From abdf4975b331313c9b3f7a4428298f80943f7434 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 22 Mar 2021 16:27:23 +0800 Subject: [PATCH 31/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 9c959be94..b2786552a 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 9c959be9429b4c65767ef2e91977817fb53db8b0 +Subproject commit b2786552a8c28218d93c51cfc2dd1504577ddd71 From 8210d31b6ce4b70d5d3291d285345f9824531a9d Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 22 Mar 2021 17:06:02 +0800 Subject: [PATCH 32/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index b2786552a..4b3d9d3ef 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit b2786552a8c28218d93c51cfc2dd1504577ddd71 +Subproject commit 4b3d9d3ef0b97ff354ee1540b4083aae4bc7648a From e4a3357d864fa74fa3b4552b90780f25d002f73e Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 22 Mar 2021 23:24:09 +0800 Subject: [PATCH 33/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 4b3d9d3ef..dfd9b5c20 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 4b3d9d3ef0b97ff354ee1540b4083aae4bc7648a +Subproject commit dfd9b5c20f98045cbb6d4814b61e9663dd9849cc From 833b29e7feec00c545d35503613515140dc03bde Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Tue, 23 Mar 2021 09:51:24 +0800 Subject: [PATCH 34/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index dfd9b5c20..48ebf6036 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit dfd9b5c20f98045cbb6d4814b61e9663dd9849cc +Subproject commit 48ebf6036772a4fc20dad80f08e7fb427944be1e From 42ecf43b8f9de4962d16652f2159d7493f78ed72 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 24 Mar 2021 14:30:24 +0800 Subject: [PATCH 35/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 48ebf6036..7e39c8cb7 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 48ebf6036772a4fc20dad80f08e7fb427944be1e +Subproject commit 7e39c8cb7ea4906524b26bbad297086664a17411 From 32d5566800942350999550dd1be2a7030de533f0 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 24 Mar 2021 16:36:39 +0800 Subject: [PATCH 36/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 7e39c8cb7..1133d7385 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 7e39c8cb7ea4906524b26bbad297086664a17411 +Subproject commit 1133d738524c8d4c791c350c5799c6000fca171c From 5a823ea6b3d5d7ea9048b886a95f419d103bf7e8 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 24 Mar 2021 18:40:29 +0800 Subject: [PATCH 37/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 1133d7385..4fa9ca733 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 1133d738524c8d4c791c350c5799c6000fca171c +Subproject commit 4fa9ca733e77dd8c9f879b0553ab01ea3a62bd75 From 962ff760017ab8041ef567dc46d4ccc8966bfaf5 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 24 Mar 2021 20:22:14 +0800 Subject: [PATCH 38/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 4fa9ca733..3964f10e7 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 4fa9ca733e77dd8c9f879b0553ab01ea3a62bd75 +Subproject commit 3964f10e78a6782fed74227a50dcc9eacb47f973 From 5e0d9a519c980b764c2829b8a83a6e0541b810db Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Wed, 24 Mar 2021 21:19:58 +0800 Subject: [PATCH 39/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 3964f10e7..18e484a07 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 3964f10e78a6782fed74227a50dcc9eacb47f973 +Subproject commit 18e484a07a163b8c51f2954c1176400f40f575f2 From bde18289b9cd9721adbe783913a6d10faa33a98b Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Thu, 25 Mar 2021 10:27:45 +0800 Subject: [PATCH 40/52] update rust-rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 18e484a07..e53b1c637 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 18e484a07a163b8c51f2954c1176400f40f575f2 +Subproject commit e53b1c63747f46ef887940df6d655b8af3f41737 From cb067d83e0a2b4bd00e7935afb84e845917c0caa Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Thu, 25 Mar 2021 12:33:21 +0800 Subject: [PATCH 41/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index e53b1c637..5cd0c2dbf 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit e53b1c63747f46ef887940df6d655b8af3f41737 +Subproject commit 5cd0c2dbf87f809b3e6d76d223635d278042c5db From b688a1744ec0f8638f8bf62ae786766ab6e6eaab Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Thu, 25 Mar 2021 15:07:39 +0800 Subject: [PATCH 42/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 5cd0c2dbf..52fee94c3 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 5cd0c2dbf87f809b3e6d76d223635d278042c5db +Subproject commit 52fee94c3df86b4dff9424918c4ced9cef59f866 From 474ce1cc5c53cd478696c5eebd65dfefd5c9566b Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Thu, 25 Mar 2021 17:17:18 +0800 Subject: [PATCH 43/52] debug --- librocksdb_sys/crocksdb/c.cc | 2 +- librocksdb_sys/rocksdb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index 2523b78b9..5583c4885 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -6175,7 +6175,7 @@ crocksdb_sst_partitioner_t* crocksdb_sst_partitioner_factory_create_partitioner( crocksdb_level_region_accessor_request_t* crocksdb_level_region_accessor_request_create() { auto* req = new crocksdb_level_region_accessor_request_t; req->rep = - new AccessorRequest(req->smallest_user_key, req->largest_user_key); + new AccessorRequest(&req->smallest_user_key, &req->largest_user_key); return req; } diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 52fee94c3..7efba501c 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 52fee94c3df86b4dff9424918c4ced9cef59f866 +Subproject commit 7efba501c389089b3c8da8fdc589a8d959f07063 From 98027411b4672aca51b79881d79fdc925c501ea7 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Fri, 26 Mar 2021 20:43:46 +0800 Subject: [PATCH 44/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 7efba501c..349aa6eb7 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 7efba501c389089b3c8da8fdc589a8d959f07063 +Subproject commit 349aa6eb7a1c3e6d3d191ada34b544780d420bb2 From ae51d630eafcad353c68fcb1965fe8b9a2c31294 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Sat, 27 Mar 2021 13:46:39 +0800 Subject: [PATCH 45/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 349aa6eb7..2fe022e0c 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 349aa6eb7a1c3e6d3d191ada34b544780d420bb2 +Subproject commit 2fe022e0c1e78e23b59ceb27d369e5be78cc84c3 From c552850d26256dc265ad3e396ff1877677b71427 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 29 Mar 2021 09:37:22 +0800 Subject: [PATCH 46/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 2fe022e0c..6302440a7 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 2fe022e0c1e78e23b59ceb27d369e5be78cc84c3 +Subproject commit 6302440a7ea78bf4ab0946840f72d466610a7e43 From 8f2e300125a239b9d8ded36890be45a98403ed7a Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 29 Mar 2021 10:24:32 +0800 Subject: [PATCH 47/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 6302440a7..a3067de53 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 6302440a7ea78bf4ab0946840f72d466610a7e43 +Subproject commit a3067de53c471e9b31281ff8ac8ec92bf3d2a725 From 32a81a722ca262ef410a739054a174201d92fdfd Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 29 Mar 2021 14:20:33 +0800 Subject: [PATCH 48/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index a3067de53..afeecae86 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit a3067de53c471e9b31281ff8ac8ec92bf3d2a725 +Subproject commit afeecae865bc889bce251128daff2fc74af63d69 From c58f0bc95395d844b6b5189d516a9a0006072bc9 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 29 Mar 2021 15:39:57 +0800 Subject: [PATCH 49/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index afeecae86..3e4f91a3c 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit afeecae865bc889bce251128daff2fc74af63d69 +Subproject commit 3e4f91a3cbba752be49d9ee363808e55b4fee5c3 From 635b4630596bd72daa4f0dafc6757a73949cfa05 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 29 Mar 2021 16:50:03 +0800 Subject: [PATCH 50/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index 3e4f91a3c..b585c2e13 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit 3e4f91a3cbba752be49d9ee363808e55b4fee5c3 +Subproject commit b585c2e139e20a9c2e44668d03611874e12618c5 From 1c1c55735cef269237483b73385b54e9a48a6cdb Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Mon, 29 Mar 2021 19:12:03 +0800 Subject: [PATCH 51/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index b585c2e13..f1d5f0977 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit b585c2e139e20a9c2e44668d03611874e12618c5 +Subproject commit f1d5f09771e6246dc82c0c730733d3a6dbec1310 From cb1734e9afe27cfe6c79a7779a2043fe10afa587 Mon Sep 17 00:00:00 2001 From: CheneyDing <1017472599@qq.com> Date: Fri, 16 Apr 2021 20:15:54 +0800 Subject: [PATCH 52/52] update submodule rocksdb --- librocksdb_sys/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/rocksdb b/librocksdb_sys/rocksdb index f1d5f0977..9a9b3373d 160000 --- a/librocksdb_sys/rocksdb +++ b/librocksdb_sys/rocksdb @@ -1 +1 @@ -Subproject commit f1d5f09771e6246dc82c0c730733d3a6dbec1310 +Subproject commit 9a9b3373dc0feeb2530b2074de3db194995edc9a