Vary bloom_bits in db_crashtest (#6103)
Summary: Especially with non-integral bits/key now supported, db_crashtest should vary the bloom_bits configuration. The probabilities look like this: 1/2 chance of a uniform int from 0 to 19. This includes overall 1/40 chance of 0 which disables the bloom filter. 1/2 chance of a float from a lognormal distribution with a median of 10. This always produces positive values but with a decent chance of < 1 (overall ~1/40) or > 100 (overall ~1/40), the enforced/coerced implementation limits. Pull Request resolved: https://github.com/facebook/rocksdb/pull/6103 Test Plan: start 'make blackbox_crash_test' several times and look at configuration output Differential Revision: D18734877 Pulled By: pdillinger fbshipit-source-id: 4a38cb057d3b3fc1327f93199f65b9a9ffbd7316
This commit is contained in:
parent
a68dff5c35
commit
6380df5e10
@ -133,7 +133,7 @@ DECLARE_uint64(compaction_ttl);
|
|||||||
DECLARE_bool(allow_concurrent_memtable_write);
|
DECLARE_bool(allow_concurrent_memtable_write);
|
||||||
DECLARE_bool(enable_write_thread_adaptive_yield);
|
DECLARE_bool(enable_write_thread_adaptive_yield);
|
||||||
DECLARE_int32(reopen);
|
DECLARE_int32(reopen);
|
||||||
DECLARE_int32(bloom_bits);
|
DECLARE_double(bloom_bits);
|
||||||
DECLARE_bool(use_block_based_filter);
|
DECLARE_bool(use_block_based_filter);
|
||||||
DECLARE_bool(partition_filters);
|
DECLARE_bool(partition_filters);
|
||||||
DECLARE_int32(index_type);
|
DECLARE_int32(index_type);
|
||||||
@ -342,6 +342,17 @@ extern inline std::string StringToHex(const std::string& str) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unified output format for double parameters
|
||||||
|
extern inline std::string FormatDoubleParam(double param) {
|
||||||
|
return std::to_string(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure that double parameter is a value we can reproduce by
|
||||||
|
// re-inputting the value printed.
|
||||||
|
extern inline void SanitizeDoubleParam(double* param) {
|
||||||
|
*param = std::atof(FormatDoubleParam(*param).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
extern void PoolSizeChangeThread(void* v);
|
extern void PoolSizeChangeThread(void* v);
|
||||||
|
|
||||||
extern void PrintKeyValue(int cf, uint64_t key, const char* value, size_t sz);
|
extern void PrintKeyValue(int cf, uint64_t key, const char* value, size_t sz);
|
||||||
|
@ -275,9 +275,9 @@ DEFINE_int32(reopen, 10, "Number of times database reopens");
|
|||||||
static const bool FLAGS_reopen_dummy __attribute__((__unused__)) =
|
static const bool FLAGS_reopen_dummy __attribute__((__unused__)) =
|
||||||
RegisterFlagValidator(&FLAGS_reopen, &ValidateInt32Positive);
|
RegisterFlagValidator(&FLAGS_reopen, &ValidateInt32Positive);
|
||||||
|
|
||||||
DEFINE_int32(bloom_bits, 10,
|
DEFINE_double(bloom_bits, 10,
|
||||||
"Bloom filter bits per key. "
|
"Bloom filter bits per key. "
|
||||||
"Negative means use default settings.");
|
"Negative means use default settings.");
|
||||||
|
|
||||||
DEFINE_bool(use_block_based_filter, false,
|
DEFINE_bool(use_block_based_filter, false,
|
||||||
"use block based filter"
|
"use block based filter"
|
||||||
|
@ -1310,6 +1310,8 @@ void StressTest::PrintEnv() const {
|
|||||||
fprintf(stdout, "Compression : %s\n", compression.c_str());
|
fprintf(stdout, "Compression : %s\n", compression.c_str());
|
||||||
std::string checksum = ChecksumTypeToString(FLAGS_checksum_type_e);
|
std::string checksum = ChecksumTypeToString(FLAGS_checksum_type_e);
|
||||||
fprintf(stdout, "Checksum type : %s\n", checksum.c_str());
|
fprintf(stdout, "Checksum type : %s\n", checksum.c_str());
|
||||||
|
fprintf(stdout, "Bloom bits / key : %s\n",
|
||||||
|
FormatDoubleParam(FLAGS_bloom_bits).c_str());
|
||||||
fprintf(stdout, "Max subcompactions : %" PRIu64 "\n",
|
fprintf(stdout, "Max subcompactions : %" PRIu64 "\n",
|
||||||
FLAGS_subcompactions);
|
FLAGS_subcompactions);
|
||||||
fprintf(stdout, "Use MultiGet : %s\n",
|
fprintf(stdout, "Use MultiGet : %s\n",
|
||||||
|
@ -34,6 +34,10 @@ int db_stress_tool(int argc, char** argv) {
|
|||||||
" [OPTIONS]...");
|
" [OPTIONS]...");
|
||||||
ParseCommandLineFlags(&argc, &argv, true);
|
ParseCommandLineFlags(&argc, &argv, true);
|
||||||
|
|
||||||
|
SanitizeDoubleParam(&FLAGS_bloom_bits);
|
||||||
|
SanitizeDoubleParam(&FLAGS_memtable_prefix_bloom_size_ratio);
|
||||||
|
SanitizeDoubleParam(&FLAGS_max_bytes_for_level_multiplier);
|
||||||
|
|
||||||
if (FLAGS_statistics) {
|
if (FLAGS_statistics) {
|
||||||
dbstats = rocksdb::CreateDBStatistics();
|
dbstats = rocksdb::CreateDBStatistics();
|
||||||
if (FLAGS_enable_secondary) {
|
if (FLAGS_enable_secondary) {
|
||||||
|
@ -25,6 +25,8 @@ expected_values_file = tempfile.NamedTemporaryFile()
|
|||||||
default_params = {
|
default_params = {
|
||||||
"acquire_snapshot_one_in": 10000,
|
"acquire_snapshot_one_in": 10000,
|
||||||
"block_size": 16384,
|
"block_size": 16384,
|
||||||
|
"bloom_bits": lambda: random.choice([random.randint(0,19),
|
||||||
|
random.lognormvariate(2.3, 1.3)]),
|
||||||
"cache_index_and_filter_blocks": lambda: random.randint(0, 1),
|
"cache_index_and_filter_blocks": lambda: random.randint(0, 1),
|
||||||
"cache_size": 1048576,
|
"cache_size": 1048576,
|
||||||
"checkpoint_one_in": 1000000,
|
"checkpoint_one_in": 1000000,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user