@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
@@ -221,7 +221,7 @@ Compaction::Compaction(
221
221
  : input_vstorage_(vstorage),
222
222
  start_level_(_inputs[0].level),
223
223
  output_level_(_output_level),
224
- max_output_file_size_(_target_file_size),
224
+ target_output_file_size_(_target_file_size),
225
225
  max_compaction_bytes_(_max_compaction_bytes),
226
226
  max_subcompactions_(_max_subcompactions),
227
227
  immutable_options_(_immutable_options),
@@ -268,6 +268,14 @@ Compaction::Compaction(
268
268
  max_subcompactions_ = _mutable_db_options.max_subcompactions;
269
269
  }
270
270
 
271
+ // for the non-bottommost levels, it tries to build files match the target
272
+ // file size, but not guaranteed. It could be 2x the size of the target size.
273
+ max_output_file_size_ =
274
+ bottommost_level_ || grandparents_.empty() ||
275
+ !_immutable_options.level_compaction_dynamic_file_size
276
+ ? target_output_file_size_
277
+ : 2 * target_output_file_size_;
278
+
271
279
  #ifndef NDEBUG
272
280
  for (size_t i = 1; i < inputs_.size(); ++i) {
273
281
  assert(inputs_[i].level > inputs_[i - 1].level);
@@ -314,9 +322,13 @@ void Compaction::PopulatePenultimateLevelOutputRange() {
314
322
  return;
315
323
  }
316
324
 
325
+ int exclude_level =
326
+ immutable_options_.compaction_style == kCompactionStyleUniversal
327
+ ? kInvalidLevel
328
+ : number_levels_ - 1;
317
329
  GetBoundaryKeys(input_vstorage_, inputs_,
318
330
  &penultimate_level_smallest_user_key_,
319
- &penultimate_level_largest_user_key_, number_levels_ - 1);
331
+ &penultimate_level_largest_user_key_, exclude_level);
320
332
  }
321
333
 
322
334
  Compaction::~Compaction() {
@@ -334,6 +346,8 @@ bool Compaction::SupportsPerKeyPlacement() const {
334
346
 
335
347
  int Compaction::GetPenultimateLevel() const { return penultimate_level_; }
336
348
 
349
+ // smallest_key and largest_key include timestamps if user-defined timestamp is
350
+ // enabled.
337
351
  bool Compaction::OverlapPenultimateLevelOutputRange(
338
352
  const Slice& smallest_key, const Slice& largest_key) const {
339
353
  if (!SupportsPerKeyPlacement()) {
@@ -342,11 +356,13 @@ bool Compaction::OverlapPenultimateLevelOutputRange(
342
356
  const Comparator* ucmp =
343
357
  input_vstorage_->InternalComparator()->user_comparator();
344
358
 
345
- return ucmp->Compare(smallest_key, penultimate_level_largest_user_key_) <=
346
- 0 &&
347
- ucmp->Compare(largest_key, penultimate_level_smallest_user_key_) >= 0;
359
+ return ucmp->CompareWithoutTimestamp(
360
+ smallest_key, penultimate_level_largest_user_key_) <= 0 &&
361
+ ucmp->CompareWithoutTimestamp(
362
+ largest_key, penultimate_level_smallest_user_key_) >= 0;
348
363
  }
349
364
 
365
+ // key includes timestamp if user-defined timestamp is enabled.
350
366
  bool Compaction::WithinPenultimateLevelOutputRange(const Slice& key) const {
351
367
  if (!SupportsPerKeyPlacement()) {
352
368
  return false;
@@ -355,8 +371,10 @@ bool Compaction::WithinPenultimateLevelOutputRange(const Slice& key) const {
355
371
  const Comparator* ucmp =
356
372
  input_vstorage_->InternalComparator()->user_comparator();
357
373
 
358
- return ucmp->Compare(key, penultimate_level_smallest_user_key_) >= 0 &&
359
- ucmp->Compare(key, penultimate_level_largest_user_key_) <= 0;
374
+ return ucmp->CompareWithoutTimestamp(
375
+ key, penultimate_level_smallest_user_key_) >= 0 &&
376
+ ucmp->CompareWithoutTimestamp(
377
+ key, penultimate_level_largest_user_key_) <= 0;
360
378
  }
361
379
 
362
380
  bool Compaction::InputCompressionMatchesOutput() const {
@@ -163,6 +163,9 @@ class Compaction {
163
163
  // Maximum size of files to build during this compaction.
164
164
  uint64_t max_output_file_size() const { return max_output_file_size_; }
165
165
 
166
+ // Target output file size for this compaction
167
+ uint64_t target_output_file_size() const { return target_output_file_size_; }
168
+
166
169
  // What compression for output
167
170
  CompressionType output_compression() const { return output_compression_; }
168
171
 
@@ -316,6 +319,8 @@ class Compaction {
316
319
 
317
320
  // Return true if the given range is overlap with penultimate level output
318
321
  // range.
322
+ // Both smallest_key and largest_key include timestamps if user-defined
323
+ // timestamp is enabled.
319
324
  bool OverlapPenultimateLevelOutputRange(const Slice& smallest_key,
320
325
  const Slice& largest_key) const;
321
326
 
@@ -325,6 +330,7 @@ class Compaction {
325
330
  // If per_key_placement is not supported, always return false.
326
331
  // TODO: currently it doesn't support moving data from the last level to the
327
332
  // penultimate level
333
+ // key includes timestamp if user-defined timestamp is enabled.
328
334
  bool WithinPenultimateLevelOutputRange(const Slice& key) const;
329
335
 
330
336
  CompactionReason compaction_reason() const { return compaction_reason_; }
@@ -412,6 +418,7 @@ class Compaction {
412
418
 
413
419
  const int start_level_; // the lowest level to be compacted
414
420
  const int output_level_; // levels to which output files are stored
421
+ uint64_t target_output_file_size_;
415
422
  uint64_t max_output_file_size_;
416
423
  uint64_t max_compaction_bytes_;
417
424
  uint32_t max_subcompactions_;
@@ -470,9 +477,11 @@ class Compaction {
470
477
  TablePropertiesCollection output_table_properties_;
471
478
 
472
479
  // smallest user keys in compaction
480
+ // includes timestamp if user-defined timestamp is enabled.
473
481
  Slice smallest_user_key_;
474
482
 
475
483
  // largest user keys in compaction
484
+ // includes timestamp if user-defined timestamp is enabled.
476
485
  Slice largest_user_key_;
477
486
 
478
487
  // Reason for compaction
@@ -493,6 +502,7 @@ class Compaction {
493
502
  const int penultimate_level_;
494
503
 
495
504
  // Key range for penultimate level output
505
+ // includes timestamp if user-defined timestamp is enabled.
496
506
  Slice penultimate_level_smallest_user_key_;
497
507
  Slice penultimate_level_largest_user_key_;
498
508
  };
@@ -34,7 +34,8 @@ CompactionIterator::CompactionIterator(
34
34
  const std::atomic<bool>* shutting_down,
35
35
  const std::shared_ptr<Logger> info_log,
36
36
  const std::string* full_history_ts_low,
37
- const SequenceNumber penultimate_level_cutoff_seqno)
37
+ const SequenceNumber preserve_time_min_seqno,
38
+ const SequenceNumber preclude_last_level_min_seqno)
38
39
  : CompactionIterator(
39
40
  input, cmp, merge_helper, last_sequence, snapshots,
40
41
  earliest_write_conflict_snapshot, job_snapshot, snapshot_checker, env,
@@ -44,7 +45,7 @@ CompactionIterator::CompactionIterator(
44
45
  std::unique_ptr<CompactionProxy>(
45
46
  compaction ? new RealCompaction(compaction) : nullptr),
46
47
  compaction_filter, shutting_down, info_log, full_history_ts_low,
47
- penultimate_level_cutoff_seqno) {}
48
+ preserve_time_min_seqno, preclude_last_level_min_seqno) {}
48
49
 
49
50
  CompactionIterator::CompactionIterator(
50
51
  InternalIterator* input, const Comparator* cmp, MergeHelper* merge_helper,
@@ -61,7 +62,8 @@ CompactionIterator::CompactionIterator(
61
62
  const std::atomic<bool>* shutting_down,
62
63
  const std::shared_ptr<Logger> info_log,
63
64
  const std::string* full_history_ts_low,
64
- const SequenceNumber penultimate_level_cutoff_seqno)
65
+ const SequenceNumber preserve_time_min_seqno,
66
+ const SequenceNumber preclude_last_level_min_seqno)
65
67
  : input_(input, cmp,
66
68
  !compaction || compaction->DoesInputReferenceBlobFiles()),
67
69
  cmp_(cmp),
@@ -105,8 +107,10 @@ CompactionIterator::CompactionIterator(
105
107
  current_key_committed_(false),
106
108
  cmp_with_history_ts_low_(0),
107
109
  level_(compaction_ == nullptr ? 0 : compaction_->level()),
108
- penultimate_level_cutoff_seqno_(penultimate_level_cutoff_seqno) {
110
+ preserve_time_min_seqno_(preserve_time_min_seqno),
111
+ preclude_last_level_min_seqno_(preclude_last_level_min_seqno) {
109
112
  assert(snapshots_ != nullptr);
113
+ assert(preserve_time_min_seqno_ <= preclude_last_level_min_seqno_);
110
114
 
111
115
  if (compaction_ != nullptr) {
112
116
  level_ptrs_ = std::vector<size_t>(compaction_->number_levels(), 0);
@@ -914,8 +918,17 @@ void CompactionIterator::NextFromInput() {
914
918
  } else {
915
919
  // 1. new user key -OR-
916
920
  // 2. different snapshot stripe
917
- bool should_delete = range_del_agg_->ShouldDelete(
918
- key_, RangeDelPositioningMode::kForwardTraversal);
921
+ // If user-defined timestamp is enabled, we consider keys for GC if they
922
+ // are below history_ts_low_. CompactionRangeDelAggregator::ShouldDelete()
923
+ // only considers range deletions that are at or below history_ts_low_ and
924
+ // trim_ts_. We drop keys here that are below history_ts_low_ and are
925
+ // covered by a range tombstone that is at or below history_ts_low_ and
926
+ // trim_ts.
927
+ bool should_delete = false;
928
+ if (!timestamp_size_ || cmp_with_history_ts_low_ < 0) {
929
+ should_delete = range_del_agg_->ShouldDelete(
930
+ key_, RangeDelPositioningMode::kForwardTraversal);
931
+ }
919
932
  if (should_delete) {
920
933
  ++iter_stats_.num_record_drop_hidden;
921
934
  ++iter_stats_.num_record_drop_range_del;
@@ -1079,6 +1092,7 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
1079
1092
  }
1080
1093
 
1081
1094
  void CompactionIterator::DecideOutputLevel() {
1095
+ assert(compaction_->SupportsPerKeyPlacement());
1082
1096
  #ifndef NDEBUG
1083
1097
  // Could be overridden by unittest
1084
1098
  PerKeyPlacementContext context(level_, ikey_.user_key, value_,
@@ -1090,7 +1104,7 @@ void CompactionIterator::DecideOutputLevel() {
1090
1104
 
1091
1105
  // if the key is newer than the cutoff sequence or within the earliest
1092
1106
  // snapshot, it should output to the penultimate level.
1093
- if (ikey_.sequence > penultimate_level_cutoff_seqno_ ||
1107
+ if (ikey_.sequence > preclude_last_level_min_seqno_ ||
1094
1108
  ikey_.sequence > earliest_snapshot_) {
1095
1109
  output_to_penultimate_level_ = true;
1096
1110
  }
@@ -1152,7 +1166,7 @@ void CompactionIterator::PrepareOutput() {
1152
1166
  DefinitelyInSnapshot(ikey_.sequence, earliest_snapshot_) &&
1153
1167
  ikey_.type != kTypeMerge && current_key_committed_ &&
1154
1168
  !output_to_penultimate_level_ &&
1155
- ikey_.sequence < penultimate_level_cutoff_seqno_) {
1169
+ ikey_.sequence < preserve_time_min_seqno_) {
1156
1170
  if (ikey_.type == kTypeDeletion ||
1157
1171
  (ikey_.type == kTypeSingleDeletion && timestamp_size_ == 0)) {
1158
1172
  ROCKS_LOG_FATAL(
@@ -88,6 +88,7 @@ class CompactionIterator {
88
88
 
89
89
  virtual int number_levels() const = 0;
90
90
 
91
+ // Result includes timestamp if user-defined timestamp is enabled.
91
92
  virtual Slice GetLargestUserKey() const = 0;
92
93
 
93
94
  virtual bool allow_ingest_behind() const = 0;
@@ -108,6 +109,7 @@ class CompactionIterator {
108
109
 
109
110
  virtual bool SupportsPerKeyPlacement() const = 0;
110
111
 
112
+ // `key` includes timestamp if user-defined timestamp is enabled.
111
113
  virtual bool WithinPenultimateLevelOutputRange(const Slice& key) const = 0;
112
114
  };
113
115
 
@@ -133,6 +135,7 @@ class CompactionIterator {
133
135
 
134
136
  int number_levels() const override { return compaction_->number_levels(); }
135
137
 
138
+ // Result includes timestamp if user-defined timestamp is enabled.
136
139
  Slice GetLargestUserKey() const override {
137
140
  return compaction_->GetLargestUserKey();
138
141
  }
@@ -173,6 +176,7 @@ class CompactionIterator {
173
176
 
174
177
  // Check if key is within penultimate level output range, to see if it's
175
178
  // safe to output to the penultimate level for per_key_placement feature.
179
+ // `key` includes timestamp if user-defined timestamp is enabled.
176
180
  bool WithinPenultimateLevelOutputRange(const Slice& key) const override {
177
181
  return compaction_->WithinPenultimateLevelOutputRange(key);
178
182
  }
@@ -196,7 +200,8 @@ class CompactionIterator {
196
200
  const std::atomic<bool>* shutting_down = nullptr,
197
201
  const std::shared_ptr<Logger> info_log = nullptr,
198
202
  const std::string* full_history_ts_low = nullptr,
199
- const SequenceNumber penultimate_level_cutoff_seqno = kMaxSequenceNumber);
203
+ const SequenceNumber preserve_time_min_seqno = kMaxSequenceNumber,
204
+ const SequenceNumber preclude_last_level_min_seqno = kMaxSequenceNumber);
200
205
 
201
206
  // Constructor with custom CompactionProxy, used for tests.
202
207
  CompactionIterator(
@@ -214,7 +219,8 @@ class CompactionIterator {
214
219
  const std::atomic<bool>* shutting_down = nullptr,
215
220
  const std::shared_ptr<Logger> info_log = nullptr,
216
221
  const std::string* full_history_ts_low = nullptr,
217
- const SequenceNumber penultimate_level_cutoff_seqno = kMaxSequenceNumber);
222
+ const SequenceNumber preserve_time_min_seqno = kMaxSequenceNumber,
223
+ const SequenceNumber preclude_last_level_min_seqno = kMaxSequenceNumber);
218
224
 
219
225
  ~CompactionIterator();
220
226
 
@@ -466,9 +472,12 @@ class CompactionIterator {
466
472
  // output to.
467
473
  bool output_to_penultimate_level_{false};
468
474
 
469
- // any key later than this sequence number should have
470
- // output_to_penultimate_level_ set to true
471
- const SequenceNumber penultimate_level_cutoff_seqno_ = kMaxSequenceNumber;
475
+ // min seqno for preserving the time information.
476
+ const SequenceNumber preserve_time_min_seqno_ = kMaxSequenceNumber;
477
+
478
+ // min seqno to preclude the data from the last level, if the key seqno larger
479
+ // than this, it will be output to penultimate level
480
+ const SequenceNumber preclude_last_level_min_seqno_ = kMaxSequenceNumber;
472
481
 
473
482
  void AdvanceInputIter() { input_.Next(); }
474
483
 
@@ -1497,6 +1497,7 @@ INSTANTIATE_TEST_CASE_P(CompactionIteratorTsGcTestInstance,
1497
1497
  } // namespace ROCKSDB_NAMESPACE
1498
1498
 
1499
1499
  int main(int argc, char** argv) {
1500
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
1500
1501
  ::testing::InitGoogleTest(&argc, argv);
1501
1502
  return RUN_ALL_TESTS();
1502
1503
  }
@@ -97,6 +97,8 @@ const char* GetCompactionReasonString(CompactionReason compaction_reason) {
97
97
  return "ChangeTemperature";
98
98
  case CompactionReason::kForcedBlobGC:
99
99
  return "ForcedBlobGC";
100
+ case CompactionReason::kRoundRobinTtl:
101
+ return "RoundRobinTtl";
100
102
  case CompactionReason::kNumOfReasons:
101
103
  // fall through
102
104
  default:
@@ -263,11 +265,15 @@ void CompactionJob::Prepare() {
263
265
  /*sub_job_id*/ 0);
264
266
  }
265
267
 
266
- if (c->immutable_options()->preclude_last_level_data_seconds > 0) {
267
- // TODO(zjay): move to a function
268
- seqno_time_mapping_.SetMaxTimeDuration(
269
- c->immutable_options()->preclude_last_level_data_seconds);
268
+ // collect all seqno->time information from the input files which will be used
269
+ // to encode seqno->time to the output files.
270
+ uint64_t preserve_time_duration =
271
+ std::max(c->immutable_options()->preserve_internal_time_seconds,
272
+ c->immutable_options()->preclude_last_level_data_seconds);
273
+
274
+ if (preserve_time_duration > 0) {
270
275
  // setup seqno_time_mapping_
276
+ seqno_time_mapping_.SetMaxTimeDuration(preserve_time_duration);
271
277
  for (const auto& each_level : *c->inputs()) {
272
278
  for (const auto& fmd : each_level.files) {
273
279
  std::shared_ptr<const TableProperties> tp;
@@ -293,10 +299,27 @@ void CompactionJob::Prepare() {
293
299
  ROCKS_LOG_WARN(db_options_.info_log,
294
300
  "Failed to get current time in compaction: Status: %s",
295
301
  status.ToString().c_str());
296
- penultimate_level_cutoff_seqno_ = 0;
302
+ // preserve all time information
303
+ preserve_time_min_seqno_ = 0;
304
+ preclude_last_level_min_seqno_ = 0;
297
305
  } else {
298
- penultimate_level_cutoff_seqno_ =
299
- seqno_time_mapping_.TruncateOldEntries(_current_time);
306
+ seqno_time_mapping_.TruncateOldEntries(_current_time);
307
+ uint64_t preserve_time =
308
+ static_cast<uint64_t>(_current_time) > preserve_time_duration
309
+ ? _current_time - preserve_time_duration
310
+ : 0;
311
+ preserve_time_min_seqno_ =
312
+ seqno_time_mapping_.GetOldestSequenceNum(preserve_time);
313
+ if (c->immutable_options()->preclude_last_level_data_seconds > 0) {
314
+ uint64_t preclude_last_level_time =
315
+ static_cast<uint64_t>(_current_time) >
316
+ c->immutable_options()->preclude_last_level_data_seconds
317
+ ? _current_time -
318
+ c->immutable_options()->preclude_last_level_data_seconds
319
+ : 0;
320
+ preclude_last_level_min_seqno_ =
321
+ seqno_time_mapping_.GetOldestSequenceNum(preclude_last_level_time);
322
+ }
300
323
  }
301
324
  }
302
325
  }
@@ -1035,7 +1058,8 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
1035
1058
  NotifyOnSubcompactionBegin(sub_compact);
1036
1059
 
1037
1060
  auto range_del_agg = std::make_unique<CompactionRangeDelAggregator>(
1038
- &cfd->internal_comparator(), existing_snapshots_);
1061
+ &cfd->internal_comparator(), existing_snapshots_, &full_history_ts_low_,
1062
+ &trim_ts_);
1039
1063
 
1040
1064
  // TODO: since we already use C++17, should use
1041
1065
  // std::optional<const Slice> instead.
@@ -1213,8 +1237,8 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
1213
1237
  blob_file_builder.get(), db_options_.allow_data_in_errors,
1214
1238
  db_options_.enforce_single_del_contracts, manual_compaction_canceled_,
1215
1239
  sub_compact->compaction, compaction_filter, shutting_down_,
1216
- db_options_.info_log, full_history_ts_low,
1217
- penultimate_level_cutoff_seqno_);
1240
+ db_options_.info_log, full_history_ts_low, preserve_time_min_seqno_,
1241
+ preclude_last_level_min_seqno_);
1218
1242
  c_iter->SeekToFirst();
1219
1243
 
1220
1244
  // Assign range delete aggregator to the target output level, which makes sure
@@ -1455,7 +1479,7 @@ Status CompactionJob::FinishCompactionOutputFile(
1455
1479
  : nullptr,
1456
1480
  sub_compact->end.has_value() ? &(sub_compact->end.value()) : nullptr,
1457
1481
  range_del_out_stats, bottommost_level_, cfd->internal_comparator(),
1458
- earliest_snapshot, next_table_min_key);
1482
+ earliest_snapshot, next_table_min_key, full_history_ts_low_);
1459
1483
  }
1460
1484
  RecordDroppedKeys(range_del_out_stats, &sub_compact->compaction_job_stats);
1461
1485
  TEST_SYNC_POINT("CompactionJob::FinishCompactionOutputFile1");
@@ -1661,7 +1685,9 @@ Status CompactionJob::InstallCompactionResults(
1661
1685
  stats.GetBytes());
1662
1686
  }
1663
1687
 
1664
- if (compaction->compaction_reason() == CompactionReason::kLevelMaxLevelSize &&
1688
+ if ((compaction->compaction_reason() ==
1689
+ CompactionReason::kLevelMaxLevelSize ||
1690
+ compaction->compaction_reason() == CompactionReason::kRoundRobinTtl) &&
1665
1691
  compaction->immutable_options()->compaction_pri == kRoundRobin) {
1666
1692
  int start_level = compaction->start_level();
1667
1693
  if (start_level > 0) {
@@ -335,12 +335,15 @@ class CompactionJob {
335
335
  // it also collects the smallest_seqno -> oldest_ancester_time from the SST.
336
336
  SeqnoToTimeMapping seqno_time_mapping_;
337
337
 
338
- // cutoff sequence number for penultimate level, only set when
339
- // per_key_placement feature is enabled.
340
- // If a key with sequence number larger than penultimate_level_cutoff_seqno_,
341
- // it will be placed on the penultimate_level and seqnuence number won't be
342
- // zeroed out.
343
- SequenceNumber penultimate_level_cutoff_seqno_ = kMaxSequenceNumber;
338
+ // Minimal sequence number for preserving the time information. The time info
339
+ // older than this sequence number won't be preserved after the compaction and
340
+ // if it's bottommost compaction, the seq num will be zeroed out.
341
+ SequenceNumber preserve_time_min_seqno_ = kMaxSequenceNumber;
342
+
343
+ // Minimal sequence number to preclude the data from the last level. If the
344
+ // key has bigger (newer) sequence number than this, it will be precluded from
345
+ // the last level (output to penultimate level).
346
+ SequenceNumber preclude_last_level_min_seqno_ = kMaxSequenceNumber;
344
347
 
345
348
  // Get table file name in where it's outputting to, which should also be in
346
349
  // `output_directory_`.