Fix C api memtable rep bugs. (#1328)

This commit is contained in:
Adam Faulkner 2016-09-12 15:31:42 -07:00 committed by Islam AbdelRahman
parent eb1d4d53c8
commit a10e8a056d
2 changed files with 32 additions and 24 deletions

22
db/c.cc
View File

@ -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);
} }

View File

@ -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);