@nxtedition/rocksdb 7.1.30 → 7.1.32

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 (381) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +2 -2
  2. package/deps/rocksdb/rocksdb/cache/cache_test.cc +15 -23
  3. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +0 -1
  4. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +4 -5
  5. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -1
  6. package/deps/rocksdb/rocksdb/crash_test.mk +1 -1
  7. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +15 -0
  8. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +1 -1
  9. package/deps/rocksdb/rocksdb/db/column_family.cc +4 -1
  10. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +78 -6
  11. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +32 -6
  12. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -8
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +47 -8
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -3
  16. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +105 -166
  17. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +3 -4
  18. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +46 -15
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +47 -26
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +17 -10
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +11 -5
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +12 -6
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -2
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +337 -103
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -5
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -2
  27. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +524 -1
  28. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +164 -0
  29. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +6 -6
  30. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5 -7
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -1
  33. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +4 -4
  34. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +1 -0
  35. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +2 -3
  36. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
  38. package/deps/rocksdb/rocksdb/db/memtable.cc +16 -23
  39. package/deps/rocksdb/rocksdb/db/merge_helper.cc +30 -0
  40. package/deps/rocksdb/rocksdb/db/merge_helper.h +9 -0
  41. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +29 -9
  42. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +10 -7
  43. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +12 -8
  44. package/deps/rocksdb/rocksdb/db/version_set.cc +11 -6
  45. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +142 -0
  46. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +59 -53
  47. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -2
  48. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  49. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -3
  50. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +7 -4
  51. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +0 -2
  52. package/deps/rocksdb/rocksdb/env/env.cc +16 -19
  53. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -1
  54. package/deps/rocksdb/rocksdb/env/env_chroot.cc +20 -20
  55. package/deps/rocksdb/rocksdb/env/env_encryption.cc +62 -60
  56. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  57. package/deps/rocksdb/rocksdb/env/env_test.cc +179 -176
  58. package/deps/rocksdb/rocksdb/env/file_system.cc +3 -4
  59. package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -2
  60. package/deps/rocksdb/rocksdb/env/io_posix.h +1 -2
  61. package/deps/rocksdb/rocksdb/env/mock_env.h +1 -0
  62. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +4 -4
  63. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +6 -5
  64. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +2 -5
  65. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +6 -7
  66. package/deps/rocksdb/rocksdb/file/file_util.cc +1 -1
  67. package/deps/rocksdb/rocksdb/file/filename.cc +16 -17
  68. package/deps/rocksdb/rocksdb/file/filename.h +4 -5
  69. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +492 -496
  70. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +1 -1
  71. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +1 -3
  72. package/deps/rocksdb/rocksdb/file/read_write_util.cc +1 -0
  73. package/deps/rocksdb/rocksdb/file/read_write_util.h +1 -0
  74. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +6 -8
  75. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +1 -2
  76. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -4
  77. package/deps/rocksdb/rocksdb/include/rocksdb/block_cache_trace_writer.h +4 -4
  78. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +166 -167
  79. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +1 -0
  80. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +0 -1
  81. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +12 -12
  82. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +2 -0
  83. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +1 -0
  84. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +1 -0
  85. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -1
  86. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +1 -0
  87. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +1 -0
  88. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +0 -4
  89. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -3
  90. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +1 -1
  91. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -0
  92. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +1 -0
  93. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +1 -0
  94. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +1 -0
  95. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +1 -0
  96. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +4 -4
  97. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -0
  98. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -4
  99. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +1 -1
  100. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +2 -2
  101. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  102. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +3 -3
  103. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +3 -7
  104. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +20 -23
  105. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  106. package/deps/rocksdb/rocksdb/logging/event_logger.cc +1 -3
  107. package/deps/rocksdb/rocksdb/logging/event_logger.h +4 -5
  108. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +2 -1
  109. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -3
  110. package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -2
  111. package/deps/rocksdb/rocksdb/logging/logging.h +3 -3
  112. package/deps/rocksdb/rocksdb/memory/allocator.h +1 -0
  113. package/deps/rocksdb/rocksdb/memory/arena_test.cc +1 -1
  114. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +2 -0
  115. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -0
  116. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -0
  117. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +17 -20
  118. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +13 -15
  119. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +11 -10
  120. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +3 -3
  121. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +2 -2
  122. package/deps/rocksdb/rocksdb/memtable/skiplist.h +30 -28
  123. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +4 -6
  124. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +73 -70
  125. package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +1 -1
  126. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +21 -23
  127. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +24 -38
  129. package/deps/rocksdb/rocksdb/monitoring/histogram.h +10 -17
  130. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +19 -19
  131. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +22 -30
  132. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +4 -6
  133. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -0
  134. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +4 -12
  135. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -3
  136. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  137. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +12 -14
  138. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +2 -3
  139. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -1
  140. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -3
  141. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +1 -0
  142. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  143. package/deps/rocksdb/rocksdb/monitoring/statistics.h +7 -7
  144. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +12 -22
  145. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +7 -10
  146. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  147. package/deps/rocksdb/rocksdb/port/lang.h +3 -1
  148. package/deps/rocksdb/rocksdb/port/likely.h +2 -2
  149. package/deps/rocksdb/rocksdb/port/mmap.h +2 -2
  150. package/deps/rocksdb/rocksdb/port/port_dirent.h +2 -2
  151. package/deps/rocksdb/rocksdb/port/port_posix.cc +32 -27
  152. package/deps/rocksdb/rocksdb/port/port_posix.h +31 -30
  153. package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -1
  154. package/deps/rocksdb/rocksdb/port/sys_time.h +1 -1
  155. package/deps/rocksdb/rocksdb/port/win/io_win.h +6 -7
  156. package/deps/rocksdb/rocksdb/port/win/port_win.h +12 -20
  157. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +5 -4
  158. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -5
  159. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -4
  160. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +30 -49
  161. package/deps/rocksdb/rocksdb/port/win/win_thread.h +5 -5
  162. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -62
  163. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +2 -2
  164. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +4 -3
  165. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -0
  166. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -2
  167. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +2 -1
  168. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -1
  169. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -4
  170. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
  171. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +0 -1
  172. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +2 -0
  173. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -1
  174. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -30
  175. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +2 -1
  176. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
  177. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +3 -3
  178. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -0
  179. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +4 -5
  180. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -3
  181. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -2
  182. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +1 -0
  183. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +0 -1
  184. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +1 -1
  185. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +0 -1
  186. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -6
  187. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -1
  188. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +1 -0
  189. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -6
  190. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -2
  191. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +90 -80
  192. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +5 -4
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +63 -69
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +2 -1
  195. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +58 -57
  196. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +3 -3
  197. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +35 -30
  198. package/deps/rocksdb/rocksdb/table/get_context.cc +16 -10
  199. package/deps/rocksdb/rocksdb/table/iter_heap.h +2 -0
  200. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -1
  201. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -3
  202. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +31 -16
  203. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +6 -6
  204. package/deps/rocksdb/rocksdb/table/multiget_context.h +5 -6
  205. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +1 -0
  206. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +1 -1
  207. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +7 -10
  208. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +3 -1
  209. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +2 -2
  210. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +4 -3
  211. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +2 -2
  212. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -0
  213. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +10 -21
  214. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +14 -12
  215. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +2 -5
  216. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -3
  217. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +0 -6
  218. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +0 -33
  219. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -6
  220. package/deps/rocksdb/rocksdb/table/table_properties.cc +24 -37
  221. package/deps/rocksdb/rocksdb/table/table_reader.h +3 -2
  222. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +9 -8
  223. package/deps/rocksdb/rocksdb/table/table_test.cc +77 -82
  224. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +1 -0
  225. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
  226. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +8 -18
  227. package/deps/rocksdb/rocksdb/test_util/sync_point.h +2 -2
  228. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +4 -3
  229. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +13 -18
  230. package/deps/rocksdb/rocksdb/test_util/testharness.cc +1 -2
  231. package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -7
  232. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +3 -4
  233. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +1 -1
  234. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +1 -0
  235. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -7
  236. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +3 -2
  237. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +296 -314
  238. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +6 -6
  239. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +2 -1
  240. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +57 -64
  241. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +6 -5
  242. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +2 -2
  243. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  244. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  245. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +1 -2
  246. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +10 -10
  247. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -1
  248. package/deps/rocksdb/rocksdb/tools/write_stress.cc +6 -3
  249. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +12 -31
  250. package/deps/rocksdb/rocksdb/util/autovector.h +3 -6
  251. package/deps/rocksdb/rocksdb/util/autovector_test.cc +12 -12
  252. package/deps/rocksdb/rocksdb/util/bloom_test.cc +8 -12
  253. package/deps/rocksdb/rocksdb/util/coding.cc +1 -0
  254. package/deps/rocksdb/rocksdb/util/coding.h +17 -15
  255. package/deps/rocksdb/rocksdb/util/coding_test.cc +14 -15
  256. package/deps/rocksdb/rocksdb/util/comparator.cc +4 -4
  257. package/deps/rocksdb/rocksdb/util/compression.h +6 -3
  258. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +2 -2
  259. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +5 -8
  260. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +1 -1
  261. package/deps/rocksdb/rocksdb/util/crc32c.cc +202 -297
  262. package/deps/rocksdb/rocksdb/util/crc32c.h +2 -3
  263. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +2 -0
  264. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +39 -54
  265. package/deps/rocksdb/rocksdb/util/defer.h +2 -1
  266. package/deps/rocksdb/rocksdb/util/defer_test.cc +2 -1
  267. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +2 -1
  268. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +1 -1
  269. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  270. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -1
  271. package/deps/rocksdb/rocksdb/util/filelock_test.cc +24 -29
  272. package/deps/rocksdb/rocksdb/util/filter_bench.cc +4 -4
  273. package/deps/rocksdb/rocksdb/util/hash_test.cc +2 -2
  274. package/deps/rocksdb/rocksdb/util/heap.h +5 -4
  275. package/deps/rocksdb/rocksdb/util/heap_test.cc +15 -25
  276. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  277. package/deps/rocksdb/rocksdb/util/murmurhash.cc +7 -2
  278. package/deps/rocksdb/rocksdb/util/murmurhash.h +4 -3
  279. package/deps/rocksdb/rocksdb/util/mutexlock.h +5 -11
  280. package/deps/rocksdb/rocksdb/util/random.cc +1 -0
  281. package/deps/rocksdb/rocksdb/util/random.h +2 -4
  282. package/deps/rocksdb/rocksdb/util/random_test.cc +2 -1
  283. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +4 -3
  284. package/deps/rocksdb/rocksdb/util/slice.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/slice_test.cc +1 -2
  286. package/deps/rocksdb/rocksdb/util/status.cc +2 -0
  287. package/deps/rocksdb/rocksdb/util/string_util.cc +2 -0
  288. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +64 -76
  289. package/deps/rocksdb/rocksdb/util/thread_local.cc +18 -32
  290. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -3
  291. package/deps/rocksdb/rocksdb/util/thread_operation.h +34 -43
  292. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +54 -73
  293. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +18 -18
  294. package/deps/rocksdb/rocksdb/util/timer.h +4 -9
  295. package/deps/rocksdb/rocksdb/util/timer_queue.h +1 -0
  296. package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +1 -0
  297. package/deps/rocksdb/rocksdb/util/xxhash.cc +1 -2
  298. package/deps/rocksdb/rocksdb/util/xxhash.h +7 -4
  299. package/deps/rocksdb/rocksdb/util/xxph3.h +3 -1
  300. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +16 -24
  301. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +1 -1
  302. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +106 -104
  303. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +3 -4
  304. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +6 -6
  305. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +1 -2
  306. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +3 -4
  307. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -1
  308. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +11 -15
  309. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -2
  310. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +3 -3
  311. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +12 -12
  312. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +56 -55
  313. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +91 -74
  314. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +17 -34
  315. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +21 -45
  316. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +74 -97
  317. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +17 -18
  318. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -4
  319. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +19 -19
  320. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +19 -18
  321. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +7 -10
  322. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +3 -4
  323. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +2 -2
  324. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +10 -15
  325. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +1 -0
  327. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +5 -3
  328. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -2
  329. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +4 -5
  330. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -7
  331. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -13
  332. package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +1 -0
  333. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +7 -9
  334. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +4 -5
  335. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +4 -3
  336. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +1 -1
  337. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +3 -3
  338. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +2 -4
  339. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +2 -2
  340. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +39 -50
  341. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +2 -2
  342. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +4 -3
  343. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +2 -2
  344. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +5 -7
  345. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +5 -4
  346. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  347. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +3 -6
  348. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +1 -1
  349. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +2 -2
  350. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -1
  351. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +1 -0
  352. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -1
  353. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +18 -13
  355. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +1 -3
  356. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +15 -14
  357. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +14 -12
  358. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -2
  359. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +4 -7
  360. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1 -2
  361. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  362. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +1 -1
  363. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -1
  364. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +3 -2
  365. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +1 -2
  366. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +3 -2
  367. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +5 -5
  368. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -4
  369. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -2
  370. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +5 -4
  371. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -1
  372. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +1 -0
  373. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +3 -4
  374. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +2 -6
  375. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +80 -79
  376. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -3
  377. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +9 -17
  378. package/package.json +1 -1
  379. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  380. package/prebuilds/darwin-x64/node.napi.node +0 -0
  381. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -1573,9 +1573,9 @@ endif()
1573
1573
 
1574
1574
  option(WITH_TRACE_TOOLS "build with trace tools" ON)
1575
1575
  if(WITH_TRACE_TOOLS)
1576
- add_executable(block_cache_trace_analyzer_tool${ARTIFACT_SUFFIX}
1576
+ add_executable(block_cache_trace_analyzer${ARTIFACT_SUFFIX}
1577
1577
  tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc)
1578
- target_link_libraries(block_cache_trace_analyzer_tool${ARTIFACT_SUFFIX}
1578
+ target_link_libraries(block_cache_trace_analyzer${ARTIFACT_SUFFIX}
1579
1579
  ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS})
1580
1580
 
1581
1581
  add_executable(trace_analyzer${ARTIFACT_SUFFIX}
@@ -202,29 +202,21 @@ class CacheTest : public testing::TestWithParam<std::string> {
202
202
  cache->Erase(EncodeKey(key));
203
203
  }
204
204
 
205
- int Lookup(int key) {
206
- return Lookup(cache_, key);
207
- }
205
+ int Lookup(int key) { return Lookup(cache_, key); }
208
206
 
209
207
  void Insert(int key, int value, int charge = 1) {
210
208
  Insert(cache_, key, value, charge);
211
209
  }
212
210
 
213
- void Erase(int key) {
214
- Erase(cache_, key);
215
- }
211
+ void Erase(int key) { Erase(cache_, key); }
216
212
 
217
- int Lookup2(int key) {
218
- return Lookup(cache2_, key);
219
- }
213
+ int Lookup2(int key) { return Lookup(cache2_, key); }
220
214
 
221
215
  void Insert2(int key, int value, int charge = 1) {
222
216
  Insert(cache2_, key, value, charge);
223
217
  }
224
218
 
225
- void Erase2(int key) {
226
- Erase(cache2_, key);
227
- }
219
+ void Erase2(int key) { Erase(cache2_, key); }
228
220
  };
229
221
 
230
222
  CacheTest* CacheTest::current_;
@@ -418,13 +410,13 @@ TEST_P(CacheTest, HitAndMiss) {
418
410
 
419
411
  Insert(100, 101);
420
412
  ASSERT_EQ(101, Lookup(100));
421
- ASSERT_EQ(-1, Lookup(200));
422
- ASSERT_EQ(-1, Lookup(300));
413
+ ASSERT_EQ(-1, Lookup(200));
414
+ ASSERT_EQ(-1, Lookup(300));
423
415
 
424
416
  Insert(200, 201);
425
417
  ASSERT_EQ(101, Lookup(100));
426
418
  ASSERT_EQ(201, Lookup(200));
427
- ASSERT_EQ(-1, Lookup(300));
419
+ ASSERT_EQ(-1, Lookup(300));
428
420
 
429
421
  Insert(100, 102);
430
422
  if (GetParam() == kHyperClock) {
@@ -434,7 +426,7 @@ TEST_P(CacheTest, HitAndMiss) {
434
426
  ASSERT_EQ(102, Lookup(100));
435
427
  }
436
428
  ASSERT_EQ(201, Lookup(200));
437
- ASSERT_EQ(-1, Lookup(300));
429
+ ASSERT_EQ(-1, Lookup(300));
438
430
 
439
431
  ASSERT_EQ(1U, deleted_keys_.size());
440
432
  ASSERT_EQ(100, deleted_keys_[0]);
@@ -463,14 +455,14 @@ TEST_P(CacheTest, Erase) {
463
455
  Insert(100, 101);
464
456
  Insert(200, 201);
465
457
  Erase(100);
466
- ASSERT_EQ(-1, Lookup(100));
458
+ ASSERT_EQ(-1, Lookup(100));
467
459
  ASSERT_EQ(201, Lookup(200));
468
460
  ASSERT_EQ(1U, deleted_keys_.size());
469
461
  ASSERT_EQ(100, deleted_keys_[0]);
470
462
  ASSERT_EQ(101, deleted_values_[0]);
471
463
 
472
464
  Erase(100);
473
- ASSERT_EQ(-1, Lookup(100));
465
+ ASSERT_EQ(-1, Lookup(100));
474
466
  ASSERT_EQ(201, Lookup(200));
475
467
  ASSERT_EQ(1U, deleted_keys_.size());
476
468
  }
@@ -515,7 +507,7 @@ TEST_P(CacheTest, EvictionPolicy) {
515
507
  Insert(200, 201);
516
508
  // Frequently used entry must be kept around
517
509
  for (int i = 0; i < 2 * kCacheSize; i++) {
518
- Insert(1000+i, 2000+i);
510
+ Insert(1000 + i, 2000 + i);
519
511
  ASSERT_EQ(101, Lookup(100));
520
512
  }
521
513
  ASSERT_EQ(101, Lookup(100));
@@ -686,7 +678,7 @@ TEST_P(CacheTest, HeavyEntries) {
686
678
  ASSERT_EQ(1000 + i, r);
687
679
  }
688
680
  }
689
- ASSERT_LE(cached_weight, kCacheSize + kCacheSize/10);
681
+ ASSERT_LE(cached_weight, kCacheSize + kCacheSize / 10);
690
682
  }
691
683
 
692
684
  TEST_P(CacheTest, NewId) {
@@ -704,7 +696,7 @@ class Value {
704
696
 
705
697
  namespace {
706
698
  void deleter(const Slice& /*key*/, void* value) {
707
- delete static_cast<Value *>(value);
699
+ delete static_cast<Value*>(value);
708
700
  }
709
701
  } // namespace
710
702
 
@@ -859,7 +851,7 @@ TEST_P(CacheTest, OverCapacity) {
859
851
  // a LRUCache with n entries and one shard only
860
852
  std::shared_ptr<Cache> cache = NewCache(n, 0, false);
861
853
 
862
- std::vector<Cache::Handle*> handles(n+1);
854
+ std::vector<Cache::Handle*> handles(n + 1);
863
855
 
864
856
  // Insert n+1 entries, but not releasing.
865
857
  for (int i = 0; i < static_cast<int>(n + 1); i++) {
@@ -919,7 +911,7 @@ void legacy_callback(void* value, size_t charge) {
919
911
  legacy_callback_state.push_back(
920
912
  {DecodeValue(value), static_cast<int>(charge)});
921
913
  }
922
- };
914
+ }; // namespace
923
915
 
924
916
  TEST_P(CacheTest, ApplyToAllCacheEntriesTest) {
925
917
  std::vector<std::pair<int, int>> inserted;
@@ -235,7 +235,6 @@ struct LRUHandle {
235
235
  }
236
236
  };
237
237
 
238
-
239
238
  class LRUHandleTable {
240
239
  public:
241
240
  explicit LRUHandleTable(int hash_bits);
@@ -386,7 +386,7 @@ Status LRUCacheShard::InsertItem(LRUHandle* e, LRUHandle** handle,
386
386
  last_reference_list.push_back(e);
387
387
  } else {
388
388
  if (free_handle_on_fail) {
389
- delete[] reinterpret_cast<char*>(e);
389
+ free(e);
390
390
  *handle = nullptr;
391
391
  }
392
392
  s = Status::MemoryLimit("Insert failed due to LRU cache being full.");
@@ -559,8 +559,7 @@ LRUHandle* LRUCacheShard::Lookup(const Slice& key, uint32_t hash,
559
559
  secondary_cache_->Lookup(key, create_cb, wait, found_dummy_entry,
560
560
  is_in_sec_cache);
561
561
  if (secondary_handle != nullptr) {
562
- e = reinterpret_cast<LRUHandle*>(
563
- new char[sizeof(LRUHandle) - 1 + key.size()]);
562
+ e = static_cast<LRUHandle*>(malloc(sizeof(LRUHandle) - 1 + key.size()));
564
563
 
565
564
  e->m_flags = 0;
566
565
  e->im_flags = 0;
@@ -683,8 +682,8 @@ Status LRUCacheShard::Insert(const Slice& key, uint32_t hash, void* value,
683
682
  // Allocate the memory here outside of the mutex.
684
683
  // If the cache is full, we'll have to release it.
685
684
  // It shouldn't happen very often though.
686
- LRUHandle* e = reinterpret_cast<LRUHandle*>(
687
- new char[sizeof(LRUHandle) - 1 + key.size()]);
685
+ LRUHandle* e =
686
+ static_cast<LRUHandle*>(malloc(sizeof(LRUHandle) - 1 + key.size()));
688
687
 
689
688
  e->value = value;
690
689
  e->m_flags = 0;
@@ -212,6 +212,7 @@ struct LRUHandle {
212
212
 
213
213
  void Free() {
214
214
  assert(refs == 0);
215
+
215
216
  if (!IsSecondaryCacheCompatible() && info_.deleter) {
216
217
  (*info_.deleter)(key(), value);
217
218
  } else if (IsSecondaryCacheCompatible()) {
@@ -226,7 +227,8 @@ struct LRUHandle {
226
227
  (*info_.helper->del_cb)(key(), value);
227
228
  }
228
229
  }
229
- delete[] reinterpret_cast<char*>(this);
230
+
231
+ free(this);
230
232
  }
231
233
 
232
234
  inline size_t CalcuMetaCharge(
@@ -8,7 +8,7 @@ DB_STRESS_CMD?=./db_stress
8
8
  include common.mk
9
9
 
10
10
  CRASHTEST_MAKE=$(MAKE) -f crash_test.mk
11
- CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD)
11
+ CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --cleanup_cmd='$(DB_CLEANUP_CMD)'
12
12
 
13
13
  .PHONY: crash_test crash_test_with_atomic_flush crash_test_with_txn \
14
14
  crash_test_with_best_efforts_recovery crash_test_with_ts \
@@ -22,6 +22,8 @@ constexpr uint32_t kVersion1 = 1;
22
22
 
23
23
  using ExpirationRange = std::pair<uint64_t, uint64_t>;
24
24
 
25
+ // clang-format off
26
+
25
27
  // Format of blob log file header (30 bytes):
26
28
  //
27
29
  // +--------------+---------+---------+-------+-------------+-------------------+
@@ -35,6 +37,9 @@ using ExpirationRange = std::pair<uint64_t, uint64_t>;
35
37
  //
36
38
  // Expiration range in the header is a rough range based on
37
39
  // blob_db_options.ttl_range_secs.
40
+
41
+ // clang-format on
42
+
38
43
  struct BlobLogHeader {
39
44
  static constexpr size_t kSize = 30;
40
45
 
@@ -57,6 +62,8 @@ struct BlobLogHeader {
57
62
  Status DecodeFrom(Slice slice);
58
63
  };
59
64
 
65
+ // clang-format off
66
+
60
67
  // Format of blob log file footer (32 bytes):
61
68
  //
62
69
  // +--------------+------------+-------------------+------------+
@@ -69,6 +76,9 @@ struct BlobLogHeader {
69
76
  //
70
77
  // Unlike the same field in file header, expiration range in the footer is the
71
78
  // range of smallest and largest expiration of the data in this file.
79
+
80
+ // clang-format on
81
+
72
82
  struct BlobLogFooter {
73
83
  static constexpr size_t kSize = 32;
74
84
 
@@ -81,6 +91,8 @@ struct BlobLogFooter {
81
91
  Status DecodeFrom(Slice slice);
82
92
  };
83
93
 
94
+ // clang-format off
95
+
84
96
  // Blob record format (32 bytes header + key + value):
85
97
  //
86
98
  // +------------+--------------+------------+------------+----------+---------+-----------+
@@ -100,6 +112,9 @@ struct BlobLogFooter {
100
112
  //
101
113
  // We could use variable length encoding (Varint64) to save more space, but it
102
114
  // make reader more complicated.
115
+
116
+ // clang-format on
117
+
103
118
  struct BlobLogRecord {
104
119
  // header include fields up to blob CRC
105
120
  static constexpr size_t kHeaderSize = 32;
@@ -779,7 +779,7 @@ TEST_F(DBBlobBasicTest, MultiGetBlobsFromMultipleFiles) {
779
779
  Options options = GetDefaultOptions();
780
780
 
781
781
  LRUCacheOptions co;
782
- co.capacity = 2 << 20; // 2MB
782
+ co.capacity = 2 << 20; // 2MB
783
783
  co.num_shard_bits = 2;
784
784
  co.metadata_charge_policy = kDontChargeCacheMetadata;
785
785
  auto backing_cache = NewLRUCache(co);
@@ -1211,11 +1211,14 @@ Compaction* ColumnFamilyData::CompactRange(
1211
1211
  const InternalKey* begin, const InternalKey* end,
1212
1212
  InternalKey** compaction_end, bool* conflict,
1213
1213
  uint64_t max_file_num_to_ignore, const std::string& trim_ts) {
1214
+ SequenceNumber earliest_mem_seqno =
1215
+ std::min(mem_->GetEarliestSequenceNumber(),
1216
+ imm_.current()->GetEarliestSequenceNumber(false));
1214
1217
  auto* result = compaction_picker_->CompactRange(
1215
1218
  GetName(), mutable_cf_options, mutable_db_options,
1216
1219
  current_->storage_info(), input_level, output_level,
1217
1220
  compact_range_options, begin, end, compaction_end, conflict,
1218
- max_file_num_to_ignore, trim_ts);
1221
+ max_file_num_to_ignore, trim_ts, earliest_mem_seqno);
1219
1222
  if (result != nullptr) {
1220
1223
  result->SetInputVersion(current_);
1221
1224
  }
@@ -259,7 +259,7 @@ Compaction::Compaction(
259
259
  ? mutable_cf_options()->blob_garbage_collection_age_cutoff
260
260
  : _blob_garbage_collection_age_cutoff),
261
261
  penultimate_level_(EvaluatePenultimateLevel(
262
- immutable_options_, start_level_, output_level_)) {
262
+ vstorage, immutable_options_, start_level_, output_level_)) {
263
263
  MarkFilesBeingCompacted(true);
264
264
  if (is_manual_compaction_) {
265
265
  compaction_reason_ = CompactionReason::kManualCompaction;
@@ -322,13 +322,67 @@ void Compaction::PopulatePenultimateLevelOutputRange() {
322
322
  return;
323
323
  }
324
324
 
325
- int exclude_level =
326
- immutable_options_.compaction_style == kCompactionStyleUniversal
327
- ? kInvalidLevel
328
- : number_levels_ - 1;
325
+ // exclude the last level, the range of all input levels is the safe range
326
+ // of keys that can be moved up.
327
+ int exclude_level = number_levels_ - 1;
328
+ penultimate_output_range_type_ = PenultimateOutputRangeType::kNonLastRange;
329
+
330
+ // For universal compaction, the penultimate_output_range could be extended if
331
+ // all penultimate level files are included in the compaction (which includes
332
+ // the case that the penultimate level is empty).
333
+ if (immutable_options_.compaction_style == kCompactionStyleUniversal) {
334
+ exclude_level = kInvalidLevel;
335
+ std::set<uint64_t> penultimate_inputs;
336
+ for (const auto& input_lvl : inputs_) {
337
+ if (input_lvl.level == penultimate_level_) {
338
+ for (const auto& file : input_lvl.files) {
339
+ penultimate_inputs.emplace(file->fd.GetNumber());
340
+ }
341
+ }
342
+ }
343
+ auto penultimate_files = input_vstorage_->LevelFiles(penultimate_level_);
344
+ for (const auto& file : penultimate_files) {
345
+ if (penultimate_inputs.find(file->fd.GetNumber()) ==
346
+ penultimate_inputs.end()) {
347
+ exclude_level = number_levels_ - 1;
348
+ penultimate_output_range_type_ = PenultimateOutputRangeType::kFullRange;
349
+ break;
350
+ }
351
+ }
352
+ }
353
+
329
354
  GetBoundaryKeys(input_vstorage_, inputs_,
330
355
  &penultimate_level_smallest_user_key_,
331
356
  &penultimate_level_largest_user_key_, exclude_level);
357
+
358
+ // If there's a case that the penultimate level output range is overlapping
359
+ // with the existing files, disable the penultimate level output by setting
360
+ // the range to empty. One example is the range delete could have overlap
361
+ // boundary with the next file. (which is actually a false overlap)
362
+ // TODO: Exclude such false overlap, so it won't disable the penultimate
363
+ // output.
364
+ std::set<uint64_t> penultimate_inputs;
365
+ for (const auto& input_lvl : inputs_) {
366
+ if (input_lvl.level == penultimate_level_) {
367
+ for (const auto& file : input_lvl.files) {
368
+ penultimate_inputs.emplace(file->fd.GetNumber());
369
+ }
370
+ }
371
+ }
372
+
373
+ auto penultimate_files = input_vstorage_->LevelFiles(penultimate_level_);
374
+ for (const auto& file : penultimate_files) {
375
+ if (penultimate_inputs.find(file->fd.GetNumber()) ==
376
+ penultimate_inputs.end() &&
377
+ OverlapPenultimateLevelOutputRange(file->smallest.user_key(),
378
+ file->largest.user_key())) {
379
+ // basically disable the penultimate range output. which should be rare
380
+ // or a false overlap caused by range del
381
+ penultimate_level_smallest_user_key_ = "";
382
+ penultimate_level_largest_user_key_ = "";
383
+ penultimate_output_range_type_ = PenultimateOutputRangeType::kDisabled;
384
+ }
385
+ }
332
386
  }
333
387
 
334
388
  Compaction::~Compaction() {
@@ -368,6 +422,11 @@ bool Compaction::WithinPenultimateLevelOutputRange(const Slice& key) const {
368
422
  return false;
369
423
  }
370
424
 
425
+ if (penultimate_level_smallest_user_key_.empty() ||
426
+ penultimate_level_largest_user_key_.empty()) {
427
+ return false;
428
+ }
429
+
371
430
  const Comparator* ucmp =
372
431
  input_vstorage_->InternalComparator()->user_comparator();
373
432
 
@@ -749,6 +808,7 @@ uint64_t Compaction::MinInputFileOldestAncesterTime(
749
808
  }
750
809
 
751
810
  int Compaction::EvaluatePenultimateLevel(
811
+ const VersionStorageInfo* vstorage,
752
812
  const ImmutableOptions& immutable_options, const int start_level,
753
813
  const int output_level) {
754
814
  // TODO: currently per_key_placement feature only support level and universal
@@ -763,7 +823,19 @@ int Compaction::EvaluatePenultimateLevel(
763
823
 
764
824
  int penultimate_level = output_level - 1;
765
825
  assert(penultimate_level < immutable_options.num_levels);
766
- if (penultimate_level <= 0 || penultimate_level < start_level) {
826
+ if (penultimate_level <= 0) {
827
+ return kInvalidLevel;
828
+ }
829
+
830
+ // If the penultimate level is not within input level -> output level range
831
+ // check if the penultimate output level is empty, if it's empty, it could
832
+ // also be locked for the penultimate output.
833
+ // TODO: ideally, it only needs to check if there's a file within the
834
+ // compaction output key range. For simplicity, it just check if there's any
835
+ // file on the penultimate level.
836
+ if (start_level == immutable_options.num_levels - 1 &&
837
+ (immutable_options.compaction_style != kCompactionStyleUniversal ||
838
+ !vstorage->LevelFiles(penultimate_level).empty())) {
767
839
  return kInvalidLevel;
768
840
  }
769
841
 
@@ -87,6 +87,15 @@ class Compaction {
87
87
  BlobGarbageCollectionPolicy::kUseDefault,
88
88
  double blob_garbage_collection_age_cutoff = -1);
89
89
 
90
+ // The type of the penultimate level output range
91
+ enum class PenultimateOutputRangeType : int {
92
+ kNotSupported, // it cannot output to the penultimate level
93
+ kFullRange, // any data could be output to the penultimate level
94
+ kNonLastRange, // only the keys within non_last_level compaction inputs can
95
+ // be outputted to the penultimate level
96
+ kDisabled, // no data can be outputted to the penultimate level
97
+ };
98
+
90
99
  // No copying allowed
91
100
  Compaction(const Compaction&) = delete;
92
101
  void operator=(const Compaction&) = delete;
@@ -310,6 +319,18 @@ class Compaction {
310
319
 
311
320
  Slice GetLargestUserKey() const { return largest_user_key_; }
312
321
 
322
+ Slice GetPenultimateLevelSmallestUserKey() const {
323
+ return penultimate_level_smallest_user_key_;
324
+ }
325
+
326
+ Slice GetPenultimateLevelLargestUserKey() const {
327
+ return penultimate_level_largest_user_key_;
328
+ }
329
+
330
+ PenultimateOutputRangeType GetPenultimateOutputRangeType() const {
331
+ return penultimate_output_range_type_;
332
+ }
333
+
313
334
  // Return true if the compaction supports per_key_placement
314
335
  bool SupportsPerKeyPlacement() const;
315
336
 
@@ -369,11 +390,18 @@ class Compaction {
369
390
  }
370
391
 
371
392
  static constexpr int kInvalidLevel = -1;
393
+
372
394
  // Evaluate penultimate output level. If the compaction supports
373
395
  // per_key_placement feature, it returns the penultimate level number.
374
396
  // Otherwise, it's set to kInvalidLevel (-1), which means
375
397
  // output_to_penultimate_level is not supported.
376
- static int EvaluatePenultimateLevel(const ImmutableOptions& immutable_options,
398
+ // Note: even the penultimate level output is supported (PenultimateLevel !=
399
+ // kInvalidLevel), some key range maybe unsafe to be outputted to the
400
+ // penultimate level. The safe key range is populated by
401
+ // `PopulatePenultimateLevelOutputRange()`.
402
+ // Which could potentially disable all penultimate level output.
403
+ static int EvaluatePenultimateLevel(const VersionStorageInfo* vstorage,
404
+ const ImmutableOptions& immutable_options,
377
405
  const int start_level,
378
406
  const int output_level);
379
407
 
@@ -390,11 +418,6 @@ class Compaction {
390
418
  // populate penultimate level output range, which will be used to determine if
391
419
  // a key is safe to output to the penultimate level (details see
392
420
  // `Compaction::WithinPenultimateLevelOutputRange()`.
393
- // TODO: Currently the penultimate level output range is the min/max keys of
394
- // non-last-level input files. Which is only good if there's no key moved
395
- // from the last level to the penultimate level. For a more complicated per
396
- // key placement which may move data from the last level to the penultimate
397
- // level, it needs extra check.
398
421
  void PopulatePenultimateLevelOutputRange();
399
422
 
400
423
  // Get the atomic file boundaries for all files in the compaction. Necessary
@@ -503,8 +526,11 @@ class Compaction {
503
526
 
504
527
  // Key range for penultimate level output
505
528
  // includes timestamp if user-defined timestamp is enabled.
529
+ // penultimate_output_range_type_ shows the range type
506
530
  Slice penultimate_level_smallest_user_key_;
507
531
  Slice penultimate_level_largest_user_key_;
532
+ PenultimateOutputRangeType penultimate_output_range_type_ =
533
+ PenultimateOutputRangeType::kNotSupported;
508
534
  };
509
535
 
510
536
  #ifndef NDEBUG
@@ -825,8 +825,8 @@ void CompactionIterator::NextFromInput() {
825
825
  cmp_with_history_ts_low_ < 0)) &&
826
826
  bottommost_level_) {
827
827
  // Handle the case where we have a delete key at the bottom most level
828
- // We can skip outputting the key iff there are no subsequent puts for this
829
- // key
828
+ // We can skip outputting the key iff there are no subsequent puts for
829
+ // this key
830
830
  assert(!compaction_ || compaction_->KeyNotExistsBeyondOutputLevel(
831
831
  ikey_.user_key, &level_ptrs_));
832
832
  ParsedInternalKey next_ikey;
@@ -853,8 +853,8 @@ void CompactionIterator::NextFromInput() {
853
853
  DefinitelyNotInSnapshot(next_ikey.sequence, prev_snapshot))) {
854
854
  AdvanceInputIter();
855
855
  }
856
- // If you find you still need to output a row with this key, we need to output the
857
- // delete too
856
+ // If you find you still need to output a row with this key, we need to
857
+ // output the delete too
858
858
  if (input_.Valid() &&
859
859
  (ParseInternalKey(input_.key(), &next_ikey, allow_data_in_errors_)
860
860
  .ok()) &&
@@ -1212,8 +1212,8 @@ inline SequenceNumber CompactionIterator::findEarliestVisibleSnapshot(
1212
1212
  ROCKS_LOG_FATAL(info_log_,
1213
1213
  "No snapshot left in findEarliestVisibleSnapshot");
1214
1214
  }
1215
- auto snapshots_iter = std::lower_bound(
1216
- snapshots_->begin(), snapshots_->end(), in);
1215
+ auto snapshots_iter =
1216
+ std::lower_bound(snapshots_->begin(), snapshots_->end(), in);
1217
1217
  assert(prev_snapshot != nullptr);
1218
1218
  if (snapshots_iter == snapshots_->begin()) {
1219
1219
  *prev_snapshot = 0;
@@ -1228,8 +1228,8 @@ inline SequenceNumber CompactionIterator::findEarliestVisibleSnapshot(
1228
1228
  }
1229
1229
  }
1230
1230
  if (snapshot_checker_ == nullptr) {
1231
- return snapshots_iter != snapshots_->end()
1232
- ? *snapshots_iter : kMaxSequenceNumber;
1231
+ return snapshots_iter != snapshots_->end() ? *snapshots_iter
1232
+ : kMaxSequenceNumber;
1233
1233
  }
1234
1234
  bool has_released_snapshot = !released_snapshots_.empty();
1235
1235
  for (; snapshots_iter != snapshots_->end(); ++snapshots_iter) {
@@ -203,7 +203,8 @@ class TestSnapshotChecker : public SnapshotChecker {
203
203
  public:
204
204
  explicit TestSnapshotChecker(
205
205
  SequenceNumber last_committed_sequence,
206
- const std::unordered_map<SequenceNumber, SequenceNumber>& snapshots = {{}})
206
+ const std::unordered_map<SequenceNumber, SequenceNumber>& snapshots =
207
+ {{}})
207
208
  : last_committed_sequence_(last_committed_sequence),
208
209
  snapshots_(snapshots) {}
209
210
 
@@ -1038,7 +1039,7 @@ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
1038
1039
 
1039
1040
  TEST_F(CompactionIteratorWithSnapshotCheckerTest,
1040
1041
  NotRemoveDeletionIfValuePresentToEarlierSnapshot) {
1041
- AddSnapshot(2,1);
1042
+ AddSnapshot(2, 1);
1042
1043
  RunTest({test::KeyStr("a", 4, kTypeDeletion),
1043
1044
  test::KeyStr("a", 1, kTypeValue), test::KeyStr("b", 3, kTypeValue)},
1044
1045
  {"", "", ""},
@@ -107,6 +107,23 @@ const char* GetCompactionReasonString(CompactionReason compaction_reason) {
107
107
  }
108
108
  }
109
109
 
110
+ const char* GetCompactionPenultimateOutputRangeTypeString(
111
+ Compaction::PenultimateOutputRangeType range_type) {
112
+ switch (range_type) {
113
+ case Compaction::PenultimateOutputRangeType::kNotSupported:
114
+ return "NotSupported";
115
+ case Compaction::PenultimateOutputRangeType::kFullRange:
116
+ return "FullRange";
117
+ case Compaction::PenultimateOutputRangeType::kNonLastRange:
118
+ return "NonLastRange";
119
+ case Compaction::PenultimateOutputRangeType::kDisabled:
120
+ return "Disabled";
121
+ default:
122
+ assert(false);
123
+ return "Invalid";
124
+ }
125
+ }
126
+
110
127
  CompactionJob::CompactionJob(
111
128
  int job_id, Compaction* compaction, const ImmutableDBOptions& db_options,
112
129
  const MutableDBOptions& mutable_db_options, const FileOptions& file_options,
@@ -697,11 +714,12 @@ Status CompactionJob::Run() {
697
714
  break;
698
715
  }
699
716
  // Verify that the table is usable
700
- // We set for_compaction to false and don't OptimizeForCompactionTableRead
701
- // here because this is a special case after we finish the table building
702
- // No matter whether use_direct_io_for_flush_and_compaction is true,
703
- // we will regard this verification as user reads since the goal is
704
- // to cache it here for further user reads
717
+ // We set for_compaction to false and don't
718
+ // OptimizeForCompactionTableRead here because this is a special case
719
+ // after we finish the table building No matter whether
720
+ // use_direct_io_for_flush_and_compaction is true, we will regard this
721
+ // verification as user reads since the goal is to cache it here for
722
+ // further user reads
705
723
  ReadOptions read_options;
706
724
  InternalIterator* iter = cfd->table_cache()->NewIterator(
707
725
  read_options, file_options_, cfd->internal_comparator(),
@@ -747,8 +765,8 @@ Status CompactionJob::Run() {
747
765
  }
748
766
  };
749
767
  for (size_t i = 1; i < compact_->sub_compact_states.size(); i++) {
750
- thread_pool.emplace_back(verify_table,
751
- std::ref(compact_->sub_compact_states[i].status));
768
+ thread_pool.emplace_back(
769
+ verify_table, std::ref(compact_->sub_compact_states[i].status));
752
770
  }
753
771
  verify_table(compact_->sub_compact_states[0].status);
754
772
  for (auto& thread : thread_pool) {
@@ -1261,6 +1279,10 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
1261
1279
  };
1262
1280
 
1263
1281
  Status status;
1282
+ TEST_SYNC_POINT_CALLBACK(
1283
+ "CompactionJob::ProcessKeyValueCompaction()::Processing",
1284
+ reinterpret_cast<void*>(
1285
+ const_cast<Compaction*>(sub_compact->compaction)));
1264
1286
  while (status.ok() && !cfd->IsDropped() && c_iter->Valid()) {
1265
1287
  // Invariant: c_iter.status() is guaranteed to be OK if c_iter->Valid()
1266
1288
  // returns true.
@@ -1976,7 +1998,7 @@ void CompactionJob::LogCompaction() {
1976
1998
  compaction->InputLevelSummary(&inputs_summary), compaction->score());
1977
1999
  char scratch[2345];
1978
2000
  compaction->Summary(scratch, sizeof(scratch));
1979
- ROCKS_LOG_INFO(db_options_.info_log, "[%s] Compaction start summary: %s\n",
2001
+ ROCKS_LOG_INFO(db_options_.info_log, "[%s]: Compaction start summary: %s\n",
1980
2002
  cfd->GetName().c_str(), scratch);
1981
2003
  // build event logger report
1982
2004
  auto stream = event_logger_->Log();
@@ -1997,6 +2019,23 @@ void CompactionJob::LogCompaction() {
1997
2019
  << (existing_snapshots_.empty()
1998
2020
  ? int64_t{-1} // Use -1 for "none"
1999
2021
  : static_cast<int64_t>(existing_snapshots_[0]));
2022
+ if (compaction->SupportsPerKeyPlacement()) {
2023
+ stream << "preclude_last_level_min_seqno"
2024
+ << preclude_last_level_min_seqno_;
2025
+ stream << "penultimate_output_level" << compaction->GetPenultimateLevel();
2026
+ stream << "penultimate_output_range"
2027
+ << GetCompactionPenultimateOutputRangeTypeString(
2028
+ compaction->GetPenultimateOutputRangeType());
2029
+
2030
+ if (compaction->GetPenultimateOutputRangeType() ==
2031
+ Compaction::PenultimateOutputRangeType::kDisabled) {
2032
+ ROCKS_LOG_WARN(
2033
+ db_options_.info_log,
2034
+ "[%s] [JOB %d] Penultimate level output is disabled, likely "
2035
+ "because of the range conflict in the penultimate level",
2036
+ cfd->GetName().c_str(), job_id_);
2037
+ }
2038
+ }
2000
2039
  }
2001
2040
  }
2002
2041
 
@@ -261,12 +261,12 @@ class CompactionJob {
261
261
  Status OpenCompactionOutputFile(SubcompactionState* sub_compact,
262
262
  CompactionOutputs& outputs);
263
263
  void UpdateCompactionJobStats(
264
- const InternalStats::CompactionStats& stats) const;
264
+ const InternalStats::CompactionStats& stats) const;
265
265
  void RecordDroppedKeys(const CompactionIterationStats& c_iter_stats,
266
266
  CompactionJobStats* compaction_job_stats = nullptr);
267
267
 
268
- void UpdateCompactionInputStatsHelper(
269
- int* num_files, uint64_t* bytes_read, int input_level);
268
+ void UpdateCompactionInputStatsHelper(int* num_files, uint64_t* bytes_read,
269
+ int input_level);
270
270
 
271
271
  void NotifyOnSubcompactionBegin(SubcompactionState* sub_compact);
272
272