cf_options.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #pragma once
  6. #include <string>
  7. #include <vector>
  8. #include "db/dbformat.h"
  9. #include "options/db_options.h"
  10. #include "rocksdb/options.h"
  11. #include "util/compression.h"
  12. namespace ROCKSDB_NAMESPACE {
  13. // ImmutableCFOptions is a data struct used by RocksDB internal. It contains a
  14. // subset of Options that should not be changed during the entire lifetime
  15. // of DB. Raw pointers defined in this struct do not have ownership to the data
  16. // they point to. Options contains std::shared_ptr to these data.
  17. struct ImmutableCFOptions {
  18. explicit ImmutableCFOptions(const Options& options);
  19. ImmutableCFOptions(const ImmutableDBOptions& db_options,
  20. const ColumnFamilyOptions& cf_options);
  21. CompactionStyle compaction_style;
  22. CompactionPri compaction_pri;
  23. const Comparator* user_comparator;
  24. InternalKeyComparator internal_comparator;
  25. MergeOperator* merge_operator;
  26. const CompactionFilter* compaction_filter;
  27. CompactionFilterFactory* compaction_filter_factory;
  28. int min_write_buffer_number_to_merge;
  29. int max_write_buffer_number_to_maintain;
  30. int64_t max_write_buffer_size_to_maintain;
  31. bool inplace_update_support;
  32. UpdateStatus (*inplace_callback)(char* existing_value,
  33. uint32_t* existing_value_size,
  34. Slice delta_value,
  35. std::string* merged_value);
  36. Logger* info_log;
  37. Statistics* statistics;
  38. RateLimiter* rate_limiter;
  39. InfoLogLevel info_log_level;
  40. Env* env;
  41. FileSystem* fs;
  42. // Allow the OS to mmap file for reading sst tables. Default: false
  43. bool allow_mmap_reads;
  44. // Allow the OS to mmap file for writing. Default: false
  45. bool allow_mmap_writes;
  46. std::vector<DbPath> db_paths;
  47. MemTableRepFactory* memtable_factory;
  48. TableFactory* table_factory;
  49. Options::TablePropertiesCollectorFactories
  50. table_properties_collector_factories;
  51. bool advise_random_on_open;
  52. // This options is required by PlainTableReader. May need to move it
  53. // to PlainTableOptions just like bloom_bits_per_key
  54. uint32_t bloom_locality;
  55. bool purge_redundant_kvs_while_flush;
  56. bool use_fsync;
  57. std::vector<CompressionType> compression_per_level;
  58. CompressionType bottommost_compression;
  59. CompressionOptions bottommost_compression_opts;
  60. CompressionOptions compression_opts;
  61. bool level_compaction_dynamic_level_bytes;
  62. Options::AccessHint access_hint_on_compaction_start;
  63. bool new_table_reader_for_compaction_inputs;
  64. int num_levels;
  65. bool optimize_filters_for_hits;
  66. bool force_consistency_checks;
  67. bool allow_ingest_behind;
  68. bool preserve_deletes;
  69. // A vector of EventListeners which callback functions will be called
  70. // when specific RocksDB event happens.
  71. std::vector<std::shared_ptr<EventListener>> listeners;
  72. std::shared_ptr<Cache> row_cache;
  73. uint32_t max_subcompactions;
  74. const SliceTransform* memtable_insert_with_hint_prefix_extractor;
  75. std::vector<DbPath> cf_paths;
  76. std::shared_ptr<ConcurrentTaskLimiter> compaction_thread_limiter;
  77. FileChecksumFunc* sst_file_checksum_func;
  78. };
  79. struct MutableCFOptions {
  80. explicit MutableCFOptions(const ColumnFamilyOptions& options)
  81. : write_buffer_size(options.write_buffer_size),
  82. max_write_buffer_number(options.max_write_buffer_number),
  83. arena_block_size(options.arena_block_size),
  84. memtable_prefix_bloom_size_ratio(
  85. options.memtable_prefix_bloom_size_ratio),
  86. memtable_whole_key_filtering(options.memtable_whole_key_filtering),
  87. memtable_huge_page_size(options.memtable_huge_page_size),
  88. max_successive_merges(options.max_successive_merges),
  89. inplace_update_num_locks(options.inplace_update_num_locks),
  90. prefix_extractor(options.prefix_extractor),
  91. disable_auto_compactions(options.disable_auto_compactions),
  92. soft_pending_compaction_bytes_limit(
  93. options.soft_pending_compaction_bytes_limit),
  94. hard_pending_compaction_bytes_limit(
  95. options.hard_pending_compaction_bytes_limit),
  96. level0_file_num_compaction_trigger(
  97. options.level0_file_num_compaction_trigger),
  98. level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger),
  99. level0_stop_writes_trigger(options.level0_stop_writes_trigger),
  100. max_compaction_bytes(options.max_compaction_bytes),
  101. target_file_size_base(options.target_file_size_base),
  102. target_file_size_multiplier(options.target_file_size_multiplier),
  103. max_bytes_for_level_base(options.max_bytes_for_level_base),
  104. max_bytes_for_level_multiplier(options.max_bytes_for_level_multiplier),
  105. ttl(options.ttl),
  106. periodic_compaction_seconds(options.periodic_compaction_seconds),
  107. max_bytes_for_level_multiplier_additional(
  108. options.max_bytes_for_level_multiplier_additional),
  109. compaction_options_fifo(options.compaction_options_fifo),
  110. compaction_options_universal(options.compaction_options_universal),
  111. max_sequential_skip_in_iterations(
  112. options.max_sequential_skip_in_iterations),
  113. paranoid_file_checks(options.paranoid_file_checks),
  114. report_bg_io_stats(options.report_bg_io_stats),
  115. compression(options.compression),
  116. sample_for_compression(options.sample_for_compression) {
  117. RefreshDerivedOptions(options.num_levels, options.compaction_style);
  118. }
  119. MutableCFOptions()
  120. : write_buffer_size(0),
  121. max_write_buffer_number(0),
  122. arena_block_size(0),
  123. memtable_prefix_bloom_size_ratio(0),
  124. memtable_whole_key_filtering(false),
  125. memtable_huge_page_size(0),
  126. max_successive_merges(0),
  127. inplace_update_num_locks(0),
  128. prefix_extractor(nullptr),
  129. disable_auto_compactions(false),
  130. soft_pending_compaction_bytes_limit(0),
  131. hard_pending_compaction_bytes_limit(0),
  132. level0_file_num_compaction_trigger(0),
  133. level0_slowdown_writes_trigger(0),
  134. level0_stop_writes_trigger(0),
  135. max_compaction_bytes(0),
  136. target_file_size_base(0),
  137. target_file_size_multiplier(0),
  138. max_bytes_for_level_base(0),
  139. max_bytes_for_level_multiplier(0),
  140. ttl(0),
  141. periodic_compaction_seconds(0),
  142. compaction_options_fifo(),
  143. max_sequential_skip_in_iterations(0),
  144. paranoid_file_checks(false),
  145. report_bg_io_stats(false),
  146. compression(Snappy_Supported() ? kSnappyCompression : kNoCompression),
  147. sample_for_compression(0) {}
  148. explicit MutableCFOptions(const Options& options);
  149. // Must be called after any change to MutableCFOptions
  150. void RefreshDerivedOptions(int num_levels, CompactionStyle compaction_style);
  151. void RefreshDerivedOptions(const ImmutableCFOptions& ioptions) {
  152. RefreshDerivedOptions(ioptions.num_levels, ioptions.compaction_style);
  153. }
  154. int MaxBytesMultiplerAdditional(int level) const {
  155. if (level >=
  156. static_cast<int>(max_bytes_for_level_multiplier_additional.size())) {
  157. return 1;
  158. }
  159. return max_bytes_for_level_multiplier_additional[level];
  160. }
  161. void Dump(Logger* log) const;
  162. // Memtable related options
  163. size_t write_buffer_size;
  164. int max_write_buffer_number;
  165. size_t arena_block_size;
  166. double memtable_prefix_bloom_size_ratio;
  167. bool memtable_whole_key_filtering;
  168. size_t memtable_huge_page_size;
  169. size_t max_successive_merges;
  170. size_t inplace_update_num_locks;
  171. std::shared_ptr<const SliceTransform> prefix_extractor;
  172. // Compaction related options
  173. bool disable_auto_compactions;
  174. uint64_t soft_pending_compaction_bytes_limit;
  175. uint64_t hard_pending_compaction_bytes_limit;
  176. int level0_file_num_compaction_trigger;
  177. int level0_slowdown_writes_trigger;
  178. int level0_stop_writes_trigger;
  179. uint64_t max_compaction_bytes;
  180. uint64_t target_file_size_base;
  181. int target_file_size_multiplier;
  182. uint64_t max_bytes_for_level_base;
  183. double max_bytes_for_level_multiplier;
  184. uint64_t ttl;
  185. uint64_t periodic_compaction_seconds;
  186. std::vector<int> max_bytes_for_level_multiplier_additional;
  187. CompactionOptionsFIFO compaction_options_fifo;
  188. CompactionOptionsUniversal compaction_options_universal;
  189. // Misc options
  190. uint64_t max_sequential_skip_in_iterations;
  191. bool paranoid_file_checks;
  192. bool report_bg_io_stats;
  193. CompressionType compression;
  194. uint64_t sample_for_compression;
  195. // Derived options
  196. // Per-level target file size.
  197. std::vector<uint64_t> max_file_size;
  198. };
  199. uint64_t MultiplyCheckOverflow(uint64_t op1, double op2);
  200. // Get the max file size in a given level.
  201. uint64_t MaxFileSizeForLevel(const MutableCFOptions& cf_options,
  202. int level, CompactionStyle compaction_style, int base_level = 1,
  203. bool level_compaction_dynamic_level_bytes = false);
  204. } // namespace ROCKSDB_NAMESPACE