Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions db/c.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5398,6 +5398,16 @@ size_t rocksdb_options_get_memtable_huge_page_size(rocksdb_options_t* opt) {
return opt->rep.memtable_huge_page_size;
}

void rocksdb_options_set_memtable_batch_lookup_optimization(
rocksdb_options_t* opt, unsigned char v) {
opt->rep.memtable_batch_lookup_optimization = v;
}

unsigned char rocksdb_options_get_memtable_batch_lookup_optimization(
rocksdb_options_t* opt) {
return opt->rep.memtable_batch_lookup_optimization;
}

void rocksdb_options_set_hash_skip_list_rep(rocksdb_options_t* opt,
size_t bucket_count,
int32_t skiplist_height,
Expand Down
11 changes: 11 additions & 0 deletions db/c_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -2812,6 +2812,15 @@ int main(int argc, char** argv) {
rocksdb_options_set_memtable_huge_page_size(o, 25);
CheckCondition(25 == rocksdb_options_get_memtable_huge_page_size(o));

// memtable_batch_lookup_optimization defaults to 0; flip to 1 to verify
// the setter is wired through to the underlying C++ ColumnFamilyOptions
// field.
CheckCondition(0 ==
rocksdb_options_get_memtable_batch_lookup_optimization(o));
rocksdb_options_set_memtable_batch_lookup_optimization(o, 1);
CheckCondition(1 ==
rocksdb_options_get_memtable_batch_lookup_optimization(o));

rocksdb_options_set_max_successive_merges(o, 26);
CheckCondition(26 == rocksdb_options_get_max_successive_merges(o));

Expand Down Expand Up @@ -2998,6 +3007,8 @@ int main(int argc, char** argv) {
rocksdb_options_get_memtable_prefix_bloom_size_ratio(copy));
CheckCondition(24 == rocksdb_options_get_max_compaction_bytes(copy));
CheckCondition(25 == rocksdb_options_get_memtable_huge_page_size(copy));
CheckCondition(
1 == rocksdb_options_get_memtable_batch_lookup_optimization(copy));
CheckCondition(26 == rocksdb_options_get_max_successive_merges(copy));
CheckCondition(27 == rocksdb_options_get_bloom_locality(copy));
CheckCondition(1 == rocksdb_options_get_inplace_update_support(copy));
Expand Down
6 changes: 6 additions & 0 deletions include/rocksdb/c.h
Original file line number Diff line number Diff line change
Expand Up @@ -1990,6 +1990,12 @@ extern ROCKSDB_LIBRARY_API void rocksdb_options_set_memtable_huge_page_size(
extern ROCKSDB_LIBRARY_API size_t
rocksdb_options_get_memtable_huge_page_size(rocksdb_options_t*);

extern ROCKSDB_LIBRARY_API void
rocksdb_options_set_memtable_batch_lookup_optimization(rocksdb_options_t*,
unsigned char);
extern ROCKSDB_LIBRARY_API unsigned char
rocksdb_options_get_memtable_batch_lookup_optimization(rocksdb_options_t*);

extern ROCKSDB_LIBRARY_API void rocksdb_options_set_max_successive_merges(
rocksdb_options_t*, size_t);
extern ROCKSDB_LIBRARY_API size_t
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added `rocksdb_options_set_memtable_batch_lookup_optimization()` and `rocksdb_options_get_memtable_batch_lookup_optimization()` to the C API, exposing the existing `AdvancedColumnFamilyOptions::memtable_batch_lookup_optimization` field. This allows C API users (and downstream language bindings) to enable the skip-list memtable's batch-lookup optimization for `MultiGet`, which caches the search path between consecutive keys and reduces per-key cost from O(log N) to O(log d) where d is the distance between consecutive keys.
Loading