@nxtedition/rocksdb 15.4.1 → 15.5.0

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 (399) hide show
  1. package/binding.cc +24 -15
  2. package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
  3. package/deps/rocksdb/rocksdb/BUCK +42 -0
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
  5. package/deps/rocksdb/rocksdb/Makefile +59 -32
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
  8. package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
  10. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
  11. package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
  12. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
  14. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
  16. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
  17. package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
  24. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
  26. package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
  27. package/deps/rocksdb/rocksdb/db/builder.h +7 -0
  28. package/deps/rocksdb/rocksdb/db/c.cc +373 -57
  29. package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
  51. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
  52. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
  54. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
  55. package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
  57. package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
  58. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
  59. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
  60. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
  61. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
  62. package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
  63. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
  64. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
  65. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
  66. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
  79. package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
  80. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
  81. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
  82. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
  83. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
  84. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
  85. package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
  86. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
  87. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
  88. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
  90. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
  91. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
  92. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
  93. package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
  94. package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
  95. package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
  96. package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
  97. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
  98. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
  99. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
  100. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
  101. package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
  102. package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
  103. package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
  104. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
  105. package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
  108. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
  109. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
  111. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
  112. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
  113. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
  114. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
  115. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  116. package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
  117. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
  118. package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
  119. package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
  120. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
  121. package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
  122. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
  123. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  124. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
  125. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
  126. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
  127. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
  128. package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
  129. package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
  130. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
  131. package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
  132. package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
  133. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
  134. package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
  135. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  136. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
  137. package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
  138. package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
  139. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
  140. package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
  141. package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
  142. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
  143. package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
  144. package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
  145. package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
  146. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
  147. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
  148. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
  149. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
  150. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
  151. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
  159. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
  160. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
  161. package/deps/rocksdb/rocksdb/env/env.cc +1 -0
  162. package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
  163. package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
  164. package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
  165. package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
  166. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
  167. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
  168. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
  169. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
  170. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
  171. package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
  172. package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
  173. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
  174. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
  175. package/deps/rocksdb/rocksdb/folly.mk +22 -5
  176. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
  177. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
  178. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
  179. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
  180. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
  181. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
  182. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
  183. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
  185. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
  187. package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
  188. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
  192. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
  193. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
  194. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
  198. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
  200. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
  202. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
  203. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
  204. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
  205. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
  206. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
  207. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
  208. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
  209. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
  210. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  211. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
  212. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
  213. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
  214. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
  215. package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
  216. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
  217. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
  218. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
  219. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
  220. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
  221. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
  222. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
  223. package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
  224. package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
  225. package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
  226. package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
  227. package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
  228. package/deps/rocksdb/rocksdb/options/options.cc +5 -1
  229. package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
  230. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
  231. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
  232. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
  233. package/deps/rocksdb/rocksdb/port/lang.h +4 -0
  234. package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
  235. package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
  236. package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
  237. package/deps/rocksdb/rocksdb/src.mk +12 -0
  238. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
  239. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  240. package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
  241. package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
  247. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
  248. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
  249. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
  250. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
  251. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
  252. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
  253. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
  254. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
  255. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
  256. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
  258. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  259. package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
  260. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
  261. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
  262. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
  264. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
  265. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
  266. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
  267. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
  268. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
  269. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  270. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
  271. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
  272. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
  273. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
  274. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
  275. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
  276. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
  277. package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
  278. package/deps/rocksdb/rocksdb/table/format.cc +27 -15
  279. package/deps/rocksdb/rocksdb/table/format.h +41 -15
  280. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
  281. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
  282. package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
  283. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
  284. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  285. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
  286. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
  287. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
  288. package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
  289. package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
  290. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
  291. package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
  292. package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
  293. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
  294. package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
  295. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
  296. package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
  297. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
  298. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
  299. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
  300. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
  301. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
  302. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
  303. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
  304. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
  305. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
  306. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
  307. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
  308. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
  309. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
  310. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
  311. package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
  312. package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
  313. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
  314. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
  315. package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
  316. package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
  317. package/deps/rocksdb/rocksdb/util/coding.h +14 -27
  318. package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
  319. package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
  320. package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
  321. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
  322. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
  323. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
  324. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
  325. package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
  326. package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
  327. package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
  328. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
  329. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
  330. package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
  331. package/deps/rocksdb/rocksdb/util/math.h +3 -1
  332. package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
  333. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
  334. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
  335. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
  336. package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
  337. package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
  338. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
  339. package/deps/rocksdb/rocksdb/util/status.cc +3 -1
  340. package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
  341. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
  342. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
  343. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
  344. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
  345. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
  346. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
  347. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
  348. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
  349. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
  350. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
  351. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
  352. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
  353. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
  354. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
  355. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
  356. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
  357. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
  358. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  359. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
  360. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
  361. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
  362. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
  363. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
  364. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
  365. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
  366. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
  367. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
  368. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
  369. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
  370. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
  371. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
  372. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
  373. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
  374. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
  375. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
  376. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  377. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
  378. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
  379. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
  380. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
  381. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
  382. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
  383. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
  384. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
  385. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
  386. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
  387. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
  388. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
  389. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  390. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
  391. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
  392. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
  393. package/deps/rocksdb/rocksdb.gyp +7 -0
  394. package/iterator.js +2 -2
  395. package/package.json +1 -1
  396. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  397. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -76,7 +76,8 @@ class VersionBuilderTest : public testing::Test {
76
76
  oldest_blob_file_number, kUnknownOldestAncesterTime,
77
77
  kUnknownFileCreationTime, epoch_number, kUnknownFileChecksum,
78
78
  kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
79
- /* user_defined_timestamps_persisted */ true);
79
+ /* user_defined_timestamps_persisted */ true, /* min timestamp */ "",
80
+ /* max timestamp */ "");
80
81
  f->compensated_file_size = file_size;
81
82
  f->num_entries = num_entries;
82
83
  f->num_deletions = num_deletions;
@@ -22,6 +22,40 @@ namespace ROCKSDB_NAMESPACE {
22
22
 
23
23
  namespace {} // anonymous namespace
24
24
 
25
+ // After copying, we rely on the caller to ensure no double releases. Fragile,
26
+ // but keeps copying cheap.
27
+ PinnedTableReader& PinnedTableReader::operator=(
28
+ const PinnedTableReader& other) {
29
+ TableReader* r = other.reader_.load(std::memory_order_acquire);
30
+ // Only read handle_ when reader_ is non-null. Pin() writes handle_ before
31
+ // reader_ (with release), so a non-null reader_ guarantees handle_ is stable.
32
+ // If reader_ is null, Pin() may be in progress — avoid reading handle_.
33
+ handle_ = (r != nullptr) ? other.handle_ : nullptr;
34
+ reader_.store(r, std::memory_order_release);
35
+ return *this;
36
+ }
37
+
38
+ Cache::Handle* PinnedTableReader::GetCacheHandle() const {
39
+ (void)reader_.load(std::memory_order_acquire);
40
+ return handle_;
41
+ }
42
+
43
+ void PinnedTableReader::Pin(Cache::Handle* handle, TableReader* reader) {
44
+ assert(handle != nullptr);
45
+ assert(reader != nullptr);
46
+ handle_ = handle;
47
+ reader_.store(reader, std::memory_order_release);
48
+ }
49
+
50
+ void PinnedTableReader::Release(Cache* cache) {
51
+ (void)reader_.load(std::memory_order_acquire);
52
+ if (handle_ != nullptr) {
53
+ cache->Release(handle_);
54
+ handle_ = nullptr;
55
+ reader_.store(nullptr, std::memory_order_relaxed);
56
+ }
57
+ }
58
+
25
59
  uint64_t PackFileNumberAndPathId(uint64_t number, uint64_t path_id) {
26
60
  assert(number <= kFileNumberMask);
27
61
  return number | (path_id * (kFileNumberMask + 1));
@@ -83,7 +117,7 @@ bool VersionEdit::EncodeTo(std::string* dst,
83
117
  PutVarint32Varint64(dst, kNextFileNumber, next_file_number_);
84
118
  }
85
119
  if (has_max_column_family_) {
86
- PutVarint32Varint32(dst, kMaxColumnFamily, max_column_family_);
120
+ PutVarint32(dst, kMaxColumnFamily, max_column_family_);
87
121
  }
88
122
  if (has_min_log_number_to_keep_) {
89
123
  PutVarint32Varint64(dst, kMinLogNumberToKeep, min_log_number_to_keep_);
@@ -143,7 +177,7 @@ bool VersionEdit::EncodeTo(std::string* dst,
143
177
 
144
178
  // 0 is default and does not need to be explicitly written
145
179
  if (column_family_ != 0) {
146
- PutVarint32Varint32(dst, kColumnFamily, column_family_);
180
+ PutVarint32(dst, kColumnFamily, column_family_);
147
181
  }
148
182
 
149
183
  if (is_column_family_add_) {
@@ -304,6 +338,15 @@ void VersionEdit::EncodeToNewFile4(const FileMetaData& f, int level,
304
338
  char p = static_cast<char>(0);
305
339
  PutLengthPrefixedSlice(dst, Slice(&p, 1));
306
340
  }
341
+ // Encode min/max timestamp if they are non-empty
342
+ if (!f.min_timestamp.empty()) {
343
+ PutVarint32(dst, NewFileCustomTag::kMinTimestamp);
344
+ PutLengthPrefixedSlice(dst, Slice(f.min_timestamp));
345
+ }
346
+ if (!f.max_timestamp.empty()) {
347
+ PutVarint32(dst, NewFileCustomTag::kMaxTimestamp);
348
+ PutLengthPrefixedSlice(dst, Slice(f.max_timestamp));
349
+ }
307
350
  TEST_SYNC_POINT_CALLBACK("VersionEdit::EncodeTo:NewFile4:CustomizeFields",
308
351
  dst);
309
352
 
@@ -443,6 +486,12 @@ const char* VersionEdit::DecodeNewFile4From(Slice* input, int& max_level,
443
486
  }
444
487
  f.user_defined_timestamps_persisted = (field[0] == 1);
445
488
  break;
489
+ case kMinTimestamp:
490
+ f.min_timestamp = field.ToString();
491
+ break;
492
+ case kMaxTimestamp:
493
+ f.max_timestamp = field.ToString();
494
+ break;
446
495
  default:
447
496
  if ((custom_tag & kCustomTagNonSafeIgnoreMask) != 0) {
448
497
  // Should not proceed if cannot understand it
@@ -25,6 +25,7 @@
25
25
  #include "rocksdb/advanced_options.h"
26
26
  #include "table/table_reader.h"
27
27
  #include "table/unique_id_impl.h"
28
+ #include "test_util/sync_point.h"
28
29
  #include "util/autovector.h"
29
30
 
30
31
  namespace ROCKSDB_NAMESPACE {
@@ -133,14 +134,57 @@ constexpr uint64_t kReservedEpochNumberForFileIngestedBehind = 1;
133
134
 
134
135
  uint64_t PackFileNumberAndPathId(uint64_t number, uint64_t path_id);
135
136
 
137
+ // PinnedTableReader is used to safely access a table reader in a multi-threaded
138
+ // context. It holds both a pointer to the table reader and a cache handle.
139
+ class PinnedTableReader {
140
+ public:
141
+ PinnedTableReader() : reader_(nullptr), handle_(nullptr) {}
142
+ ~PinnedTableReader() = default;
143
+ PinnedTableReader(const PinnedTableReader& other)
144
+ : reader_(nullptr), handle_(nullptr) {
145
+ *this = other;
146
+ }
147
+ PinnedTableReader& operator=(const PinnedTableReader& other);
148
+ PinnedTableReader(PinnedTableReader&&) = delete;
149
+ PinnedTableReader& operator=(PinnedTableReader&&) = delete;
150
+
151
+ // Returns the pinned TableReader, or nullptr if not pinned.
152
+ TableReader* Get() const { return reader_.load(std::memory_order_acquire); }
153
+
154
+ // Returns the cache handle that keeps TableReader alive, or nullptr if not
155
+ // pinned.
156
+ Cache::Handle* GetCacheHandle() const;
157
+
158
+ // Pin a table reader with its cache handle.
159
+ void Pin(Cache::Handle* handle, TableReader* reader);
160
+
161
+ // Release the pinned handle via the given cache and reset state.
162
+ void Release(Cache* cache);
163
+
164
+ // Test-only: set a reader without a cache handle.
165
+ void TEST_SetReader(TableReader* reader) {
166
+ reader_.store(reader, std::memory_order_release);
167
+ }
168
+
169
+ private:
170
+ // Internally, we need to ensure reads and writes to reader_ and handle_ are
171
+ // properly ordered. handle_ must be written to before reader_ is written to
172
+ // with release semantics. handle_ must be read after reader_ is read with
173
+ // acquire semantics.
174
+ std::atomic<TableReader*> reader_;
175
+ Cache::Handle* handle_;
176
+ };
177
+
136
178
  // A copyable structure contains information needed to read data from an SST
137
179
  // file. It can contain a pointer to a table reader opened for the file, or
138
180
  // file number and size, which can be used to create a new table reader for it.
139
181
  // The behavior is undefined when a copied of the structure is used when the
140
182
  // file is not in any live version any more.
141
183
  struct FileDescriptor {
142
- // Table reader in table_reader_handle
143
- TableReader* table_reader;
184
+ // Fast access to table reader without cache lookup. Marked mutable because
185
+ // reads can pin the table reader, but can also be done safely in a
186
+ // multi-threaded context.
187
+ mutable PinnedTableReader pinned_reader;
144
188
  uint64_t packed_number_and_path_id;
145
189
  uint64_t file_size; // File size in bytes
146
190
  SequenceNumber smallest_seqno; // The smallest seqno in this file
@@ -153,7 +197,7 @@ struct FileDescriptor {
153
197
 
154
198
  FileDescriptor(uint64_t number, uint32_t path_id, uint64_t _file_size,
155
199
  SequenceNumber _smallest_seqno, SequenceNumber _largest_seqno)
156
- : table_reader(nullptr),
200
+ : pinned_reader(),
157
201
  packed_number_and_path_id(PackFileNumberAndPathId(number, path_id)),
158
202
  file_size(_file_size),
159
203
  smallest_seqno(_smallest_seqno),
@@ -162,7 +206,7 @@ struct FileDescriptor {
162
206
  FileDescriptor(const FileDescriptor& fd) { *this = fd; }
163
207
 
164
208
  FileDescriptor& operator=(const FileDescriptor& fd) {
165
- table_reader = fd.table_reader;
209
+ pinned_reader = fd.pinned_reader;
166
210
  packed_number_and_path_id = fd.packed_number_and_path_id;
167
211
  file_size = fd.file_size;
168
212
  smallest_seqno = fd.smallest_seqno;
@@ -181,15 +225,20 @@ struct FileDescriptor {
181
225
  };
182
226
 
183
227
  struct FileSampledStats {
184
- FileSampledStats() : num_reads_sampled(0) {}
228
+ FileSampledStats()
229
+ : num_reads_sampled(0), num_collapsible_entry_reads_sampled(0) {}
185
230
  FileSampledStats(const FileSampledStats& other) { *this = other; }
186
231
  FileSampledStats& operator=(const FileSampledStats& other) {
187
232
  num_reads_sampled = other.num_reads_sampled.load();
233
+ num_collapsible_entry_reads_sampled =
234
+ other.num_collapsible_entry_reads_sampled.load();
188
235
  return *this;
189
236
  }
190
237
 
191
238
  // number of user reads to this file.
192
239
  mutable std::atomic<uint64_t> num_reads_sampled;
240
+ // number of reads of type kNotFound, kMerge, kTypeSingleDeletion
241
+ mutable std::atomic<uint64_t> num_collapsible_entry_reads_sampled;
193
242
  };
194
243
 
195
244
  struct FileMetaData {
@@ -197,9 +246,6 @@ struct FileMetaData {
197
246
  InternalKey smallest; // Smallest internal key served by table
198
247
  InternalKey largest; // Largest internal key served by table
199
248
 
200
- // Needs to be disposed when refs becomes 0.
201
- Cache::Handle* table_reader_handle = nullptr;
202
-
203
249
  FileSampledStats stats;
204
250
 
205
251
  // Stats for compensating deletion entries during compaction
@@ -276,6 +322,14 @@ struct FileMetaData {
276
322
  // false, it's explicitly written to Manifest.
277
323
  bool user_defined_timestamps_persisted = true;
278
324
 
325
+ // Minimum user-defined timestamp in the file. Empty if no UDT or unknown.
326
+ // This is populated from the table properties "rocksdb.timestamp_min".
327
+ std::string min_timestamp;
328
+
329
+ // Maximum user-defined timestamp in the file. Empty if no UDT or unknown.
330
+ // This is populated from the table properties "rocksdb.timestamp_max".
331
+ std::string max_timestamp;
332
+
279
333
  FileMetaData() = default;
280
334
 
281
335
  FileMetaData(uint64_t file, uint32_t file_path_id, uint64_t file_size,
@@ -288,7 +342,9 @@ struct FileMetaData {
288
342
  const std::string& _file_checksum_func_name,
289
343
  UniqueId64x2 _unique_id,
290
344
  const uint64_t _compensated_range_deletion_size,
291
- uint64_t _tail_size, bool _user_defined_timestamps_persisted)
345
+ uint64_t _tail_size, bool _user_defined_timestamps_persisted,
346
+ const std::string& _min_timestamp,
347
+ const std::string& _max_timestamp)
292
348
  : fd(file, file_path_id, file_size, smallest_seq, largest_seq),
293
349
  smallest(smallest_key),
294
350
  largest(largest_key),
@@ -303,7 +359,9 @@ struct FileMetaData {
303
359
  file_checksum_func_name(_file_checksum_func_name),
304
360
  unique_id(std::move(_unique_id)),
305
361
  tail_size(_tail_size),
306
- user_defined_timestamps_persisted(_user_defined_timestamps_persisted) {
362
+ user_defined_timestamps_persisted(_user_defined_timestamps_persisted),
363
+ min_timestamp(_min_timestamp),
364
+ max_timestamp(_max_timestamp) {
307
365
  TEST_SYNC_POINT_CALLBACK("FileMetaData::FileMetaData", this);
308
366
  }
309
367
 
@@ -334,9 +392,10 @@ struct FileMetaData {
334
392
  uint64_t TryGetOldestAncesterTime() {
335
393
  if (oldest_ancester_time != kUnknownOldestAncesterTime) {
336
394
  return oldest_ancester_time;
337
- } else if (fd.table_reader != nullptr &&
338
- fd.table_reader->GetTableProperties() != nullptr) {
339
- return fd.table_reader->GetTableProperties()->creation_time;
395
+ }
396
+ TableReader* reader = fd.pinned_reader.Get();
397
+ if (reader != nullptr && reader->GetTableProperties() != nullptr) {
398
+ return reader->GetTableProperties()->creation_time;
340
399
  }
341
400
  return kUnknownOldestAncesterTime;
342
401
  }
@@ -344,9 +403,10 @@ struct FileMetaData {
344
403
  uint64_t TryGetFileCreationTime() {
345
404
  if (file_creation_time != kUnknownFileCreationTime) {
346
405
  return file_creation_time;
347
- } else if (fd.table_reader != nullptr &&
348
- fd.table_reader->GetTableProperties() != nullptr) {
349
- return fd.table_reader->GetTableProperties()->file_creation_time;
406
+ }
407
+ TableReader* reader = fd.pinned_reader.Get();
408
+ if (reader != nullptr && reader->GetTableProperties() != nullptr) {
409
+ return reader->GetTableProperties()->file_creation_time;
350
410
  }
351
411
  return kUnknownFileCreationTime;
352
412
  }
@@ -354,10 +414,9 @@ struct FileMetaData {
354
414
  // Tries to get the newest key time from the current file
355
415
  // Falls back on oldest ancestor time of previous (newer) file
356
416
  uint64_t TryGetNewestKeyTime(FileMetaData* prev_file = nullptr) {
357
- if (fd.table_reader != nullptr &&
358
- fd.table_reader->GetTableProperties() != nullptr) {
359
- uint64_t newest_key_time =
360
- fd.table_reader->GetTableProperties()->newest_key_time;
417
+ TableReader* reader = fd.pinned_reader.Get();
418
+ if (reader != nullptr && reader->GetTableProperties() != nullptr) {
419
+ uint64_t newest_key_time = reader->GetTableProperties()->newest_key_time;
361
420
  if (newest_key_time != kUnknownNewestKeyTime) {
362
421
  return newest_key_time;
363
422
  }
@@ -386,7 +445,8 @@ struct FileMetaData {
386
445
  usage += sizeof(*this);
387
446
  #endif // ROCKSDB_MALLOC_USABLE_SIZE
388
447
  usage += smallest.size() + largest.size() + file_checksum.size() +
389
- file_checksum_func_name.size();
448
+ file_checksum_func_name.size() + min_timestamp.size() +
449
+ max_timestamp.size();
390
450
  return usage;
391
451
  }
392
452
 
@@ -737,17 +797,19 @@ class VersionEdit {
737
797
  const std::string& file_checksum_func_name,
738
798
  const UniqueId64x2& unique_id,
739
799
  const uint64_t compensated_range_deletion_size,
740
- uint64_t tail_size, bool user_defined_timestamps_persisted) {
800
+ uint64_t tail_size, bool user_defined_timestamps_persisted,
801
+ const std::string& min_timestamp = "",
802
+ const std::string& max_timestamp = "") {
741
803
  assert(smallest_seqno <= largest_seqno);
742
804
  new_files_.emplace_back(
743
805
  level,
744
- FileMetaData(file, file_path_id, file_size, smallest, largest,
745
- smallest_seqno, largest_seqno, marked_for_compaction,
746
- temperature, oldest_blob_file_number, oldest_ancester_time,
747
- file_creation_time, epoch_number, file_checksum,
748
- file_checksum_func_name, unique_id,
749
- compensated_range_deletion_size, tail_size,
750
- user_defined_timestamps_persisted));
806
+ FileMetaData(
807
+ file, file_path_id, file_size, smallest, largest, smallest_seqno,
808
+ largest_seqno, marked_for_compaction, temperature,
809
+ oldest_blob_file_number, oldest_ancester_time, file_creation_time,
810
+ epoch_number, file_checksum, file_checksum_func_name, unique_id,
811
+ compensated_range_deletion_size, tail_size,
812
+ user_defined_timestamps_persisted, min_timestamp, max_timestamp));
751
813
  files_to_quarantine_.push_back(file);
752
814
  if (!HasLastSequence() || largest_seqno > GetLastSequence()) {
753
815
  SetLastSequence(largest_seqno);
@@ -146,13 +146,13 @@ class VersionEditHandler : public VersionEditHandlerBase {
146
146
  const std::shared_ptr<IOTracer>& io_tracer,
147
147
  const ReadOptions& read_options, bool allow_incomplete_valid_version,
148
148
  EpochNumberRequirement epoch_number_requirement =
149
- EpochNumberRequirement::kMustPresent)
150
- : VersionEditHandler(read_only, column_families, version_set,
151
- track_found_and_missing_files,
152
- no_error_if_files_missing, io_tracer, read_options,
153
- /*skip_load_table_files=*/false,
154
- allow_incomplete_valid_version,
155
- epoch_number_requirement) {}
149
+ EpochNumberRequirement::kMustPresent,
150
+ bool skip_load_table_files = false)
151
+ : VersionEditHandler(
152
+ read_only, column_families, version_set,
153
+ track_found_and_missing_files, no_error_if_files_missing, io_tracer,
154
+ read_options, skip_load_table_files, allow_incomplete_valid_version,
155
+ epoch_number_requirement) {}
156
156
 
157
157
  ~VersionEditHandler() override {}
158
158