Modified recommendation for column families.
Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
.set_description("Enable use of rocksdb column families for bluestore metadata"),
Option("bluestore_rocksdb_cfs", Option::TYPE_STR, Option::LEVEL_DEV)
- .set_default("m(5,0-8) O(7,0-13) L")
+ .set_default("m(5) O(7,0-13) L")
.set_description("Definition of column families and their sharding")
.set_long_description("Space separated list of elements: column_def [ '=' rocksdb_options ]. "
"column_def := column_name [ '(' shard_count [ ',' hash_begin '-' [ hash_end ] ] ')' ]. "
"Example: 'I=write_buffer_size=1048576 O(6) m(7,10-)'. "
- "Interval [hash_begin..hash_end) defines characters to use for hash calculation."),
+ "Interval [hash_begin..hash_end) defines characters to use for hash calculation. "
+ "Recommended hash ranges: O(0-13) P(0-8) m(0-16). "
+ "Sharding of S,T,C,M,B prefixes is inadvised"),
Option("bluestore_fsck_on_mount", Option::TYPE_BOOL, Option::LEVEL_DEV)
.set_default(false)
rocksdb::ColumnFamilyHandle *RocksDBStore::get_cf_handle(const std::string& prefix, const std::string& key) {
auto iter = cf_handles.find(prefix);
- if (iter == cf_handles.end())
+ if (iter == cf_handles.end()) {
return nullptr;
- else {
+ } else {
if (iter->second.handles.size() == 1) {
return iter->second.handles[0];
} else {
rocksdb::ColumnFamilyHandle *RocksDBStore::get_cf_handle(const std::string& prefix, const char* key, size_t keylen) {
auto iter = cf_handles.find(prefix);
- if (iter == cf_handles.end())
+ if (iter == cf_handles.end()) {
return nullptr;
- else {
+ } else {
if (iter->second.handles.size() == 1) {
return iter->second.handles[0];
} else {
fini();
}
+TEST_P(KVTest, ShardingRMRange) {
+ if(string(GetParam()) != "rocksdb")
+ return;
+ std::string cfs("O(7)=");
+ ASSERT_EQ(0, db->create_and_open(cout, cfs));
+ {
+ KeyValueDB::Transaction t = db->get_transaction();
+ for (size_t i = 0; i < 1000; i++) {
+ bufferlist value;
+ char* a;
+ ASSERT_EQ(asprintf(&a, "key%3.3ld", i), 6);
+ value.append(a);
+ t->set("O", a, value);
+ free(a);
+ }
+ db->submit_transaction_sync(t);
+ }
+
+ {
+ KeyValueDB::Transaction t = db->get_transaction();
+ t->rm_range_keys("O", "key277", "key467");
+ db->submit_transaction_sync(t);
+ }
+
+ for (size_t i = 0; i < 1000; i++) {
+ char* key;
+ ASSERT_EQ(asprintf(&key, "key%3.3ld", i), 6);
+ bufferlist value;
+ int r = db->get("O", key, &value);
+ ASSERT_EQ(r, (i >= 277 && i < 467 ? -ENOENT : 0));
+ free(key);
+ }
+
+ fini();
+}
+
+
TEST_P(KVTest, RocksDBColumnFamilyTest) {
if(string(GetParam()) != "rocksdb")
return;