Fix C api memtable rep bugs. (#1328)
This commit is contained in:
parent
eb1d4d53c8
commit
a10e8a056d
22
db/c.cc
22
db/c.cc
@ -1783,11 +1783,7 @@ void rocksdb_options_prepare_for_bulk_load(rocksdb_options_t* opt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void rocksdb_options_set_memtable_vector_rep(rocksdb_options_t *opt) {
|
void rocksdb_options_set_memtable_vector_rep(rocksdb_options_t *opt) {
|
||||||
static rocksdb::VectorRepFactory* factory = 0;
|
opt->rep.memtable_factory.reset(new rocksdb::VectorRepFactory);
|
||||||
if (!factory) {
|
|
||||||
factory = new rocksdb::VectorRepFactory;
|
|
||||||
}
|
|
||||||
opt->rep.memtable_factory.reset(factory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rocksdb_options_set_memtable_prefix_bloom_size_ratio(
|
void rocksdb_options_set_memtable_prefix_bloom_size_ratio(
|
||||||
@ -1803,36 +1799,26 @@ void rocksdb_options_set_memtable_huge_page_size(rocksdb_options_t* opt,
|
|||||||
void rocksdb_options_set_hash_skip_list_rep(
|
void rocksdb_options_set_hash_skip_list_rep(
|
||||||
rocksdb_options_t *opt, size_t bucket_count,
|
rocksdb_options_t *opt, size_t bucket_count,
|
||||||
int32_t skiplist_height, int32_t skiplist_branching_factor) {
|
int32_t skiplist_height, int32_t skiplist_branching_factor) {
|
||||||
static rocksdb::MemTableRepFactory* factory = 0;
|
rocksdb::MemTableRepFactory* factory = rocksdb::NewHashSkipListRepFactory(
|
||||||
if (!factory) {
|
|
||||||
factory = rocksdb::NewHashSkipListRepFactory(
|
|
||||||
bucket_count, skiplist_height, skiplist_branching_factor);
|
bucket_count, skiplist_height, skiplist_branching_factor);
|
||||||
}
|
|
||||||
opt->rep.memtable_factory.reset(factory);
|
opt->rep.memtable_factory.reset(factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rocksdb_options_set_hash_link_list_rep(
|
void rocksdb_options_set_hash_link_list_rep(
|
||||||
rocksdb_options_t *opt, size_t bucket_count) {
|
rocksdb_options_t *opt, size_t bucket_count) {
|
||||||
static rocksdb::MemTableRepFactory* factory = 0;
|
opt->rep.memtable_factory.reset(rocksdb::NewHashLinkListRepFactory(bucket_count));
|
||||||
if (!factory) {
|
|
||||||
factory = rocksdb::NewHashLinkListRepFactory(bucket_count);
|
|
||||||
}
|
|
||||||
opt->rep.memtable_factory.reset(factory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rocksdb_options_set_plain_table_factory(
|
void rocksdb_options_set_plain_table_factory(
|
||||||
rocksdb_options_t *opt, uint32_t user_key_len, int bloom_bits_per_key,
|
rocksdb_options_t *opt, uint32_t user_key_len, int bloom_bits_per_key,
|
||||||
double hash_table_ratio, size_t index_sparseness) {
|
double hash_table_ratio, size_t index_sparseness) {
|
||||||
static rocksdb::TableFactory* factory = 0;
|
|
||||||
if (!factory) {
|
|
||||||
rocksdb::PlainTableOptions options;
|
rocksdb::PlainTableOptions options;
|
||||||
options.user_key_len = user_key_len;
|
options.user_key_len = user_key_len;
|
||||||
options.bloom_bits_per_key = bloom_bits_per_key;
|
options.bloom_bits_per_key = bloom_bits_per_key;
|
||||||
options.hash_table_ratio = hash_table_ratio;
|
options.hash_table_ratio = hash_table_ratio;
|
||||||
options.index_sparseness = index_sparseness;
|
options.index_sparseness = index_sparseness;
|
||||||
|
|
||||||
factory = rocksdb::NewPlainTableFactory(options);
|
rocksdb::TableFactory* factory = rocksdb::NewPlainTableFactory(options);
|
||||||
}
|
|
||||||
opt->rep.table_factory.reset(factory);
|
opt->rep.table_factory.reset(factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
22
db/c_test.c
22
db/c_test.c
@ -944,6 +944,28 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Simple sanity check that setting memtable rep works.
|
||||||
|
StartPhase("memtable_reps");
|
||||||
|
{
|
||||||
|
// Create database with vector memtable.
|
||||||
|
rocksdb_close(db);
|
||||||
|
rocksdb_destroy_db(options, dbname, &err);
|
||||||
|
CheckNoError(err);
|
||||||
|
|
||||||
|
rocksdb_options_set_memtable_vector_rep(options);
|
||||||
|
db = rocksdb_open(options, dbname, &err);
|
||||||
|
CheckNoError(err);
|
||||||
|
|
||||||
|
// Create database with hash skiplist memtable.
|
||||||
|
rocksdb_close(db);
|
||||||
|
rocksdb_destroy_db(options, dbname, &err);
|
||||||
|
CheckNoError(err);
|
||||||
|
|
||||||
|
rocksdb_options_set_hash_skip_list_rep(options, 5000, 4, 4);
|
||||||
|
db = rocksdb_open(options, dbname, &err);
|
||||||
|
CheckNoError(err);
|
||||||
|
}
|
||||||
|
|
||||||
StartPhase("cleanup");
|
StartPhase("cleanup");
|
||||||
rocksdb_close(db);
|
rocksdb_close(db);
|
||||||
rocksdb_options_destroy(options);
|
rocksdb_options_destroy(options);
|
||||||
|
Loading…
Reference in New Issue
Block a user