mirror of https://github.com/facebook/rocksdb.git
Move static variables out of the header file
Summary: Static variables in header files will be instantiated in every file that includes the header file. This patch moves some of them from options_helper.h to its .cc files. It also moves the static variable out of the offset_of since the template function could also lead to multiple instantiation perhaps due to inlining. Fixes https://github.com/facebook/rocksdb/issues/3176 Closes https://github.com/facebook/rocksdb/pull/3178 Differential Revision: D6363794 Pulled By: maysamyabandeh fbshipit-source-id: d0a07f061b4d992ab4e0de2706e622131d258fdd
This commit is contained in:
parent
2d04ed65e4
commit
0213990b3a
|
@ -183,6 +183,29 @@ ColumnFamilyOptions BuildColumnFamilyOptions(
|
|||
return cf_opts;
|
||||
}
|
||||
|
||||
std::map<CompactionStyle, std::string>
|
||||
OptionsHelper::compaction_style_to_string = {
|
||||
{kCompactionStyleLevel, "kCompactionStyleLevel"},
|
||||
{kCompactionStyleUniversal, "kCompactionStyleUniversal"},
|
||||
{kCompactionStyleFIFO, "kCompactionStyleFIFO"},
|
||||
{kCompactionStyleNone, "kCompactionStyleNone"}};
|
||||
|
||||
std::map<CompactionPri, std::string> OptionsHelper::compaction_pri_to_string = {
|
||||
{kByCompensatedSize, "kByCompensatedSize"},
|
||||
{kOldestLargestSeqFirst, "kOldestLargestSeqFirst"},
|
||||
{kOldestSmallestSeqFirst, "kOldestSmallestSeqFirst"},
|
||||
{kMinOverlappingRatio, "kMinOverlappingRatio"}};
|
||||
|
||||
std::map<CompactionStopStyle, std::string>
|
||||
OptionsHelper::compaction_stop_style_to_string = {
|
||||
{kCompactionStopStyleSimilarSize, "kCompactionStopStyleSimilarSize"},
|
||||
{kCompactionStopStyleTotalSize, "kCompactionStopStyleTotalSize"}};
|
||||
|
||||
std::unordered_map<std::string, ChecksumType>
|
||||
OptionsHelper::checksum_type_string_map = {{"kNoChecksum", kNoChecksum},
|
||||
{"kCRC32c", kCRC32c},
|
||||
{"kxxHash", kxxHash}};
|
||||
|
||||
#ifndef ROCKSDB_LITE
|
||||
|
||||
template <typename T>
|
||||
|
@ -1194,6 +1217,577 @@ Status GetTableFactoryFromMap(
|
|||
return Status::OK();
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, OptionTypeInfo>
|
||||
OptionsHelper::db_options_type_info = {
|
||||
/*
|
||||
// not yet supported
|
||||
Env* env;
|
||||
std::shared_ptr<Cache> row_cache;
|
||||
std::shared_ptr<DeleteScheduler> delete_scheduler;
|
||||
std::shared_ptr<Logger> info_log;
|
||||
std::shared_ptr<RateLimiter> rate_limiter;
|
||||
std::shared_ptr<Statistics> statistics;
|
||||
std::vector<DbPath> db_paths;
|
||||
std::vector<std::shared_ptr<EventListener>> listeners;
|
||||
*/
|
||||
{"advise_random_on_open",
|
||||
{offsetof(struct DBOptions, advise_random_on_open),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_mmap_reads",
|
||||
{offsetof(struct DBOptions, allow_mmap_reads), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_fallocate",
|
||||
{offsetof(struct DBOptions, allow_fallocate), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_mmap_writes",
|
||||
{offsetof(struct DBOptions, allow_mmap_writes), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_direct_reads",
|
||||
{offsetof(struct DBOptions, use_direct_reads), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_direct_writes",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false,
|
||||
0}},
|
||||
{"use_direct_io_for_flush_and_compaction",
|
||||
{offsetof(struct DBOptions, use_direct_io_for_flush_and_compaction),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_2pc",
|
||||
{offsetof(struct DBOptions, allow_2pc), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_os_buffer",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"create_if_missing",
|
||||
{offsetof(struct DBOptions, create_if_missing), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"create_missing_column_families",
|
||||
{offsetof(struct DBOptions, create_missing_column_families),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"disableDataSync",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false,
|
||||
0}},
|
||||
{"disable_data_sync", // for compatibility
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false,
|
||||
0}},
|
||||
{"enable_thread_tracking",
|
||||
{offsetof(struct DBOptions, enable_thread_tracking),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"error_if_exists",
|
||||
{offsetof(struct DBOptions, error_if_exists), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"is_fd_close_on_exec",
|
||||
{offsetof(struct DBOptions, is_fd_close_on_exec), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"paranoid_checks",
|
||||
{offsetof(struct DBOptions, paranoid_checks), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"skip_log_error_on_recovery",
|
||||
{offsetof(struct DBOptions, skip_log_error_on_recovery),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"skip_stats_update_on_db_open",
|
||||
{offsetof(struct DBOptions, skip_stats_update_on_db_open),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"new_table_reader_for_compaction_inputs",
|
||||
{offsetof(struct DBOptions, new_table_reader_for_compaction_inputs),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"compaction_readahead_size",
|
||||
{offsetof(struct DBOptions, compaction_readahead_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, compaction_readahead_size)}},
|
||||
{"random_access_max_buffer_size",
|
||||
{offsetof(struct DBOptions, random_access_max_buffer_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_adaptive_mutex",
|
||||
{offsetof(struct DBOptions, use_adaptive_mutex), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_fsync",
|
||||
{offsetof(struct DBOptions, use_fsync), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_background_jobs",
|
||||
{offsetof(struct DBOptions, max_background_jobs), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_background_jobs)}},
|
||||
{"max_background_compactions",
|
||||
{offsetof(struct DBOptions, max_background_compactions),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_background_compactions)}},
|
||||
{"base_background_compactions",
|
||||
{offsetof(struct DBOptions, base_background_compactions),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, base_background_compactions)}},
|
||||
{"max_background_flushes",
|
||||
{offsetof(struct DBOptions, max_background_flushes), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_file_opening_threads",
|
||||
{offsetof(struct DBOptions, max_file_opening_threads),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_open_files",
|
||||
{offsetof(struct DBOptions, max_open_files), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_open_files)}},
|
||||
{"table_cache_numshardbits",
|
||||
{offsetof(struct DBOptions, table_cache_numshardbits),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, false, 0}},
|
||||
{"db_write_buffer_size",
|
||||
{offsetof(struct DBOptions, db_write_buffer_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"keep_log_file_num",
|
||||
{offsetof(struct DBOptions, keep_log_file_num), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"recycle_log_file_num",
|
||||
{offsetof(struct DBOptions, recycle_log_file_num), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"log_file_time_to_roll",
|
||||
{offsetof(struct DBOptions, log_file_time_to_roll), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"manifest_preallocation_size",
|
||||
{offsetof(struct DBOptions, manifest_preallocation_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_log_file_size",
|
||||
{offsetof(struct DBOptions, max_log_file_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"db_log_dir",
|
||||
{offsetof(struct DBOptions, db_log_dir), OptionType::kString,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"wal_dir",
|
||||
{offsetof(struct DBOptions, wal_dir), OptionType::kString,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_subcompactions",
|
||||
{offsetof(struct DBOptions, max_subcompactions), OptionType::kUInt32T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"WAL_size_limit_MB",
|
||||
{offsetof(struct DBOptions, WAL_size_limit_MB), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"WAL_ttl_seconds",
|
||||
{offsetof(struct DBOptions, WAL_ttl_seconds), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"bytes_per_sync",
|
||||
{offsetof(struct DBOptions, bytes_per_sync), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, bytes_per_sync)}},
|
||||
{"delayed_write_rate",
|
||||
{offsetof(struct DBOptions, delayed_write_rate), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, delayed_write_rate)}},
|
||||
{"delete_obsolete_files_period_micros",
|
||||
{offsetof(struct DBOptions, delete_obsolete_files_period_micros),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions,
|
||||
delete_obsolete_files_period_micros)}},
|
||||
{"max_manifest_file_size",
|
||||
{offsetof(struct DBOptions, max_manifest_file_size),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_total_wal_size",
|
||||
{offsetof(struct DBOptions, max_total_wal_size), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_total_wal_size)}},
|
||||
{"wal_bytes_per_sync",
|
||||
{offsetof(struct DBOptions, wal_bytes_per_sync), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, wal_bytes_per_sync)}},
|
||||
{"stats_dump_period_sec",
|
||||
{offsetof(struct DBOptions, stats_dump_period_sec), OptionType::kUInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, stats_dump_period_sec)}},
|
||||
{"fail_if_options_file_error",
|
||||
{offsetof(struct DBOptions, fail_if_options_file_error),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"enable_pipelined_write",
|
||||
{offsetof(struct DBOptions, enable_pipelined_write),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_concurrent_memtable_write",
|
||||
{offsetof(struct DBOptions, allow_concurrent_memtable_write),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"wal_recovery_mode",
|
||||
{offsetof(struct DBOptions, wal_recovery_mode),
|
||||
OptionType::kWALRecoveryMode, OptionVerificationType::kNormal, false,
|
||||
0}},
|
||||
{"enable_write_thread_adaptive_yield",
|
||||
{offsetof(struct DBOptions, enable_write_thread_adaptive_yield),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"write_thread_slow_yield_usec",
|
||||
{offsetof(struct DBOptions, write_thread_slow_yield_usec),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, false, 0}},
|
||||
{"write_thread_max_yield_usec",
|
||||
{offsetof(struct DBOptions, write_thread_max_yield_usec),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, false, 0}},
|
||||
{"access_hint_on_compaction_start",
|
||||
{offsetof(struct DBOptions, access_hint_on_compaction_start),
|
||||
OptionType::kAccessHint, OptionVerificationType::kNormal, false, 0}},
|
||||
{"info_log_level",
|
||||
{offsetof(struct DBOptions, info_log_level), OptionType::kInfoLogLevel,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"dump_malloc_stats",
|
||||
{offsetof(struct DBOptions, dump_malloc_stats), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"avoid_flush_during_recovery",
|
||||
{offsetof(struct DBOptions, avoid_flush_during_recovery),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"avoid_flush_during_shutdown",
|
||||
{offsetof(struct DBOptions, avoid_flush_during_shutdown),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, avoid_flush_during_shutdown)}},
|
||||
{"writable_file_max_buffer_size",
|
||||
{offsetof(struct DBOptions, writable_file_max_buffer_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, writable_file_max_buffer_size)}},
|
||||
{"allow_ingest_behind",
|
||||
{offsetof(struct DBOptions, allow_ingest_behind), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, allow_ingest_behind)}},
|
||||
{"preserve_deletes",
|
||||
{offsetof(struct DBOptions, preserve_deletes), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, preserve_deletes)}},
|
||||
{"concurrent_prepare", // Deprecated by two_write_queues
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false,
|
||||
0}},
|
||||
{"two_write_queues",
|
||||
{offsetof(struct DBOptions, two_write_queues), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, two_write_queues)}},
|
||||
{"manual_wal_flush",
|
||||
{offsetof(struct DBOptions, manual_wal_flush), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, manual_wal_flush)}},
|
||||
{"seq_per_batch",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false,
|
||||
0}}};
|
||||
|
||||
std::unordered_map<std::string, CompressionType>
|
||||
OptionsHelper::compression_type_string_map = {
|
||||
{"kNoCompression", kNoCompression},
|
||||
{"kSnappyCompression", kSnappyCompression},
|
||||
{"kZlibCompression", kZlibCompression},
|
||||
{"kBZip2Compression", kBZip2Compression},
|
||||
{"kLZ4Compression", kLZ4Compression},
|
||||
{"kLZ4HCCompression", kLZ4HCCompression},
|
||||
{"kXpressCompression", kXpressCompression},
|
||||
{"kZSTD", kZSTD},
|
||||
{"kZSTDNotFinalCompression", kZSTDNotFinalCompression},
|
||||
{"kDisableCompressionOption", kDisableCompressionOption}};
|
||||
|
||||
std::unordered_map<std::string, BlockBasedTableOptions::IndexType>
|
||||
OptionsHelper::block_base_table_index_type_string_map = {
|
||||
{"kBinarySearch", BlockBasedTableOptions::IndexType::kBinarySearch},
|
||||
{"kHashSearch", BlockBasedTableOptions::IndexType::kHashSearch},
|
||||
{"kTwoLevelIndexSearch",
|
||||
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch}};
|
||||
|
||||
std::unordered_map<std::string, EncodingType>
|
||||
OptionsHelper::encoding_type_string_map = {{"kPlain", kPlain},
|
||||
{"kPrefix", kPrefix}};
|
||||
|
||||
std::unordered_map<std::string, CompactionStyle>
|
||||
OptionsHelper::compaction_style_string_map = {
|
||||
{"kCompactionStyleLevel", kCompactionStyleLevel},
|
||||
{"kCompactionStyleUniversal", kCompactionStyleUniversal},
|
||||
{"kCompactionStyleFIFO", kCompactionStyleFIFO},
|
||||
{"kCompactionStyleNone", kCompactionStyleNone}};
|
||||
|
||||
std::unordered_map<std::string, CompactionPri>
|
||||
OptionsHelper::compaction_pri_string_map = {
|
||||
{"kByCompensatedSize", kByCompensatedSize},
|
||||
{"kOldestLargestSeqFirst", kOldestLargestSeqFirst},
|
||||
{"kOldestSmallestSeqFirst", kOldestSmallestSeqFirst},
|
||||
{"kMinOverlappingRatio", kMinOverlappingRatio}};
|
||||
|
||||
std::unordered_map<std::string, WALRecoveryMode>
|
||||
OptionsHelper::wal_recovery_mode_string_map = {
|
||||
{"kTolerateCorruptedTailRecords",
|
||||
WALRecoveryMode::kTolerateCorruptedTailRecords},
|
||||
{"kAbsoluteConsistency", WALRecoveryMode::kAbsoluteConsistency},
|
||||
{"kPointInTimeRecovery", WALRecoveryMode::kPointInTimeRecovery},
|
||||
{"kSkipAnyCorruptedRecords",
|
||||
WALRecoveryMode::kSkipAnyCorruptedRecords}};
|
||||
|
||||
std::unordered_map<std::string, DBOptions::AccessHint>
|
||||
OptionsHelper::access_hint_string_map = {
|
||||
{"NONE", DBOptions::AccessHint::NONE},
|
||||
{"NORMAL", DBOptions::AccessHint::NORMAL},
|
||||
{"SEQUENTIAL", DBOptions::AccessHint::SEQUENTIAL},
|
||||
{"WILLNEED", DBOptions::AccessHint::WILLNEED}};
|
||||
|
||||
std::unordered_map<std::string, InfoLogLevel>
|
||||
OptionsHelper::info_log_level_string_map = {
|
||||
{"DEBUG_LEVEL", InfoLogLevel::DEBUG_LEVEL},
|
||||
{"INFO_LEVEL", InfoLogLevel::INFO_LEVEL},
|
||||
{"WARN_LEVEL", InfoLogLevel::WARN_LEVEL},
|
||||
{"ERROR_LEVEL", InfoLogLevel::ERROR_LEVEL},
|
||||
{"FATAL_LEVEL", InfoLogLevel::FATAL_LEVEL},
|
||||
{"HEADER_LEVEL", InfoLogLevel::HEADER_LEVEL}};
|
||||
|
||||
ColumnFamilyOptions OptionsHelper::dummy_cf_options;
|
||||
CompactionOptionsFIFO OptionsHelper::dummy_comp_options;
|
||||
|
||||
// offset_of is used to get the offset of a class data member
|
||||
// ex: offset_of(&ColumnFamilyOptions::num_levels)
|
||||
// This call will return the offset of num_levels in ColumnFamilyOptions class
|
||||
//
|
||||
// This is the same as offsetof() but allow us to work with non standard-layout
|
||||
// classes and structures
|
||||
// refs:
|
||||
// http://en.cppreference.com/w/cpp/concept/StandardLayoutType
|
||||
// https://gist.github.com/graphitemaster/494f21190bb2c63c5516
|
||||
template <typename T1>
|
||||
int offset_of(T1 ColumnFamilyOptions::*member) {
|
||||
return int(size_t(&(OptionsHelper::dummy_cf_options.*member)) -
|
||||
size_t(&OptionsHelper::dummy_cf_options));
|
||||
}
|
||||
template <typename T1>
|
||||
int offset_of(T1 AdvancedColumnFamilyOptions::*member) {
|
||||
return int(size_t(&(OptionsHelper::dummy_cf_options.*member)) -
|
||||
size_t(&OptionsHelper::dummy_cf_options));
|
||||
}
|
||||
template <typename T1>
|
||||
int offset_of(T1 CompactionOptionsFIFO::*member) {
|
||||
return int(size_t(&(OptionsHelper::dummy_comp_options.*member)) -
|
||||
size_t(&OptionsHelper::dummy_comp_options));
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, OptionTypeInfo>
|
||||
OptionsHelper::cf_options_type_info = {
|
||||
/* not yet supported
|
||||
CompactionOptionsFIFO compaction_options_fifo;
|
||||
CompactionOptionsUniversal compaction_options_universal;
|
||||
CompressionOptions compression_opts;
|
||||
TablePropertiesCollectorFactories table_properties_collector_factories;
|
||||
typedef std::vector<std::shared_ptr<TablePropertiesCollectorFactory>>
|
||||
TablePropertiesCollectorFactories;
|
||||
UpdateStatus (*inplace_callback)(char* existing_value,
|
||||
uint34_t* existing_value_size,
|
||||
Slice delta_value,
|
||||
std::string* merged_value);
|
||||
*/
|
||||
{"report_bg_io_stats",
|
||||
{offset_of(&ColumnFamilyOptions::report_bg_io_stats),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, report_bg_io_stats)}},
|
||||
{"compaction_measure_io_stats",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false,
|
||||
0}},
|
||||
{"disable_auto_compactions",
|
||||
{offset_of(&ColumnFamilyOptions::disable_auto_compactions),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, disable_auto_compactions)}},
|
||||
{"filter_deletes",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"inplace_update_support",
|
||||
{offset_of(&ColumnFamilyOptions::inplace_update_support),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"level_compaction_dynamic_level_bytes",
|
||||
{offset_of(&ColumnFamilyOptions::level_compaction_dynamic_level_bytes),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"optimize_filters_for_hits",
|
||||
{offset_of(&ColumnFamilyOptions::optimize_filters_for_hits),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"paranoid_file_checks",
|
||||
{offset_of(&ColumnFamilyOptions::paranoid_file_checks),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, paranoid_file_checks)}},
|
||||
{"force_consistency_checks",
|
||||
{offset_of(&ColumnFamilyOptions::force_consistency_checks),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"purge_redundant_kvs_while_flush",
|
||||
{offset_of(&ColumnFamilyOptions::purge_redundant_kvs_while_flush),
|
||||
OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"verify_checksums_in_compaction",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"soft_pending_compaction_bytes_limit",
|
||||
{offset_of(&ColumnFamilyOptions::soft_pending_compaction_bytes_limit),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions,
|
||||
soft_pending_compaction_bytes_limit)}},
|
||||
{"hard_pending_compaction_bytes_limit",
|
||||
{offset_of(&ColumnFamilyOptions::hard_pending_compaction_bytes_limit),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions,
|
||||
hard_pending_compaction_bytes_limit)}},
|
||||
{"hard_rate_limit",
|
||||
{0, OptionType::kDouble, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"soft_rate_limit",
|
||||
{0, OptionType::kDouble, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"max_compaction_bytes",
|
||||
{offset_of(&ColumnFamilyOptions::max_compaction_bytes),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_compaction_bytes)}},
|
||||
{"expanded_compaction_factor",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"level0_file_num_compaction_trigger",
|
||||
{offset_of(&ColumnFamilyOptions::level0_file_num_compaction_trigger),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions,
|
||||
level0_file_num_compaction_trigger)}},
|
||||
{"level0_slowdown_writes_trigger",
|
||||
{offset_of(&ColumnFamilyOptions::level0_slowdown_writes_trigger),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, level0_slowdown_writes_trigger)}},
|
||||
{"level0_stop_writes_trigger",
|
||||
{offset_of(&ColumnFamilyOptions::level0_stop_writes_trigger),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, level0_stop_writes_trigger)}},
|
||||
{"max_grandparent_overlap_factor",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"max_mem_compaction_level",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"max_write_buffer_number",
|
||||
{offset_of(&ColumnFamilyOptions::max_write_buffer_number),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_write_buffer_number)}},
|
||||
{"max_write_buffer_number_to_maintain",
|
||||
{offset_of(&ColumnFamilyOptions::max_write_buffer_number_to_maintain),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, false, 0}},
|
||||
{"min_write_buffer_number_to_merge",
|
||||
{offset_of(&ColumnFamilyOptions::min_write_buffer_number_to_merge),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, false, 0}},
|
||||
{"num_levels",
|
||||
{offset_of(&ColumnFamilyOptions::num_levels), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"source_compaction_factor",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"target_file_size_multiplier",
|
||||
{offset_of(&ColumnFamilyOptions::target_file_size_multiplier),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, target_file_size_multiplier)}},
|
||||
{"arena_block_size",
|
||||
{offset_of(&ColumnFamilyOptions::arena_block_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, arena_block_size)}},
|
||||
{"inplace_update_num_locks",
|
||||
{offset_of(&ColumnFamilyOptions::inplace_update_num_locks),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, inplace_update_num_locks)}},
|
||||
{"max_successive_merges",
|
||||
{offset_of(&ColumnFamilyOptions::max_successive_merges),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_successive_merges)}},
|
||||
{"memtable_huge_page_size",
|
||||
{offset_of(&ColumnFamilyOptions::memtable_huge_page_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, memtable_huge_page_size)}},
|
||||
{"memtable_prefix_bloom_huge_page_tlb_size",
|
||||
{0, OptionType::kSizeT, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"write_buffer_size",
|
||||
{offset_of(&ColumnFamilyOptions::write_buffer_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, write_buffer_size)}},
|
||||
{"bloom_locality",
|
||||
{offset_of(&ColumnFamilyOptions::bloom_locality), OptionType::kUInt32T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"memtable_prefix_bloom_bits",
|
||||
{0, OptionType::kUInt32T, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"memtable_prefix_bloom_size_ratio",
|
||||
{offset_of(&ColumnFamilyOptions::memtable_prefix_bloom_size_ratio),
|
||||
OptionType::kDouble, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, memtable_prefix_bloom_size_ratio)}},
|
||||
{"memtable_prefix_bloom_probes",
|
||||
{0, OptionType::kUInt32T, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"min_partial_merge_operands",
|
||||
{0, OptionType::kUInt32T, OptionVerificationType::kDeprecated, true,
|
||||
0}},
|
||||
{"max_bytes_for_level_base",
|
||||
{offset_of(&ColumnFamilyOptions::max_bytes_for_level_base),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_bytes_for_level_base)}},
|
||||
{"max_bytes_for_level_multiplier",
|
||||
{offset_of(&ColumnFamilyOptions::max_bytes_for_level_multiplier),
|
||||
OptionType::kDouble, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_bytes_for_level_multiplier)}},
|
||||
{"max_bytes_for_level_multiplier_additional",
|
||||
{offset_of(
|
||||
&ColumnFamilyOptions::max_bytes_for_level_multiplier_additional),
|
||||
OptionType::kVectorInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions,
|
||||
max_bytes_for_level_multiplier_additional)}},
|
||||
{"max_sequential_skip_in_iterations",
|
||||
{offset_of(&ColumnFamilyOptions::max_sequential_skip_in_iterations),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions,
|
||||
max_sequential_skip_in_iterations)}},
|
||||
{"target_file_size_base",
|
||||
{offset_of(&ColumnFamilyOptions::target_file_size_base),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, target_file_size_base)}},
|
||||
{"rate_limit_delay_max_milliseconds",
|
||||
{0, OptionType::kUInt, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"compression",
|
||||
{offset_of(&ColumnFamilyOptions::compression),
|
||||
OptionType::kCompressionType, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, compression)}},
|
||||
{"compression_per_level",
|
||||
{offset_of(&ColumnFamilyOptions::compression_per_level),
|
||||
OptionType::kVectorCompressionType, OptionVerificationType::kNormal,
|
||||
false, 0}},
|
||||
{"bottommost_compression",
|
||||
{offset_of(&ColumnFamilyOptions::bottommost_compression),
|
||||
OptionType::kCompressionType, OptionVerificationType::kNormal, false,
|
||||
0}},
|
||||
{"comparator",
|
||||
{offset_of(&ColumnFamilyOptions::comparator), OptionType::kComparator,
|
||||
OptionVerificationType::kByName, false, 0}},
|
||||
{"prefix_extractor",
|
||||
{offset_of(&ColumnFamilyOptions::prefix_extractor),
|
||||
OptionType::kSliceTransform, OptionVerificationType::kByNameAllowNull,
|
||||
false, 0}},
|
||||
{"memtable_insert_with_hint_prefix_extractor",
|
||||
{offset_of(
|
||||
&ColumnFamilyOptions::memtable_insert_with_hint_prefix_extractor),
|
||||
OptionType::kSliceTransform, OptionVerificationType::kByNameAllowNull,
|
||||
false, 0}},
|
||||
{"memtable_factory",
|
||||
{offset_of(&ColumnFamilyOptions::memtable_factory),
|
||||
OptionType::kMemTableRepFactory, OptionVerificationType::kByName,
|
||||
false, 0}},
|
||||
{"table_factory",
|
||||
{offset_of(&ColumnFamilyOptions::table_factory),
|
||||
OptionType::kTableFactory, OptionVerificationType::kByName, false,
|
||||
0}},
|
||||
{"compaction_filter",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_filter),
|
||||
OptionType::kCompactionFilter, OptionVerificationType::kByName, false,
|
||||
0}},
|
||||
{"compaction_filter_factory",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_filter_factory),
|
||||
OptionType::kCompactionFilterFactory, OptionVerificationType::kByName,
|
||||
false, 0}},
|
||||
{"merge_operator",
|
||||
{offset_of(&ColumnFamilyOptions::merge_operator),
|
||||
OptionType::kMergeOperator,
|
||||
OptionVerificationType::kByNameAllowFromNull, false, 0}},
|
||||
{"compaction_style",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_style),
|
||||
OptionType::kCompactionStyle, OptionVerificationType::kNormal, false,
|
||||
0}},
|
||||
{"compaction_pri",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_pri),
|
||||
OptionType::kCompactionPri, OptionVerificationType::kNormal, false,
|
||||
0}},
|
||||
{"compaction_options_fifo",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_options_fifo),
|
||||
OptionType::kCompactionOptionsFIFO, OptionVerificationType::kNormal,
|
||||
true, offsetof(struct MutableCFOptions, compaction_options_fifo)}}};
|
||||
|
||||
std::unordered_map<std::string, OptionTypeInfo>
|
||||
OptionsHelper::fifo_compaction_options_type_info = {
|
||||
{"max_table_files_size",
|
||||
{offset_of(&CompactionOptionsFIFO::max_table_files_size),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct CompactionOptionsFIFO, max_table_files_size)}},
|
||||
{"ttl",
|
||||
{offset_of(&CompactionOptionsFIFO::ttl), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct CompactionOptionsFIFO, ttl)}},
|
||||
{"allow_compaction",
|
||||
{offset_of(&CompactionOptionsFIFO::allow_compaction),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct CompactionOptionsFIFO, allow_compaction)}}};
|
||||
|
||||
#endif // !ROCKSDB_LITE
|
||||
|
||||
} // namespace rocksdb
|
||||
|
|
|
@ -25,26 +25,6 @@ ColumnFamilyOptions BuildColumnFamilyOptions(
|
|||
const ColumnFamilyOptions& ioptions,
|
||||
const MutableCFOptions& mutable_cf_options);
|
||||
|
||||
static std::map<CompactionStyle, std::string> compaction_style_to_string = {
|
||||
{kCompactionStyleLevel, "kCompactionStyleLevel"},
|
||||
{kCompactionStyleUniversal, "kCompactionStyleUniversal"},
|
||||
{kCompactionStyleFIFO, "kCompactionStyleFIFO"},
|
||||
{kCompactionStyleNone, "kCompactionStyleNone"}};
|
||||
|
||||
static std::map<CompactionPri, std::string> compaction_pri_to_string = {
|
||||
{kByCompensatedSize, "kByCompensatedSize"},
|
||||
{kOldestLargestSeqFirst, "kOldestLargestSeqFirst"},
|
||||
{kOldestSmallestSeqFirst, "kOldestSmallestSeqFirst"},
|
||||
{kMinOverlappingRatio, "kMinOverlappingRatio"}};
|
||||
|
||||
static std::map<CompactionStopStyle, std::string>
|
||||
compaction_stop_style_to_string = {
|
||||
{kCompactionStopStyleSimilarSize, "kCompactionStopStyleSimilarSize"},
|
||||
{kCompactionStopStyleTotalSize, "kCompactionStopStyleTotalSize"}};
|
||||
|
||||
static std::unordered_map<std::string, ChecksumType> checksum_type_string_map =
|
||||
{{"kNoChecksum", kNoChecksum}, {"kCRC32c", kCRC32c}, {"kxxHash", kxxHash}};
|
||||
|
||||
#ifndef ROCKSDB_LITE
|
||||
|
||||
Status GetMutableOptionsFromStrings(
|
||||
|
@ -146,534 +126,6 @@ Status GetColumnFamilyOptionsFromMapInternal(
|
|||
std::vector<std::string>* unsupported_options_names = nullptr,
|
||||
bool ignore_unknown_options = false);
|
||||
|
||||
static std::unordered_map<std::string, OptionTypeInfo> db_options_type_info = {
|
||||
/*
|
||||
// not yet supported
|
||||
Env* env;
|
||||
std::shared_ptr<Cache> row_cache;
|
||||
std::shared_ptr<DeleteScheduler> delete_scheduler;
|
||||
std::shared_ptr<Logger> info_log;
|
||||
std::shared_ptr<RateLimiter> rate_limiter;
|
||||
std::shared_ptr<Statistics> statistics;
|
||||
std::vector<DbPath> db_paths;
|
||||
std::vector<std::shared_ptr<EventListener>> listeners;
|
||||
*/
|
||||
{"advise_random_on_open",
|
||||
{offsetof(struct DBOptions, advise_random_on_open), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_mmap_reads",
|
||||
{offsetof(struct DBOptions, allow_mmap_reads), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_fallocate",
|
||||
{offsetof(struct DBOptions, allow_fallocate), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_mmap_writes",
|
||||
{offsetof(struct DBOptions, allow_mmap_writes), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_direct_reads",
|
||||
{offsetof(struct DBOptions, use_direct_reads), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_direct_writes",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"use_direct_io_for_flush_and_compaction",
|
||||
{offsetof(struct DBOptions, use_direct_io_for_flush_and_compaction),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_2pc",
|
||||
{offsetof(struct DBOptions, allow_2pc), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_os_buffer",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"create_if_missing",
|
||||
{offsetof(struct DBOptions, create_if_missing), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"create_missing_column_families",
|
||||
{offsetof(struct DBOptions, create_missing_column_families),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"disableDataSync",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"disable_data_sync", // for compatibility
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"enable_thread_tracking",
|
||||
{offsetof(struct DBOptions, enable_thread_tracking), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"error_if_exists",
|
||||
{offsetof(struct DBOptions, error_if_exists), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"is_fd_close_on_exec",
|
||||
{offsetof(struct DBOptions, is_fd_close_on_exec), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"paranoid_checks",
|
||||
{offsetof(struct DBOptions, paranoid_checks), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"skip_log_error_on_recovery",
|
||||
{offsetof(struct DBOptions, skip_log_error_on_recovery),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"skip_stats_update_on_db_open",
|
||||
{offsetof(struct DBOptions, skip_stats_update_on_db_open),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"new_table_reader_for_compaction_inputs",
|
||||
{offsetof(struct DBOptions, new_table_reader_for_compaction_inputs),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"compaction_readahead_size",
|
||||
{offsetof(struct DBOptions, compaction_readahead_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, compaction_readahead_size)}},
|
||||
{"random_access_max_buffer_size",
|
||||
{offsetof(struct DBOptions, random_access_max_buffer_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_adaptive_mutex",
|
||||
{offsetof(struct DBOptions, use_adaptive_mutex), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"use_fsync",
|
||||
{offsetof(struct DBOptions, use_fsync), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_background_jobs",
|
||||
{offsetof(struct DBOptions, max_background_jobs), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_background_jobs)}},
|
||||
{"max_background_compactions",
|
||||
{offsetof(struct DBOptions, max_background_compactions), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_background_compactions)}},
|
||||
{"base_background_compactions",
|
||||
{offsetof(struct DBOptions, base_background_compactions), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, base_background_compactions)}},
|
||||
{"max_background_flushes",
|
||||
{offsetof(struct DBOptions, max_background_flushes), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_file_opening_threads",
|
||||
{offsetof(struct DBOptions, max_file_opening_threads), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_open_files",
|
||||
{offsetof(struct DBOptions, max_open_files), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_open_files)}},
|
||||
{"table_cache_numshardbits",
|
||||
{offsetof(struct DBOptions, table_cache_numshardbits), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"db_write_buffer_size",
|
||||
{offsetof(struct DBOptions, db_write_buffer_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"keep_log_file_num",
|
||||
{offsetof(struct DBOptions, keep_log_file_num), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"recycle_log_file_num",
|
||||
{offsetof(struct DBOptions, recycle_log_file_num), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"log_file_time_to_roll",
|
||||
{offsetof(struct DBOptions, log_file_time_to_roll), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"manifest_preallocation_size",
|
||||
{offsetof(struct DBOptions, manifest_preallocation_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_log_file_size",
|
||||
{offsetof(struct DBOptions, max_log_file_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"db_log_dir",
|
||||
{offsetof(struct DBOptions, db_log_dir), OptionType::kString,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"wal_dir",
|
||||
{offsetof(struct DBOptions, wal_dir), OptionType::kString,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_subcompactions",
|
||||
{offsetof(struct DBOptions, max_subcompactions), OptionType::kUInt32T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"WAL_size_limit_MB",
|
||||
{offsetof(struct DBOptions, WAL_size_limit_MB), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"WAL_ttl_seconds",
|
||||
{offsetof(struct DBOptions, WAL_ttl_seconds), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"bytes_per_sync",
|
||||
{offsetof(struct DBOptions, bytes_per_sync), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, bytes_per_sync)}},
|
||||
{"delayed_write_rate",
|
||||
{offsetof(struct DBOptions, delayed_write_rate), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, delayed_write_rate)}},
|
||||
{"delete_obsolete_files_period_micros",
|
||||
{offsetof(struct DBOptions, delete_obsolete_files_period_micros),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, delete_obsolete_files_period_micros)}},
|
||||
{"max_manifest_file_size",
|
||||
{offsetof(struct DBOptions, max_manifest_file_size), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"max_total_wal_size",
|
||||
{offsetof(struct DBOptions, max_total_wal_size), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, max_total_wal_size)}},
|
||||
{"wal_bytes_per_sync",
|
||||
{offsetof(struct DBOptions, wal_bytes_per_sync), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, wal_bytes_per_sync)}},
|
||||
{"stats_dump_period_sec",
|
||||
{offsetof(struct DBOptions, stats_dump_period_sec), OptionType::kUInt,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, stats_dump_period_sec)}},
|
||||
{"fail_if_options_file_error",
|
||||
{offsetof(struct DBOptions, fail_if_options_file_error),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"enable_pipelined_write",
|
||||
{offsetof(struct DBOptions, enable_pipelined_write), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"allow_concurrent_memtable_write",
|
||||
{offsetof(struct DBOptions, allow_concurrent_memtable_write),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"wal_recovery_mode",
|
||||
{offsetof(struct DBOptions, wal_recovery_mode),
|
||||
OptionType::kWALRecoveryMode, OptionVerificationType::kNormal, false, 0}},
|
||||
{"enable_write_thread_adaptive_yield",
|
||||
{offsetof(struct DBOptions, enable_write_thread_adaptive_yield),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"write_thread_slow_yield_usec",
|
||||
{offsetof(struct DBOptions, write_thread_slow_yield_usec),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, false, 0}},
|
||||
{"write_thread_max_yield_usec",
|
||||
{offsetof(struct DBOptions, write_thread_max_yield_usec),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, false, 0}},
|
||||
{"access_hint_on_compaction_start",
|
||||
{offsetof(struct DBOptions, access_hint_on_compaction_start),
|
||||
OptionType::kAccessHint, OptionVerificationType::kNormal, false, 0}},
|
||||
{"info_log_level",
|
||||
{offsetof(struct DBOptions, info_log_level), OptionType::kInfoLogLevel,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"dump_malloc_stats",
|
||||
{offsetof(struct DBOptions, dump_malloc_stats), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"avoid_flush_during_recovery",
|
||||
{offsetof(struct DBOptions, avoid_flush_during_recovery),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"avoid_flush_during_shutdown",
|
||||
{offsetof(struct DBOptions, avoid_flush_during_shutdown),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, avoid_flush_during_shutdown)}},
|
||||
{"writable_file_max_buffer_size",
|
||||
{offsetof(struct DBOptions, writable_file_max_buffer_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableDBOptions, writable_file_max_buffer_size)}},
|
||||
{"allow_ingest_behind",
|
||||
{offsetof(struct DBOptions, allow_ingest_behind), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, allow_ingest_behind)}},
|
||||
{"preserve_deletes",
|
||||
{offsetof(struct DBOptions, preserve_deletes), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, preserve_deletes)}},
|
||||
{"concurrent_prepare", // Deprecated by two_write_queues
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"two_write_queues",
|
||||
{offsetof(struct DBOptions, two_write_queues), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, two_write_queues)}},
|
||||
{"manual_wal_flush",
|
||||
{offsetof(struct DBOptions, manual_wal_flush), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, false,
|
||||
offsetof(struct ImmutableDBOptions, manual_wal_flush)}},
|
||||
{"seq_per_batch",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}}};
|
||||
|
||||
// offset_of is used to get the offset of a class data member
|
||||
// ex: offset_of(&ColumnFamilyOptions::num_levels)
|
||||
// This call will return the offset of num_levels in ColumnFamilyOptions class
|
||||
//
|
||||
// This is the same as offsetof() but allow us to work with non standard-layout
|
||||
// classes and structures
|
||||
// refs:
|
||||
// http://en.cppreference.com/w/cpp/concept/StandardLayoutType
|
||||
// https://gist.github.com/graphitemaster/494f21190bb2c63c5516
|
||||
template <typename T1, typename T2>
|
||||
inline int offset_of(T1 T2::*member) {
|
||||
static T2 obj;
|
||||
return int(size_t(&(obj.*member)) - size_t(&obj));
|
||||
}
|
||||
|
||||
static std::unordered_map<std::string, OptionTypeInfo> cf_options_type_info = {
|
||||
/* not yet supported
|
||||
CompactionOptionsFIFO compaction_options_fifo;
|
||||
CompactionOptionsUniversal compaction_options_universal;
|
||||
CompressionOptions compression_opts;
|
||||
TablePropertiesCollectorFactories table_properties_collector_factories;
|
||||
typedef std::vector<std::shared_ptr<TablePropertiesCollectorFactory>>
|
||||
TablePropertiesCollectorFactories;
|
||||
UpdateStatus (*inplace_callback)(char* existing_value,
|
||||
uint34_t* existing_value_size,
|
||||
Slice delta_value,
|
||||
std::string* merged_value);
|
||||
*/
|
||||
{"report_bg_io_stats",
|
||||
{offset_of(&ColumnFamilyOptions::report_bg_io_stats), OptionType::kBoolean,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, report_bg_io_stats)}},
|
||||
{"compaction_measure_io_stats",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"disable_auto_compactions",
|
||||
{offset_of(&ColumnFamilyOptions::disable_auto_compactions),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, disable_auto_compactions)}},
|
||||
{"filter_deletes",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"inplace_update_support",
|
||||
{offset_of(&ColumnFamilyOptions::inplace_update_support),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"level_compaction_dynamic_level_bytes",
|
||||
{offset_of(&ColumnFamilyOptions::level_compaction_dynamic_level_bytes),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"optimize_filters_for_hits",
|
||||
{offset_of(&ColumnFamilyOptions::optimize_filters_for_hits),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"paranoid_file_checks",
|
||||
{offset_of(&ColumnFamilyOptions::paranoid_file_checks),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, paranoid_file_checks)}},
|
||||
{"force_consistency_checks",
|
||||
{offset_of(&ColumnFamilyOptions::force_consistency_checks),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, false, 0}},
|
||||
{"purge_redundant_kvs_while_flush",
|
||||
{offset_of(&ColumnFamilyOptions::purge_redundant_kvs_while_flush),
|
||||
OptionType::kBoolean, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"verify_checksums_in_compaction",
|
||||
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"soft_pending_compaction_bytes_limit",
|
||||
{offset_of(&ColumnFamilyOptions::soft_pending_compaction_bytes_limit),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, soft_pending_compaction_bytes_limit)}},
|
||||
{"hard_pending_compaction_bytes_limit",
|
||||
{offset_of(&ColumnFamilyOptions::hard_pending_compaction_bytes_limit),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, hard_pending_compaction_bytes_limit)}},
|
||||
{"hard_rate_limit",
|
||||
{0, OptionType::kDouble, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"soft_rate_limit",
|
||||
{0, OptionType::kDouble, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"max_compaction_bytes",
|
||||
{offset_of(&ColumnFamilyOptions::max_compaction_bytes),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_compaction_bytes)}},
|
||||
{"expanded_compaction_factor",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"level0_file_num_compaction_trigger",
|
||||
{offset_of(&ColumnFamilyOptions::level0_file_num_compaction_trigger),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, level0_file_num_compaction_trigger)}},
|
||||
{"level0_slowdown_writes_trigger",
|
||||
{offset_of(&ColumnFamilyOptions::level0_slowdown_writes_trigger),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, level0_slowdown_writes_trigger)}},
|
||||
{"level0_stop_writes_trigger",
|
||||
{offset_of(&ColumnFamilyOptions::level0_stop_writes_trigger),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, level0_stop_writes_trigger)}},
|
||||
{"max_grandparent_overlap_factor",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"max_mem_compaction_level",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"max_write_buffer_number",
|
||||
{offset_of(&ColumnFamilyOptions::max_write_buffer_number),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_write_buffer_number)}},
|
||||
{"max_write_buffer_number_to_maintain",
|
||||
{offset_of(&ColumnFamilyOptions::max_write_buffer_number_to_maintain),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, false, 0}},
|
||||
{"min_write_buffer_number_to_merge",
|
||||
{offset_of(&ColumnFamilyOptions::min_write_buffer_number_to_merge),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, false, 0}},
|
||||
{"num_levels",
|
||||
{offset_of(&ColumnFamilyOptions::num_levels), OptionType::kInt,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"source_compaction_factor",
|
||||
{0, OptionType::kInt, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"target_file_size_multiplier",
|
||||
{offset_of(&ColumnFamilyOptions::target_file_size_multiplier),
|
||||
OptionType::kInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, target_file_size_multiplier)}},
|
||||
{"arena_block_size",
|
||||
{offset_of(&ColumnFamilyOptions::arena_block_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, arena_block_size)}},
|
||||
{"inplace_update_num_locks",
|
||||
{offset_of(&ColumnFamilyOptions::inplace_update_num_locks),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, inplace_update_num_locks)}},
|
||||
{"max_successive_merges",
|
||||
{offset_of(&ColumnFamilyOptions::max_successive_merges),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_successive_merges)}},
|
||||
{"memtable_huge_page_size",
|
||||
{offset_of(&ColumnFamilyOptions::memtable_huge_page_size),
|
||||
OptionType::kSizeT, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, memtable_huge_page_size)}},
|
||||
{"memtable_prefix_bloom_huge_page_tlb_size",
|
||||
{0, OptionType::kSizeT, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"write_buffer_size",
|
||||
{offset_of(&ColumnFamilyOptions::write_buffer_size), OptionType::kSizeT,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, write_buffer_size)}},
|
||||
{"bloom_locality",
|
||||
{offset_of(&ColumnFamilyOptions::bloom_locality), OptionType::kUInt32T,
|
||||
OptionVerificationType::kNormal, false, 0}},
|
||||
{"memtable_prefix_bloom_bits",
|
||||
{0, OptionType::kUInt32T, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"memtable_prefix_bloom_size_ratio",
|
||||
{offset_of(&ColumnFamilyOptions::memtable_prefix_bloom_size_ratio),
|
||||
OptionType::kDouble, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, memtable_prefix_bloom_size_ratio)}},
|
||||
{"memtable_prefix_bloom_probes",
|
||||
{0, OptionType::kUInt32T, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"min_partial_merge_operands",
|
||||
{0, OptionType::kUInt32T, OptionVerificationType::kDeprecated, true, 0}},
|
||||
{"max_bytes_for_level_base",
|
||||
{offset_of(&ColumnFamilyOptions::max_bytes_for_level_base),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_bytes_for_level_base)}},
|
||||
{"max_bytes_for_level_multiplier",
|
||||
{offset_of(&ColumnFamilyOptions::max_bytes_for_level_multiplier),
|
||||
OptionType::kDouble, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_bytes_for_level_multiplier)}},
|
||||
{"max_bytes_for_level_multiplier_additional",
|
||||
{offset_of(
|
||||
&ColumnFamilyOptions::max_bytes_for_level_multiplier_additional),
|
||||
OptionType::kVectorInt, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions,
|
||||
max_bytes_for_level_multiplier_additional)}},
|
||||
{"max_sequential_skip_in_iterations",
|
||||
{offset_of(&ColumnFamilyOptions::max_sequential_skip_in_iterations),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, max_sequential_skip_in_iterations)}},
|
||||
{"target_file_size_base",
|
||||
{offset_of(&ColumnFamilyOptions::target_file_size_base),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, target_file_size_base)}},
|
||||
{"rate_limit_delay_max_milliseconds",
|
||||
{0, OptionType::kUInt, OptionVerificationType::kDeprecated, false, 0}},
|
||||
{"compression",
|
||||
{offset_of(&ColumnFamilyOptions::compression),
|
||||
OptionType::kCompressionType, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, compression)}},
|
||||
{"compression_per_level",
|
||||
{offset_of(&ColumnFamilyOptions::compression_per_level),
|
||||
OptionType::kVectorCompressionType, OptionVerificationType::kNormal,
|
||||
false, 0}},
|
||||
{"bottommost_compression",
|
||||
{offset_of(&ColumnFamilyOptions::bottommost_compression),
|
||||
OptionType::kCompressionType, OptionVerificationType::kNormal, false, 0}},
|
||||
{"comparator",
|
||||
{offset_of(&ColumnFamilyOptions::comparator), OptionType::kComparator,
|
||||
OptionVerificationType::kByName, false, 0}},
|
||||
{"prefix_extractor",
|
||||
{offset_of(&ColumnFamilyOptions::prefix_extractor),
|
||||
OptionType::kSliceTransform, OptionVerificationType::kByNameAllowNull,
|
||||
false, 0}},
|
||||
{"memtable_insert_with_hint_prefix_extractor",
|
||||
{offset_of(
|
||||
&ColumnFamilyOptions::memtable_insert_with_hint_prefix_extractor),
|
||||
OptionType::kSliceTransform, OptionVerificationType::kByNameAllowNull,
|
||||
false, 0}},
|
||||
{"memtable_factory",
|
||||
{offset_of(&ColumnFamilyOptions::memtable_factory),
|
||||
OptionType::kMemTableRepFactory, OptionVerificationType::kByName, false,
|
||||
0}},
|
||||
{"table_factory",
|
||||
{offset_of(&ColumnFamilyOptions::table_factory), OptionType::kTableFactory,
|
||||
OptionVerificationType::kByName, false, 0}},
|
||||
{"compaction_filter",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_filter),
|
||||
OptionType::kCompactionFilter, OptionVerificationType::kByName, false,
|
||||
0}},
|
||||
{"compaction_filter_factory",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_filter_factory),
|
||||
OptionType::kCompactionFilterFactory, OptionVerificationType::kByName,
|
||||
false, 0}},
|
||||
{"merge_operator",
|
||||
{offset_of(&ColumnFamilyOptions::merge_operator),
|
||||
OptionType::kMergeOperator, OptionVerificationType::kByNameAllowFromNull,
|
||||
false, 0}},
|
||||
{"compaction_style",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_style),
|
||||
OptionType::kCompactionStyle, OptionVerificationType::kNormal, false, 0}},
|
||||
{"compaction_pri",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_pri),
|
||||
OptionType::kCompactionPri, OptionVerificationType::kNormal, false, 0}},
|
||||
{"compaction_options_fifo",
|
||||
{offset_of(&ColumnFamilyOptions::compaction_options_fifo),
|
||||
OptionType::kCompactionOptionsFIFO, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct MutableCFOptions, compaction_options_fifo)}}};
|
||||
|
||||
static std::unordered_map<std::string, OptionTypeInfo>
|
||||
fifo_compaction_options_type_info = {
|
||||
{"max_table_files_size",
|
||||
{offset_of(&CompactionOptionsFIFO::max_table_files_size),
|
||||
OptionType::kUInt64T, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct CompactionOptionsFIFO, max_table_files_size)}},
|
||||
{"ttl",
|
||||
{offset_of(&CompactionOptionsFIFO::ttl), OptionType::kUInt64T,
|
||||
OptionVerificationType::kNormal, true,
|
||||
offsetof(struct CompactionOptionsFIFO, ttl)}},
|
||||
{"allow_compaction",
|
||||
{offset_of(&CompactionOptionsFIFO::allow_compaction),
|
||||
OptionType::kBoolean, OptionVerificationType::kNormal, true,
|
||||
offsetof(struct CompactionOptionsFIFO, allow_compaction)}}};
|
||||
|
||||
static std::unordered_map<std::string, CompressionType>
|
||||
compression_type_string_map = {
|
||||
{"kNoCompression", kNoCompression},
|
||||
{"kSnappyCompression", kSnappyCompression},
|
||||
{"kZlibCompression", kZlibCompression},
|
||||
{"kBZip2Compression", kBZip2Compression},
|
||||
{"kLZ4Compression", kLZ4Compression},
|
||||
{"kLZ4HCCompression", kLZ4HCCompression},
|
||||
{"kXpressCompression", kXpressCompression},
|
||||
{"kZSTD", kZSTD},
|
||||
{"kZSTDNotFinalCompression", kZSTDNotFinalCompression},
|
||||
{"kDisableCompressionOption", kDisableCompressionOption}};
|
||||
|
||||
static std::unordered_map<std::string, BlockBasedTableOptions::IndexType>
|
||||
block_base_table_index_type_string_map = {
|
||||
{"kBinarySearch", BlockBasedTableOptions::IndexType::kBinarySearch},
|
||||
{"kHashSearch", BlockBasedTableOptions::IndexType::kHashSearch},
|
||||
{"kTwoLevelIndexSearch",
|
||||
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch}};
|
||||
|
||||
static std::unordered_map<std::string, EncodingType> encoding_type_string_map =
|
||||
{{"kPlain", kPlain}, {"kPrefix", kPrefix}};
|
||||
|
||||
static std::unordered_map<std::string, CompactionStyle>
|
||||
compaction_style_string_map = {
|
||||
{"kCompactionStyleLevel", kCompactionStyleLevel},
|
||||
{"kCompactionStyleUniversal", kCompactionStyleUniversal},
|
||||
{"kCompactionStyleFIFO", kCompactionStyleFIFO},
|
||||
{"kCompactionStyleNone", kCompactionStyleNone}};
|
||||
|
||||
static std::unordered_map<std::string, CompactionPri>
|
||||
compaction_pri_string_map = {
|
||||
{"kByCompensatedSize", kByCompensatedSize},
|
||||
{"kOldestLargestSeqFirst", kOldestLargestSeqFirst},
|
||||
{"kOldestSmallestSeqFirst", kOldestSmallestSeqFirst},
|
||||
{"kMinOverlappingRatio", kMinOverlappingRatio}};
|
||||
|
||||
static std::unordered_map<std::string,
|
||||
WALRecoveryMode> wal_recovery_mode_string_map = {
|
||||
{"kTolerateCorruptedTailRecords",
|
||||
WALRecoveryMode::kTolerateCorruptedTailRecords},
|
||||
{"kAbsoluteConsistency", WALRecoveryMode::kAbsoluteConsistency},
|
||||
{"kPointInTimeRecovery", WALRecoveryMode::kPointInTimeRecovery},
|
||||
{"kSkipAnyCorruptedRecords", WALRecoveryMode::kSkipAnyCorruptedRecords}};
|
||||
|
||||
static std::unordered_map<std::string, DBOptions::AccessHint>
|
||||
access_hint_string_map = {{"NONE", DBOptions::AccessHint::NONE},
|
||||
{"NORMAL", DBOptions::AccessHint::NORMAL},
|
||||
{"SEQUENTIAL", DBOptions::AccessHint::SEQUENTIAL},
|
||||
{"WILLNEED", DBOptions::AccessHint::WILLNEED}};
|
||||
|
||||
static std::unordered_map<std::string, InfoLogLevel> info_log_level_string_map =
|
||||
{{"DEBUG_LEVEL", InfoLogLevel::DEBUG_LEVEL},
|
||||
{"INFO_LEVEL", InfoLogLevel::INFO_LEVEL},
|
||||
{"WARN_LEVEL", InfoLogLevel::WARN_LEVEL},
|
||||
{"ERROR_LEVEL", InfoLogLevel::ERROR_LEVEL},
|
||||
{"FATAL_LEVEL", InfoLogLevel::FATAL_LEVEL},
|
||||
{"HEADER_LEVEL", InfoLogLevel::HEADER_LEVEL}};
|
||||
|
||||
extern Status StringToMap(
|
||||
const std::string& opts_str,
|
||||
std::unordered_map<std::string, std::string>* opts_map);
|
||||
|
@ -682,4 +134,63 @@ extern bool ParseOptionHelper(char* opt_address, const OptionType& opt_type,
|
|||
const std::string& value);
|
||||
#endif // !ROCKSDB_LITE
|
||||
|
||||
struct OptionsHelper {
|
||||
static std::map<CompactionStyle, std::string> compaction_style_to_string;
|
||||
static std::map<CompactionPri, std::string> compaction_pri_to_string;
|
||||
static std::map<CompactionStopStyle, std::string>
|
||||
compaction_stop_style_to_string;
|
||||
static std::unordered_map<std::string, ChecksumType> checksum_type_string_map;
|
||||
#ifndef ROCKSDB_LITE
|
||||
static std::unordered_map<std::string, OptionTypeInfo> cf_options_type_info;
|
||||
static std::unordered_map<std::string, OptionTypeInfo>
|
||||
fifo_compaction_options_type_info;
|
||||
static std::unordered_map<std::string, OptionTypeInfo> db_options_type_info;
|
||||
static std::unordered_map<std::string, CompressionType>
|
||||
compression_type_string_map;
|
||||
static std::unordered_map<std::string, BlockBasedTableOptions::IndexType>
|
||||
block_base_table_index_type_string_map;
|
||||
static std::unordered_map<std::string, EncodingType> encoding_type_string_map;
|
||||
static std::unordered_map<std::string, CompactionStyle>
|
||||
compaction_style_string_map;
|
||||
static std::unordered_map<std::string, CompactionPri>
|
||||
compaction_pri_string_map;
|
||||
static std::unordered_map<std::string, WALRecoveryMode>
|
||||
wal_recovery_mode_string_map;
|
||||
static std::unordered_map<std::string, DBOptions::AccessHint>
|
||||
access_hint_string_map;
|
||||
static std::unordered_map<std::string, InfoLogLevel>
|
||||
info_log_level_string_map;
|
||||
static ColumnFamilyOptions dummy_cf_options;
|
||||
static CompactionOptionsFIFO dummy_comp_options;
|
||||
#endif // !ROCKSDB_LITE
|
||||
};
|
||||
|
||||
// Some aliasing
|
||||
static auto& compaction_style_to_string =
|
||||
OptionsHelper::compaction_style_to_string;
|
||||
static auto& compaction_pri_to_string = OptionsHelper::compaction_pri_to_string;
|
||||
static auto& compaction_stop_style_to_string =
|
||||
OptionsHelper::compaction_stop_style_to_string;
|
||||
static auto& checksum_type_string_map = OptionsHelper::checksum_type_string_map;
|
||||
#ifndef ROCKSDB_LITE
|
||||
static auto& cf_options_type_info = OptionsHelper::cf_options_type_info;
|
||||
static auto& fifo_compaction_options_type_info =
|
||||
OptionsHelper::fifo_compaction_options_type_info;
|
||||
static auto& db_options_type_info = OptionsHelper::db_options_type_info;
|
||||
static auto& compression_type_string_map =
|
||||
OptionsHelper::compression_type_string_map;
|
||||
static auto& block_base_table_index_type_string_map =
|
||||
OptionsHelper::block_base_table_index_type_string_map;
|
||||
static auto& encoding_type_string_map = OptionsHelper::encoding_type_string_map;
|
||||
static auto& compaction_style_string_map =
|
||||
OptionsHelper::compaction_style_string_map;
|
||||
static auto& compaction_pri_string_map =
|
||||
OptionsHelper::compaction_pri_string_map;
|
||||
static auto& wal_recovery_mode_string_map =
|
||||
OptionsHelper::wal_recovery_mode_string_map;
|
||||
static auto& access_hint_string_map = OptionsHelper::access_hint_string_map;
|
||||
static auto& info_log_level_string_map =
|
||||
OptionsHelper::info_log_level_string_map;
|
||||
#endif // !ROCKSDB_LITE
|
||||
|
||||
} // namespace rocksdb
|
||||
|
|
|
@ -299,6 +299,12 @@ TEST_F(OptionsSettableTest, DBOptionsAllFieldsSettable) {
|
|||
delete[] new_options_ptr;
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
inline int offset_of(T1 T2::*member) {
|
||||
static T2 obj;
|
||||
return int(size_t(&(obj.*member)) - size_t(&obj));
|
||||
}
|
||||
|
||||
// If the test fails, likely a new option is added to ColumnFamilyOptions
|
||||
// but it cannot be set through GetColumnFamilyOptionsFromString(), or the
|
||||
// test is not updated accordingly.
|
||||
|
|
Loading…
Reference in New Issue