@nxtedition/rocksdb 7.1.20 → 7.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
  2. package/deps/rocksdb/rocksdb/Makefile +1 -1
  3. package/deps/rocksdb/rocksdb/TARGETS +2 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
  11. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
  13. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
  15. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
  18. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
  19. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
  27. package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
  29. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  47. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  48. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
  49. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
  50. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
  51. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
  60. package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
  61. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
  62. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
  63. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
  64. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
  65. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
  67. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
  72. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
  73. package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
  74. package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
  75. package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
  76. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
  77. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
  78. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
  79. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
  80. package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
  82. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
  83. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
  84. package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
  85. package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
  86. package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
  87. package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
  88. package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
  89. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  90. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  91. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
  92. package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
  93. package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
  94. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
  95. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
  98. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
  99. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  100. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
  102. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
  103. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
  104. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
  105. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
  106. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
  107. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
  108. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
  109. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
  110. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
  111. package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
  112. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
  113. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
  114. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
  116. package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
  117. package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
  118. package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
  120. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
  121. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
  122. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
  123. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
  124. package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
  126. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
  129. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
  130. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
  142. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
  143. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
  144. package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
  145. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
  146. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
  147. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
  148. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
  149. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
  150. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
  151. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
  152. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
  153. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
  154. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
  155. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
  157. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
  160. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
  162. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  164. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
  165. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
  166. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  167. package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
  168. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
  169. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  170. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  172. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
  173. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  174. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  175. package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
  176. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
  177. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  178. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  179. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
  180. package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
  181. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  182. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  183. package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
  184. package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
  185. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
  186. package/deps/rocksdb/rocksdb/src.mk +1 -0
  187. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
  188. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
  189. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
  192. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
  195. package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
  196. package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
  197. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
  198. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
  199. package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
  200. package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
  201. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
  202. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
  203. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
  204. package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
  205. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
  206. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
  207. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  208. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
  209. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
  210. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  211. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
  212. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
  213. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
  214. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
  215. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
  216. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
  217. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
  218. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
  219. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
  220. package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
  221. package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
  222. package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
  223. package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
  224. package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
  225. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
  226. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
  227. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
  228. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
  229. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
  230. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
  231. package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
  232. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
  233. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
  234. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
  235. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
  236. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
  237. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
  239. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
  240. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
  241. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
  242. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
  243. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
  244. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
  245. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
  246. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
  247. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
  248. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
  249. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
  250. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
  251. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
  252. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
  253. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
  254. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
  255. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
  256. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
  257. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
  258. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
  259. package/index.js +12 -4
  260. package/package.json +1 -1
  261. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  262. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -8,9 +8,7 @@
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
10
  #include "memory/arena.h"
11
- #ifndef OS_WIN
12
- #include <sys/mman.h>
13
- #endif
11
+
14
12
  #include <algorithm>
15
13
 
16
14
  #include "logging/logging.h"
@@ -22,16 +20,7 @@
22
20
 
23
21
  namespace ROCKSDB_NAMESPACE {
24
22
 
25
- // MSVC complains that it is already defined since it is static in the header.
26
- #ifndef _MSC_VER
27
- const size_t Arena::kInlineSize;
28
- #endif
29
-
30
- const size_t Arena::kMinBlockSize = 4096;
31
- const size_t Arena::kMaxBlockSize = 2u << 30;
32
- static const int kAlignUnit = alignof(max_align_t);
33
-
34
- size_t OptimizeBlockSize(size_t block_size) {
23
+ size_t Arena::OptimizeBlockSize(size_t block_size) {
35
24
  // Make sure block_size is in optimal range
36
25
  block_size = std::max(Arena::kMinBlockSize, block_size);
37
26
  block_size = std::min(Arena::kMaxBlockSize, block_size);
@@ -53,14 +42,12 @@ Arena::Arena(size_t block_size, AllocTracker* tracker, size_t huge_page_size)
53
42
  blocks_memory_ += alloc_bytes_remaining_;
54
43
  aligned_alloc_ptr_ = inline_block_;
55
44
  unaligned_alloc_ptr_ = inline_block_ + alloc_bytes_remaining_;
56
- #ifdef MAP_HUGETLB
57
- hugetlb_size_ = huge_page_size;
58
- if (hugetlb_size_ && kBlockSize > hugetlb_size_) {
59
- hugetlb_size_ = ((kBlockSize - 1U) / hugetlb_size_ + 1U) * hugetlb_size_;
45
+ if (MemMapping::kHugePageSupported) {
46
+ hugetlb_size_ = huge_page_size;
47
+ if (hugetlb_size_ && kBlockSize > hugetlb_size_) {
48
+ hugetlb_size_ = ((kBlockSize - 1U) / hugetlb_size_ + 1U) * hugetlb_size_;
49
+ }
60
50
  }
61
- #else
62
- (void)huge_page_size;
63
- #endif
64
51
  if (tracker_ != nullptr) {
65
52
  tracker_->Allocate(kInlineSize);
66
53
  }
@@ -71,21 +58,6 @@ Arena::~Arena() {
71
58
  assert(tracker_->is_freed());
72
59
  tracker_->FreeMem();
73
60
  }
74
- for (const auto& block : blocks_) {
75
- delete[] block;
76
- }
77
-
78
- #ifdef MAP_HUGETLB
79
- for (const auto& mmap_info : huge_blocks_) {
80
- if (mmap_info.addr_ == nullptr) {
81
- continue;
82
- }
83
- auto ret = munmap(mmap_info.addr_, mmap_info.length_);
84
- if (ret != 0) {
85
- // TODO(sdong): Better handling
86
- }
87
- }
88
- #endif
89
61
  }
90
62
 
91
63
  char* Arena::AllocateFallback(size_t bytes, bool aligned) {
@@ -99,12 +71,10 @@ char* Arena::AllocateFallback(size_t bytes, bool aligned) {
99
71
  // We waste the remaining space in the current block.
100
72
  size_t size = 0;
101
73
  char* block_head = nullptr;
102
- #ifdef MAP_HUGETLB
103
- if (hugetlb_size_) {
74
+ if (MemMapping::kHugePageSupported && hugetlb_size_ > 0) {
104
75
  size = hugetlb_size_;
105
76
  block_head = AllocateFromHugePage(size);
106
77
  }
107
- #endif
108
78
  if (!block_head) {
109
79
  size = kBlockSize;
110
80
  block_head = AllocateNewBlock(size);
@@ -123,45 +93,22 @@ char* Arena::AllocateFallback(size_t bytes, bool aligned) {
123
93
  }
124
94
 
125
95
  char* Arena::AllocateFromHugePage(size_t bytes) {
126
- #ifdef MAP_HUGETLB
127
- if (hugetlb_size_ == 0) {
128
- return nullptr;
129
- }
130
- // Reserve space in `huge_blocks_` before calling `mmap`.
131
- // Use `emplace_back()` instead of `reserve()` to let std::vector manage its
132
- // own memory and do fewer reallocations.
133
- //
134
- // - If `emplace_back` throws, no memory leaks because we haven't called
135
- // `mmap` yet.
136
- // - If `mmap` throws, no memory leaks because the vector will be cleaned up
137
- // via RAII.
138
- huge_blocks_.emplace_back(nullptr /* addr */, 0 /* length */);
139
-
140
- void* addr = mmap(nullptr, bytes, (PROT_READ | PROT_WRITE),
141
- (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB), -1, 0);
142
-
143
- if (addr == MAP_FAILED) {
144
- return nullptr;
145
- }
146
- huge_blocks_.back() = MmapInfo(addr, bytes);
147
- blocks_memory_ += bytes;
148
- if (tracker_ != nullptr) {
149
- tracker_->Allocate(bytes);
96
+ MemMapping mm = MemMapping::AllocateHuge(bytes);
97
+ auto addr = static_cast<char*>(mm.Get());
98
+ if (addr) {
99
+ huge_blocks_.push_back(std::move(mm));
100
+ blocks_memory_ += bytes;
101
+ if (tracker_ != nullptr) {
102
+ tracker_->Allocate(bytes);
103
+ }
150
104
  }
151
- return reinterpret_cast<char*>(addr);
152
- #else
153
- (void)bytes;
154
- return nullptr;
155
- #endif
105
+ return addr;
156
106
  }
157
107
 
158
108
  char* Arena::AllocateAligned(size_t bytes, size_t huge_page_size,
159
109
  Logger* logger) {
160
- assert((kAlignUnit & (kAlignUnit - 1)) ==
161
- 0); // Pointer size should be a power of 2
162
-
163
- #ifdef MAP_HUGETLB
164
- if (huge_page_size > 0 && bytes > 0) {
110
+ if (MemMapping::kHugePageSupported && hugetlb_size_ > 0 &&
111
+ huge_page_size > 0 && bytes > 0) {
165
112
  // Allocate from a huge page TLB table.
166
113
  size_t reserved_size =
167
114
  ((bytes - 1U) / huge_page_size + 1U) * huge_page_size;
@@ -177,10 +124,6 @@ char* Arena::AllocateAligned(size_t bytes, size_t huge_page_size,
177
124
  return addr;
178
125
  }
179
126
  }
180
- #else
181
- (void)huge_page_size;
182
- (void)logger;
183
- #endif
184
127
 
185
128
  size_t current_mod =
186
129
  reinterpret_cast<uintptr_t>(aligned_alloc_ptr_) & (kAlignUnit - 1);
@@ -200,17 +143,10 @@ char* Arena::AllocateAligned(size_t bytes, size_t huge_page_size,
200
143
  }
201
144
 
202
145
  char* Arena::AllocateNewBlock(size_t block_bytes) {
203
- // Reserve space in `blocks_` before allocating memory via new.
204
- // Use `emplace_back()` instead of `reserve()` to let std::vector manage its
205
- // own memory and do fewer reallocations.
206
- //
207
- // - If `emplace_back` throws, no memory leaks because we haven't called `new`
208
- // yet.
209
- // - If `new` throws, no memory leaks because the vector will be cleaned up
210
- // via RAII.
211
- blocks_.emplace_back(nullptr);
212
-
213
- char* block = new char[block_bytes];
146
+ auto uniq = std::make_unique<char[]>(block_bytes);
147
+ char* block = uniq.get();
148
+ blocks_.push_back(std::move(uniq));
149
+
214
150
  size_t allocated_size;
215
151
  #ifdef ROCKSDB_MALLOC_USABLE_SIZE
216
152
  allocated_size = malloc_usable_size(block);
@@ -227,7 +163,6 @@ char* Arena::AllocateNewBlock(size_t block_bytes) {
227
163
  if (tracker_ != nullptr) {
228
164
  tracker_->Allocate(allocated_size);
229
165
  }
230
- blocks_.back() = block;
231
166
  return block;
232
167
  }
233
168
 
@@ -12,16 +12,13 @@
12
12
  // size, it uses malloc to directly get the requested size.
13
13
 
14
14
  #pragma once
15
- #ifndef OS_WIN
16
- #include <sys/mman.h>
17
- #endif
18
- #include <assert.h>
19
- #include <stdint.h>
20
- #include <cerrno>
15
+
21
16
  #include <cstddef>
22
- #include <vector>
17
+ #include <deque>
18
+
23
19
  #include "memory/allocator.h"
24
- #include "util/mutexlock.h"
20
+ #include "port/mmap.h"
21
+ #include "rocksdb/env.h"
25
22
 
26
23
  namespace ROCKSDB_NAMESPACE {
27
24
 
@@ -31,9 +28,13 @@ class Arena : public Allocator {
31
28
  Arena(const Arena&) = delete;
32
29
  void operator=(const Arena&) = delete;
33
30
 
34
- static const size_t kInlineSize = 2048;
35
- static const size_t kMinBlockSize;
36
- static const size_t kMaxBlockSize;
31
+ static constexpr size_t kInlineSize = 2048;
32
+ static constexpr size_t kMinBlockSize = 4096;
33
+ static constexpr size_t kMaxBlockSize = 2u << 30;
34
+
35
+ static constexpr unsigned kAlignUnit = alignof(std::max_align_t);
36
+ static_assert((kAlignUnit & (kAlignUnit - 1)) == 0,
37
+ "Pointer size should be power of 2");
37
38
 
38
39
  // huge_page_size: if 0, don't use huge page TLB. If > 0 (should set to the
39
40
  // supported hugepage size of the system), block allocation will try huge
@@ -63,7 +64,7 @@ class Arena : public Allocator {
63
64
  // by the arena (exclude the space allocated but not yet used for future
64
65
  // allocations).
65
66
  size_t ApproximateMemoryUsage() const {
66
- return blocks_memory_ + blocks_.capacity() * sizeof(char*) -
67
+ return blocks_memory_ + blocks_.size() * sizeof(char*) -
67
68
  alloc_bytes_remaining_;
68
69
  }
69
70
 
@@ -81,21 +82,19 @@ class Arena : public Allocator {
81
82
  return blocks_.empty() && huge_blocks_.empty();
82
83
  }
83
84
 
85
+ // check and adjust the block_size so that the return value is
86
+ // 1. in the range of [kMinBlockSize, kMaxBlockSize].
87
+ // 2. the multiple of align unit.
88
+ static size_t OptimizeBlockSize(size_t block_size);
89
+
84
90
  private:
85
- char inline_block_[kInlineSize] __attribute__((__aligned__(alignof(max_align_t))));
91
+ alignas(std::max_align_t) char inline_block_[kInlineSize];
86
92
  // Number of bytes allocated in one block
87
93
  const size_t kBlockSize;
88
- // Array of new[] allocated memory blocks
89
- using Blocks = std::vector<char*>;
90
- Blocks blocks_;
91
-
92
- struct MmapInfo {
93
- void* addr_;
94
- size_t length_;
95
-
96
- MmapInfo(void* addr, size_t length) : addr_(addr), length_(length) {}
97
- };
98
- std::vector<MmapInfo> huge_blocks_;
94
+ // Allocated memory blocks
95
+ std::deque<std::unique_ptr<char[]>> blocks_;
96
+ // Huge page allocations
97
+ std::deque<MemMapping> huge_blocks_;
99
98
  size_t irregular_block_num = 0;
100
99
 
101
100
  // Stats for current active block.
@@ -108,15 +107,15 @@ class Arena : public Allocator {
108
107
  // How many bytes left in currently active block?
109
108
  size_t alloc_bytes_remaining_ = 0;
110
109
 
111
- #ifdef MAP_HUGETLB
112
110
  size_t hugetlb_size_ = 0;
113
- #endif // MAP_HUGETLB
111
+
114
112
  char* AllocateFromHugePage(size_t bytes);
115
113
  char* AllocateFallback(size_t bytes, bool aligned);
116
114
  char* AllocateNewBlock(size_t block_bytes);
117
115
 
118
116
  // Bytes of memory in blocks allocated so far
119
117
  size_t blocks_memory_ = 0;
118
+ // Non-owned
120
119
  AllocTracker* tracker_;
121
120
  };
122
121
 
@@ -133,9 +132,4 @@ inline char* Arena::Allocate(size_t bytes) {
133
132
  return AllocateFallback(bytes, false /* unaligned */);
134
133
  }
135
134
 
136
- // check and adjust the block_size so that the return value is
137
- // 1. in the range of [kMinBlockSize, kMaxBlockSize].
138
- // 2. the multiple of align unit.
139
- extern size_t OptimizeBlockSize(size_t block_size);
140
-
141
135
  } // namespace ROCKSDB_NAMESPACE
@@ -8,6 +8,11 @@
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
10
  #include "memory/arena.h"
11
+
12
+ #ifndef OS_WIN
13
+ #include <sys/resource.h>
14
+ #endif
15
+ #include "port/port.h"
11
16
  #include "test_util/testharness.h"
12
17
  #include "util/random.h"
13
18
 
@@ -196,9 +201,65 @@ TEST_F(ArenaTest, Simple) {
196
201
  SimpleTest(0);
197
202
  SimpleTest(kHugePageSize);
198
203
  }
204
+
205
+ // Number of minor page faults since last call
206
+ size_t PopMinorPageFaultCount() {
207
+ #ifdef RUSAGE_SELF
208
+ static long prev = 0;
209
+ struct rusage usage;
210
+ EXPECT_EQ(getrusage(RUSAGE_SELF, &usage), 0);
211
+ size_t rv = usage.ru_minflt - prev;
212
+ prev = usage.ru_minflt;
213
+ return rv;
214
+ #else
215
+ // Conservative
216
+ return SIZE_MAX;
217
+ #endif // RUSAGE_SELF
218
+ }
219
+
220
+ TEST(MmapTest, AllocateLazyZeroed) {
221
+ // Doesn't have to be page aligned
222
+ constexpr size_t len = 1234567;
223
+ MemMapping m = MemMapping::AllocateLazyZeroed(len);
224
+ auto arr = static_cast<char*>(m.Get());
225
+
226
+ // Should generally work
227
+ ASSERT_NE(arr, nullptr);
228
+
229
+ // Start counting page faults
230
+ PopMinorPageFaultCount();
231
+
232
+ // Access half of the allocation
233
+ size_t i = 0;
234
+ for (; i < len / 2; ++i) {
235
+ ASSERT_EQ(arr[i], 0);
236
+ arr[i] = static_cast<char>(i & 255);
237
+ }
238
+
239
+ // Appropriate page faults (maybe more)
240
+ size_t faults = PopMinorPageFaultCount();
241
+ ASSERT_GE(faults, len / 2 / port::kPageSize);
242
+
243
+ // Access rest of the allocation
244
+ for (; i < len; ++i) {
245
+ ASSERT_EQ(arr[i], 0);
246
+ arr[i] = static_cast<char>(i & 255);
247
+ }
248
+
249
+ // Appropriate page faults (maybe more)
250
+ faults = PopMinorPageFaultCount();
251
+ ASSERT_GE(faults, len / 2 / port::kPageSize);
252
+
253
+ // Verify data
254
+ for (i = 0; i < len; ++i) {
255
+ ASSERT_EQ(arr[i], static_cast<char>(i & 255));
256
+ }
257
+ }
258
+
199
259
  } // namespace ROCKSDB_NAMESPACE
200
260
 
201
261
  int main(int argc, char** argv) {
262
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
202
263
  ::testing::InitGoogleTest(&argc, argv);
203
264
  return RUN_ALL_TESTS();
204
265
  }
@@ -234,6 +234,7 @@ INSTANTIATE_TEST_CASE_P(
234
234
  } // namespace ROCKSDB_NAMESPACE
235
235
 
236
236
  int main(int argc, char** argv) {
237
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
237
238
  ::testing::InitGoogleTest(&argc, argv);
238
239
  return RUN_ALL_TESTS();
239
240
  }
@@ -658,6 +658,7 @@ TEST_F(InlineSkipTest, ConcurrentInsertWithHint3) {
658
658
  } // namespace ROCKSDB_NAMESPACE
659
659
 
660
660
  int main(int argc, char** argv) {
661
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
661
662
  ::testing::InitGoogleTest(&argc, argv);
662
663
  return RUN_ALL_TESTS();
663
664
  }
@@ -383,6 +383,7 @@ TEST_F(SkipTest, Concurrent5) { RunConcurrent(5); }
383
383
  } // namespace ROCKSDB_NAMESPACE
384
384
 
385
385
  int main(int argc, char** argv) {
386
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
386
387
  ::testing::InitGoogleTest(&argc, argv);
387
388
  return RUN_ALL_TESTS();
388
389
  }
@@ -298,6 +298,7 @@ TEST_F(ChargeWriteBufferTest, BasicWithCacheFull) {
298
298
  } // namespace ROCKSDB_NAMESPACE
299
299
 
300
300
  int main(int argc, char** argv) {
301
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
301
302
  ::testing::InitGoogleTest(&argc, argv);
302
303
  return RUN_ALL_TESTS();
303
304
  }
@@ -248,6 +248,7 @@ TEST_F(HistogramTest, LostUpdateStandardDeviation) {
248
248
  } // namespace ROCKSDB_NAMESPACE
249
249
 
250
250
  int main(int argc, char** argv) {
251
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
251
252
  ::testing::InitGoogleTest(&argc, argv);
252
253
  return RUN_ALL_TESTS();
253
254
  }
@@ -24,6 +24,7 @@ TEST(IOStatsContextTest, ToString) {
24
24
  } // namespace ROCKSDB_NAMESPACE
25
25
 
26
26
  int main(int argc, char** argv) {
27
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
27
28
  ::testing::InitGoogleTest(&argc, argv);
28
29
  return RUN_ALL_TESTS();
29
30
  }
@@ -270,6 +270,11 @@ static std::unordered_map<std::string, OptionTypeInfo>
270
270
  {offsetof(struct MutableCFOptions, max_compaction_bytes),
271
271
  OptionType::kUInt64T, OptionVerificationType::kNormal,
272
272
  OptionTypeFlags::kMutable}},
273
+ {"ignore_max_compaction_bytes_for_input",
274
+ {offsetof(struct MutableCFOptions,
275
+ ignore_max_compaction_bytes_for_input),
276
+ OptionType::kBoolean, OptionVerificationType::kNormal,
277
+ OptionTypeFlags::kMutable}},
273
278
  {"expanded_compaction_factor",
274
279
  {0, OptionType::kInt, OptionVerificationType::kDeprecated,
275
280
  OptionTypeFlags::kMutable}},
@@ -550,6 +555,11 @@ static std::unordered_map<std::string, OptionTypeInfo>
550
555
  level_compaction_dynamic_level_bytes),
551
556
  OptionType::kBoolean, OptionVerificationType::kNormal,
552
557
  OptionTypeFlags::kNone}},
558
+ {"level_compaction_dynamic_file_size",
559
+ {offsetof(struct ImmutableCFOptions,
560
+ level_compaction_dynamic_file_size),
561
+ OptionType::kBoolean, OptionVerificationType::kNormal,
562
+ OptionTypeFlags::kNone}},
553
563
  {"optimize_filters_for_hits",
554
564
  {offsetof(struct ImmutableCFOptions, optimize_filters_for_hits),
555
565
  OptionType::kBoolean, OptionVerificationType::kNormal,
@@ -562,6 +572,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
562
572
  {offsetof(struct ImmutableCFOptions, preclude_last_level_data_seconds),
563
573
  OptionType::kUInt64T, OptionVerificationType::kNormal,
564
574
  OptionTypeFlags::kNone}},
575
+ {"preserve_internal_time_seconds",
576
+ {offsetof(struct ImmutableCFOptions, preserve_internal_time_seconds),
577
+ OptionType::kUInt64T, OptionVerificationType::kNormal,
578
+ OptionTypeFlags::kNone}},
565
579
  // Need to keep this around to be able to read old OPTIONS files.
566
580
  {"max_mem_compaction_level",
567
581
  {0, OptionType::kInt, OptionVerificationType::kDeprecated,
@@ -892,11 +906,14 @@ ImmutableCFOptions::ImmutableCFOptions(const ColumnFamilyOptions& cf_options)
892
906
  bloom_locality(cf_options.bloom_locality),
893
907
  level_compaction_dynamic_level_bytes(
894
908
  cf_options.level_compaction_dynamic_level_bytes),
909
+ level_compaction_dynamic_file_size(
910
+ cf_options.level_compaction_dynamic_file_size),
895
911
  num_levels(cf_options.num_levels),
896
912
  optimize_filters_for_hits(cf_options.optimize_filters_for_hits),
897
913
  force_consistency_checks(cf_options.force_consistency_checks),
898
914
  preclude_last_level_data_seconds(
899
915
  cf_options.preclude_last_level_data_seconds),
916
+ preserve_internal_time_seconds(cf_options.preserve_internal_time_seconds),
900
917
  memtable_insert_with_hint_prefix_extractor(
901
918
  cf_options.memtable_insert_with_hint_prefix_extractor),
902
919
  cf_paths(cf_options.cf_paths),
@@ -1022,6 +1039,8 @@ void MutableCFOptions::Dump(Logger* log) const {
1022
1039
  level0_stop_writes_trigger);
1023
1040
  ROCKS_LOG_INFO(log, " max_compaction_bytes: %" PRIu64,
1024
1041
  max_compaction_bytes);
1042
+ ROCKS_LOG_INFO(log, " ignore_max_compaction_bytes_for_input: %s",
1043
+ ignore_max_compaction_bytes_for_input ? "true" : "false");
1025
1044
  ROCKS_LOG_INFO(log, " target_file_size_base: %" PRIu64,
1026
1045
  target_file_size_base);
1027
1046
  ROCKS_LOG_INFO(log, " target_file_size_multiplier: %d",
@@ -64,6 +64,8 @@ struct ImmutableCFOptions {
64
64
 
65
65
  bool level_compaction_dynamic_level_bytes;
66
66
 
67
+ bool level_compaction_dynamic_file_size;
68
+
67
69
  int num_levels;
68
70
 
69
71
  bool optimize_filters_for_hits;
@@ -72,6 +74,8 @@ struct ImmutableCFOptions {
72
74
 
73
75
  uint64_t preclude_last_level_data_seconds;
74
76
 
77
+ uint64_t preserve_internal_time_seconds;
78
+
75
79
  std::shared_ptr<const SliceTransform>
76
80
  memtable_insert_with_hint_prefix_extractor;
77
81
 
@@ -126,6 +130,8 @@ struct MutableCFOptions {
126
130
  level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger),
127
131
  level0_stop_writes_trigger(options.level0_stop_writes_trigger),
128
132
  max_compaction_bytes(options.max_compaction_bytes),
133
+ ignore_max_compaction_bytes_for_input(
134
+ options.ignore_max_compaction_bytes_for_input),
129
135
  target_file_size_base(options.target_file_size_base),
130
136
  target_file_size_multiplier(options.target_file_size_multiplier),
131
137
  max_bytes_for_level_base(options.max_bytes_for_level_base),
@@ -188,6 +194,7 @@ struct MutableCFOptions {
188
194
  level0_slowdown_writes_trigger(0),
189
195
  level0_stop_writes_trigger(0),
190
196
  max_compaction_bytes(0),
197
+ ignore_max_compaction_bytes_for_input(true),
191
198
  target_file_size_base(0),
192
199
  target_file_size_multiplier(0),
193
200
  max_bytes_for_level_base(0),
@@ -269,6 +276,7 @@ struct MutableCFOptions {
269
276
  int level0_slowdown_writes_trigger;
270
277
  int level0_stop_writes_trigger;
271
278
  uint64_t max_compaction_bytes;
279
+ bool ignore_max_compaction_bytes_for_input;
272
280
  uint64_t target_file_size_base;
273
281
  int target_file_size_multiplier;
274
282
  uint64_t max_bytes_for_level_base;
@@ -872,6 +872,7 @@ INSTANTIATE_TEST_CASE_P(
872
872
  } // namespace test
873
873
  } // namespace ROCKSDB_NAMESPACE
874
874
  int main(int argc, char** argv) {
875
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
875
876
  ::testing::InitGoogleTest(&argc, argv);
876
877
  #ifdef GFLAGS
877
878
  ParseCommandLineFlags(&argc, &argv, true);
@@ -71,6 +71,8 @@ AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
71
71
  max_bytes_for_level_multiplier_additional(
72
72
  options.max_bytes_for_level_multiplier_additional),
73
73
  max_compaction_bytes(options.max_compaction_bytes),
74
+ ignore_max_compaction_bytes_for_input(
75
+ options.ignore_max_compaction_bytes_for_input),
74
76
  soft_pending_compaction_bytes_limit(
75
77
  options.soft_pending_compaction_bytes_limit),
76
78
  hard_pending_compaction_bytes_limit(
@@ -94,6 +96,7 @@ AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
94
96
  sample_for_compression(options.sample_for_compression),
95
97
  preclude_last_level_data_seconds(
96
98
  options.preclude_last_level_data_seconds),
99
+ preserve_internal_time_seconds(options.preserve_internal_time_seconds),
97
100
  enable_blob_files(options.enable_blob_files),
98
101
  min_blob_size(options.min_blob_size),
99
102
  blob_file_size(options.blob_file_size),
@@ -280,6 +283,8 @@ void ColumnFamilyOptions::Dump(Logger* log) const {
280
283
  ROCKS_LOG_HEADER(
281
284
  log, " Options.max_compaction_bytes: %" PRIu64,
282
285
  max_compaction_bytes);
286
+ ROCKS_LOG_HEADER(log, " Options.ignore_max_compaction_bytes_for_input: %s",
287
+ ignore_max_compaction_bytes_for_input ? "true" : "false");
283
288
  ROCKS_LOG_HEADER(
284
289
  log,
285
290
  " Options.arena_block_size: %" ROCKSDB_PRIszt,
@@ -403,6 +408,8 @@ void ColumnFamilyOptions::Dump(Logger* log) const {
403
408
  periodic_compaction_seconds);
404
409
  ROCKS_LOG_HEADER(log, " Options.preclude_last_level_data_seconds: %" PRIu64,
405
410
  preclude_last_level_data_seconds);
411
+ ROCKS_LOG_HEADER(log, " Options.preserve_internal_time_seconds: %" PRIu64,
412
+ preserve_internal_time_seconds);
406
413
  ROCKS_LOG_HEADER(log, " Options.enable_blob_files: %s",
407
414
  enable_blob_files ? "true" : "false");
408
415
  ROCKS_LOG_HEADER(
@@ -229,6 +229,8 @@ void UpdateColumnFamilyOptions(const MutableCFOptions& moptions,
229
229
  moptions.level0_slowdown_writes_trigger;
230
230
  cf_opts->level0_stop_writes_trigger = moptions.level0_stop_writes_trigger;
231
231
  cf_opts->max_compaction_bytes = moptions.max_compaction_bytes;
232
+ cf_opts->ignore_max_compaction_bytes_for_input =
233
+ moptions.ignore_max_compaction_bytes_for_input;
232
234
  cf_opts->target_file_size_base = moptions.target_file_size_base;
233
235
  cf_opts->target_file_size_multiplier = moptions.target_file_size_multiplier;
234
236
  cf_opts->max_bytes_for_level_base = moptions.max_bytes_for_level_base;
@@ -301,6 +303,8 @@ void UpdateColumnFamilyOptions(const ImmutableCFOptions& ioptions,
301
303
  cf_opts->bloom_locality = ioptions.bloom_locality;
302
304
  cf_opts->level_compaction_dynamic_level_bytes =
303
305
  ioptions.level_compaction_dynamic_level_bytes;
306
+ cf_opts->level_compaction_dynamic_file_size =
307
+ ioptions.level_compaction_dynamic_file_size;
304
308
  cf_opts->num_levels = ioptions.num_levels;
305
309
  cf_opts->optimize_filters_for_hits = ioptions.optimize_filters_for_hits;
306
310
  cf_opts->force_consistency_checks = ioptions.force_consistency_checks;
@@ -312,6 +316,8 @@ void UpdateColumnFamilyOptions(const ImmutableCFOptions& ioptions,
312
316
  cf_opts->blob_cache = ioptions.blob_cache;
313
317
  cf_opts->preclude_last_level_data_seconds =
314
318
  ioptions.preclude_last_level_data_seconds;
319
+ cf_opts->preserve_internal_time_seconds =
320
+ ioptions.preserve_internal_time_seconds;
315
321
 
316
322
  // TODO(yhchiang): find some way to handle the following derived options
317
323
  // * max_file_size
@@ -403,6 +403,8 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
403
403
  sizeof(ColumnFamilyOptions::TablePropertiesCollectorFactories)},
404
404
  {offsetof(struct ColumnFamilyOptions, preclude_last_level_data_seconds),
405
405
  sizeof(uint64_t)},
406
+ {offsetof(struct ColumnFamilyOptions, preserve_internal_time_seconds),
407
+ sizeof(uint64_t)},
406
408
  {offsetof(struct ColumnFamilyOptions, blob_cache),
407
409
  sizeof(std::shared_ptr<Cache>)},
408
410
  {offsetof(struct ColumnFamilyOptions, comparator), sizeof(Comparator*)},
@@ -484,6 +486,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
484
486
  "max_write_buffer_number=84;"
485
487
  "write_buffer_size=1653;"
486
488
  "max_compaction_bytes=64;"
489
+ "ignore_max_compaction_bytes_for_input=true;"
487
490
  "max_bytes_for_level_multiplier=60;"
488
491
  "memtable_factory=SkipListFactory;"
489
492
  "compression=kNoCompression;"
@@ -509,6 +512,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
509
512
  "experimental_mempurge_threshold=0.0001;"
510
513
  "optimize_filters_for_hits=false;"
511
514
  "level_compaction_dynamic_level_bytes=false;"
515
+ "level_compaction_dynamic_file_size=true;"
512
516
  "inplace_update_support=false;"
513
517
  "compaction_style=kCompactionStyleFIFO;"
514
518
  "compaction_pri=kMinOverlappingRatio;"
@@ -531,6 +535,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
531
535
  "bottommost_temperature=kWarm;"
532
536
  "last_level_temperature=kWarm;"
533
537
  "preclude_last_level_data_seconds=86400;"
538
+ "preserve_internal_time_seconds=86400;"
534
539
  "compaction_options_fifo={max_table_files_size=3;allow_"
535
540
  "compaction=false;age_for_warm=1;};"
536
541
  "blob_cache=1M;"
@@ -607,6 +612,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
607
612
  } // namespace ROCKSDB_NAMESPACE
608
613
 
609
614
  int main(int argc, char** argv) {
615
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
610
616
  ::testing::InitGoogleTest(&argc, argv);
611
617
  #ifdef GFLAGS
612
618
  ParseCommandLineFlags(&argc, &argv, true);