@nxtedition/rocksdb 8.2.8 → 9.0.1

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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -26,15 +26,22 @@ PartitionedFilterBlockBuilder::PartitionedFilterBlockBuilder(
26
26
  FilterBitsBuilder* filter_bits_builder, int index_block_restart_interval,
27
27
  const bool use_value_delta_encoding,
28
28
  PartitionedIndexBuilder* const p_index_builder,
29
- const uint32_t partition_size)
29
+ const uint32_t partition_size, size_t ts_sz,
30
+ const bool persist_user_defined_timestamps)
30
31
  : FullFilterBlockBuilder(_prefix_extractor, whole_key_filtering,
31
32
  filter_bits_builder),
32
- index_on_filter_block_builder_(index_block_restart_interval,
33
- true /*use_delta_encoding*/,
34
- use_value_delta_encoding),
35
- index_on_filter_block_builder_without_seq_(index_block_restart_interval,
36
- true /*use_delta_encoding*/,
37
- use_value_delta_encoding),
33
+ index_on_filter_block_builder_(
34
+ index_block_restart_interval, true /*use_delta_encoding*/,
35
+ use_value_delta_encoding,
36
+ BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
37
+ 0.75 /* data_block_hash_table_util_ratio */, ts_sz,
38
+ persist_user_defined_timestamps, false /* is_user_key */),
39
+ index_on_filter_block_builder_without_seq_(
40
+ index_block_restart_interval, true /*use_delta_encoding*/,
41
+ use_value_delta_encoding,
42
+ BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
43
+ 0.75 /* data_block_hash_table_util_ratio */, ts_sz,
44
+ persist_user_defined_timestamps, true /* is_user_key */),
38
45
  p_index_builder_(p_index_builder),
39
46
  keys_added_to_partition_(0),
40
47
  total_added_in_built_(0) {
@@ -270,7 +277,8 @@ BlockHandle PartitionedFilterBlockReader::GetFilterPartitionHandle(
270
277
  table()->get_rep()->get_global_seqno(BlockType::kFilterPartitionIndex),
271
278
  &iter, kNullStats, true /* total_order_seek */,
272
279
  false /* have_first_key */, index_key_includes_seq(),
273
- index_value_is_full());
280
+ index_value_is_full(), false /* block_contents_pinned */,
281
+ user_defined_timestamps_persisted());
274
282
  iter.Seek(entry);
275
283
  if (UNLIKELY(!iter.Valid())) {
276
284
  // entry is larger than all the keys. However its prefix might still be
@@ -309,12 +317,12 @@ Status PartitionedFilterBlockReader::GetFilterPartitionBlock(
309
317
  read_options.read_tier = kBlockCacheTier;
310
318
  }
311
319
 
312
- const Status s =
313
- table()->RetrieveBlock(prefetch_buffer, read_options, fltr_blk_handle,
314
- UncompressionDict::GetEmptyDict(), filter_block,
315
- get_context, lookup_context,
316
- /* for_compaction */ false, /* use_cache */ true,
317
- /* async_read */ false);
320
+ const Status s = table()->RetrieveBlock(
321
+ prefetch_buffer, read_options, fltr_blk_handle,
322
+ UncompressionDict::GetEmptyDict(), filter_block, get_context,
323
+ lookup_context,
324
+ /* for_compaction */ false, /* use_cache */ true,
325
+ /* async_read */ false, /* use_block_cache_for_lookup */ true);
318
326
 
319
327
  return s;
320
328
  }
@@ -470,7 +478,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(
470
478
  comparator->user_comparator(),
471
479
  rep->get_global_seqno(BlockType::kFilterPartitionIndex), &biter,
472
480
  kNullStats, true /* total_order_seek */, false /* have_first_key */,
473
- index_key_includes_seq(), index_value_is_full());
481
+ index_key_includes_seq(), index_value_is_full(),
482
+ false /* block_contents_pinned */, user_defined_timestamps_persisted());
474
483
  // Index partitions are assumed to be consecuitive. Prefetch them all.
475
484
  // Read the first block offset
476
485
  biter.SeekToFirst();
@@ -488,14 +497,15 @@ Status PartitionedFilterBlockReader::CacheDependencies(
488
497
  tail_prefetch_buffer->GetPrefetchOffset() > prefetch_off) {
489
498
  rep->CreateFilePrefetchBuffer(
490
499
  0, 0, &prefetch_buffer, false /* Implicit autoreadahead */,
491
- 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/);
500
+ 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/,
501
+ /*upper_bound_offset*/ 0, /*readaheadsize_cb*/ nullptr,
502
+ /*usage=*/FilePrefetchBufferUsage::kUnknown);
492
503
 
493
504
  IOOptions opts;
494
505
  s = rep->file->PrepareIOOptions(ro, opts);
495
506
  if (s.ok()) {
496
507
  s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
497
- static_cast<size_t>(prefetch_len),
498
- ro.rate_limiter_priority);
508
+ static_cast<size_t>(prefetch_len));
499
509
  }
500
510
  if (!s.ok()) {
501
511
  return s;
@@ -512,7 +522,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(
512
522
  prefetch_buffer ? prefetch_buffer.get() : tail_prefetch_buffer, ro,
513
523
  handle, UncompressionDict::GetEmptyDict(),
514
524
  /* for_compaction */ false, &block, nullptr /* get_context */,
515
- &lookup_context, nullptr /* contents */, false);
525
+ &lookup_context, nullptr /* contents */, false,
526
+ /* use_block_cache_for_lookup */ true);
516
527
  if (!s.ok()) {
517
528
  return s;
518
529
  }
@@ -551,4 +562,10 @@ bool PartitionedFilterBlockReader::index_value_is_full() const {
551
562
  return table()->get_rep()->index_value_is_full;
552
563
  }
553
564
 
565
+ bool PartitionedFilterBlockReader::user_defined_timestamps_persisted() const {
566
+ assert(table());
567
+ assert(table()->get_rep());
568
+
569
+ return table()->get_rep()->user_defined_timestamps_persisted;
570
+ }
554
571
  } // namespace ROCKSDB_NAMESPACE
@@ -31,7 +31,8 @@ class PartitionedFilterBlockBuilder : public FullFilterBlockBuilder {
31
31
  FilterBitsBuilder* filter_bits_builder, int index_block_restart_interval,
32
32
  const bool use_value_delta_encoding,
33
33
  PartitionedIndexBuilder* const p_index_builder,
34
- const uint32_t partition_size);
34
+ const uint32_t partition_size, size_t ts_sz,
35
+ const bool persist_user_defined_timestamps);
35
36
 
36
37
  virtual ~PartitionedFilterBlockBuilder();
37
38
 
@@ -172,6 +173,7 @@ class PartitionedFilterBlockReader
172
173
  const InternalKeyComparator* internal_comparator() const;
173
174
  bool index_key_includes_seq() const;
174
175
  bool index_value_is_full() const;
176
+ bool user_defined_timestamps_persisted() const;
175
177
 
176
178
  protected:
177
179
  // For partition blocks pinned in cache. Can be a subset of blocks
@@ -57,7 +57,8 @@ class MyPartitionedFilterBlockReader : public PartitionedFilterBlockReader {
57
57
 
58
58
  class PartitionedFilterBlockTest
59
59
  : public testing::Test,
60
- virtual public ::testing::WithParamInterface<uint32_t> {
60
+ virtual public ::testing::WithParamInterface<
61
+ std::tuple<uint32_t, test::UserDefinedTimestampTestMode>> {
61
62
  public:
62
63
  Options options_;
63
64
  ImmutableOptions ioptions_;
@@ -67,38 +68,64 @@ class PartitionedFilterBlockTest
67
68
  std::unique_ptr<BlockBasedTable> table_;
68
69
  std::shared_ptr<Cache> cache_;
69
70
  int bits_per_key_;
71
+ size_t ts_sz_;
72
+ bool user_defined_timestamps_persisted_;
70
73
 
71
- PartitionedFilterBlockTest()
72
- : ioptions_(options_),
73
- env_options_(options_),
74
- icomp_(options_.comparator),
75
- bits_per_key_(10) {
74
+ PartitionedFilterBlockTest() : bits_per_key_(10) {
75
+ auto udt_test_mode = std::get<1>(GetParam());
76
+ if (test::IsUDTEnabled(udt_test_mode)) {
77
+ options_.comparator = test::BytewiseComparatorWithU64TsWrapper();
78
+ }
79
+ ts_sz_ = options_.comparator->timestamp_size();
80
+ user_defined_timestamps_persisted_ = test::ShouldPersistUDT(udt_test_mode);
81
+ icomp_ = InternalKeyComparator(options_.comparator);
82
+ env_options_ = EnvOptions(options_);
83
+ ioptions_ = ImmutableOptions(options_);
76
84
  table_options_.filter_policy.reset(
77
85
  NewBloomFilterPolicy(bits_per_key_, false));
78
- table_options_.format_version = GetParam();
86
+ table_options_.format_version = std::get<0>(GetParam());
79
87
  table_options_.index_block_restart_interval = 3;
80
88
  }
81
89
 
82
90
  ~PartitionedFilterBlockTest() override {}
83
91
 
84
- const std::string keys[4] = {"afoo", "bar", "box", "hello"};
85
- const std::string missing_keys[2] = {"missing", "other"};
92
+ static constexpr int kKeyNum = 4;
93
+ static constexpr int kMissingKeyNum = 2;
94
+ const std::string keys_without_ts[kKeyNum] = {"afoo", "bar", "box", "hello"};
95
+ const std::string missing_keys_without_ts[kMissingKeyNum] = {"missing",
96
+ "other"};
97
+
98
+ std::vector<std::string> PrepareKeys(const std::string* orig_keys,
99
+ int number_of_keys) {
100
+ std::vector<std::string> user_keys;
101
+ if (ts_sz_ == 0) {
102
+ user_keys.assign(orig_keys, orig_keys + number_of_keys);
103
+ } else {
104
+ for (int i = 0; i < number_of_keys; i++) {
105
+ std::string key_with_ts;
106
+ AppendKeyWithMinTimestamp(&key_with_ts, orig_keys[i], ts_sz_);
107
+ user_keys.push_back(std::move(key_with_ts));
108
+ }
109
+ }
110
+ return user_keys;
111
+ }
86
112
 
87
113
  uint64_t MaxIndexSize() {
88
- int num_keys = sizeof(keys) / sizeof(*keys);
89
114
  uint64_t max_key_size = 0;
90
- for (int i = 1; i < num_keys; i++) {
91
- max_key_size =
92
- std::max(max_key_size, static_cast<uint64_t>(keys[i].size()));
115
+ for (int i = 0; i < kKeyNum; i++) {
116
+ // If UDT is enabled, the size of each key would be increased by a
117
+ // timestamp size.
118
+ max_key_size = std::max(
119
+ max_key_size, static_cast<uint64_t>(keys_without_ts[i].size()) +
120
+ ts_sz_ * sizeof(static_cast<unsigned char>(0)));
93
121
  }
94
- uint64_t max_index_size = num_keys * (max_key_size + 8 /*handle*/);
122
+ uint64_t max_index_size = kKeyNum * (max_key_size + 8 /*handle*/);
95
123
  return max_index_size;
96
124
  }
97
125
 
98
126
  uint64_t MaxFilterSize() {
99
- int num_keys = sizeof(keys) / sizeof(*keys);
100
127
  // General, rough over-approximation
101
- return num_keys * bits_per_key_ + (CACHE_LINE_SIZE * 8 + /*metadata*/ 5);
128
+ return kKeyNum * bits_per_key_ + (CACHE_LINE_SIZE * 8 + /*metadata*/ 5);
102
129
  }
103
130
 
104
131
  uint64_t last_offset = 10;
@@ -112,7 +139,8 @@ class PartitionedFilterBlockTest
112
139
  PartitionedIndexBuilder* NewIndexBuilder() {
113
140
  const bool kValueDeltaEncoded = true;
114
141
  return PartitionedIndexBuilder::CreateIndexBuilder(
115
- &icomp_, !kValueDeltaEncoded, table_options_);
142
+ &icomp_, !kValueDeltaEncoded, table_options_, ts_sz_,
143
+ user_defined_timestamps_persisted_);
116
144
  }
117
145
 
118
146
  PartitionedFilterBlockBuilder* NewBuilder(
@@ -131,7 +159,8 @@ class PartitionedFilterBlockTest
131
159
  BloomFilterPolicy::GetBuilderFromContext(
132
160
  FilterBuildingContext(table_options_)),
133
161
  table_options_.index_block_restart_interval, !kValueDeltaEncoded,
134
- p_index_builder, partition_size);
162
+ p_index_builder, partition_size, ts_sz_,
163
+ user_defined_timestamps_persisted_);
135
164
  }
136
165
 
137
166
  PartitionedFilterBlockReader* NewReader(
@@ -152,7 +181,8 @@ class PartitionedFilterBlockTest
152
181
  table_.reset(new MockedBlockBasedTable(
153
182
  new BlockBasedTable::Rep(ioptions_, env_options_, table_options_,
154
183
  icomp_, skip_filters, file_size, level,
155
- immortal_table),
184
+ immortal_table,
185
+ user_defined_timestamps_persisted_),
156
186
  pib));
157
187
  BlockContents contents(slice);
158
188
  CachableEntry<Block> block(
@@ -169,38 +199,41 @@ class PartitionedFilterBlockTest
169
199
  NewReader(builder, pib));
170
200
  // Querying added keys
171
201
  const bool no_io = true;
202
+ std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
172
203
  for (auto key : keys) {
173
204
  auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
174
205
  const Slice ikey_slice = Slice(*ikey.rep());
175
- ASSERT_TRUE(reader->KeyMayMatch(key, !no_io, &ikey_slice,
176
- /*get_context=*/nullptr,
177
- /*lookup_context=*/nullptr,
178
- ReadOptions()));
206
+ ASSERT_TRUE(reader->KeyMayMatch(
207
+ StripTimestampFromUserKey(key, ts_sz_), !no_io, &ikey_slice,
208
+ /*get_context=*/nullptr,
209
+ /*lookup_context=*/nullptr, ReadOptions()));
179
210
  }
180
211
  {
181
212
  // querying a key twice
182
213
  auto ikey = InternalKey(keys[0], 0, ValueType::kTypeValue);
183
214
  const Slice ikey_slice = Slice(*ikey.rep());
184
- ASSERT_TRUE(reader->KeyMayMatch(keys[0], !no_io, &ikey_slice,
185
- /*get_context=*/nullptr,
186
- /*lookup_context=*/nullptr,
187
- ReadOptions()));
215
+ ASSERT_TRUE(reader->KeyMayMatch(
216
+ StripTimestampFromUserKey(keys[0], ts_sz_), !no_io, &ikey_slice,
217
+ /*get_context=*/nullptr,
218
+ /*lookup_context=*/nullptr, ReadOptions()));
188
219
  }
189
220
  // querying missing keys
221
+ std::vector<std::string> missing_keys =
222
+ PrepareKeys(missing_keys_without_ts, kMissingKeyNum);
190
223
  for (auto key : missing_keys) {
191
224
  auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
192
225
  const Slice ikey_slice = Slice(*ikey.rep());
193
226
  if (empty) {
194
- ASSERT_TRUE(reader->KeyMayMatch(key, !no_io, &ikey_slice,
195
- /*get_context=*/nullptr,
196
- /*lookup_context=*/nullptr,
197
- ReadOptions()));
227
+ ASSERT_TRUE(reader->KeyMayMatch(
228
+ StripTimestampFromUserKey(key, ts_sz_), !no_io, &ikey_slice,
229
+ /*get_context=*/nullptr,
230
+ /*lookup_context=*/nullptr, ReadOptions()));
198
231
  } else {
199
232
  // assuming a good hash function
200
- ASSERT_FALSE(reader->KeyMayMatch(key, !no_io, &ikey_slice,
201
- /*get_context=*/nullptr,
202
- /*lookup_context=*/nullptr,
203
- ReadOptions()));
233
+ ASSERT_FALSE(reader->KeyMayMatch(
234
+ StripTimestampFromUserKey(key, ts_sz_), !no_io, &ikey_slice,
235
+ /*get_context=*/nullptr,
236
+ /*lookup_context=*/nullptr, ReadOptions()));
204
237
  }
205
238
  }
206
239
  }
@@ -210,17 +243,18 @@ class PartitionedFilterBlockTest
210
243
  std::unique_ptr<PartitionedFilterBlockBuilder> builder(
211
244
  NewBuilder(pib.get()));
212
245
  int i = 0;
213
- builder->Add(keys[i]);
246
+ std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
247
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
214
248
  CutABlock(pib.get(), keys[i], keys[i + 1]);
215
249
  i++;
216
- builder->Add(keys[i]);
250
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
217
251
  CutABlock(pib.get(), keys[i], keys[i + 1]);
218
252
  i++;
219
- builder->Add(keys[i]);
220
- builder->Add(keys[i]);
253
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
254
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
221
255
  CutABlock(pib.get(), keys[i], keys[i + 1]);
222
256
  i++;
223
- builder->Add(keys[i]);
257
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
224
258
  CutABlock(pib.get(), keys[i]);
225
259
 
226
260
  VerifyReader(builder.get(), pib.get());
@@ -231,16 +265,17 @@ class PartitionedFilterBlockTest
231
265
  std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
232
266
  std::unique_ptr<PartitionedFilterBlockBuilder> builder(
233
267
  NewBuilder(pib.get(), prefix_extractor));
268
+ std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
234
269
  int i = 0;
235
- builder->Add(keys[i]);
270
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
236
271
  i++;
237
- builder->Add(keys[i]);
272
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
238
273
  CutABlock(pib.get(), keys[i], keys[i + 1]);
239
274
  i++;
240
- builder->Add(keys[i]);
241
- builder->Add(keys[i]);
275
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
276
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
242
277
  i++;
243
- builder->Add(keys[i]);
278
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
244
279
  CutABlock(pib.get(), keys[i]);
245
280
 
246
281
  VerifyReader(builder.get(), pib.get(), prefix_extractor);
@@ -250,15 +285,16 @@ class PartitionedFilterBlockTest
250
285
  std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
251
286
  std::unique_ptr<PartitionedFilterBlockBuilder> builder(
252
287
  NewBuilder(pib.get()));
288
+ std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
253
289
  int i = 0;
254
- builder->Add(keys[i]);
290
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
255
291
  i++;
256
- builder->Add(keys[i]);
292
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
257
293
  i++;
258
- builder->Add(keys[i]);
259
- builder->Add(keys[i]);
294
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
295
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
260
296
  i++;
261
- builder->Add(keys[i]);
297
+ builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
262
298
  CutABlock(pib.get(), keys[i]);
263
299
 
264
300
  VerifyReader(builder.get(), pib.get());
@@ -299,10 +335,12 @@ class PartitionedFilterBlockTest
299
335
  };
300
336
 
301
337
  // Format versions potentially intersting to partitioning
302
- INSTANTIATE_TEST_CASE_P(FormatVersions, PartitionedFilterBlockTest,
303
- testing::ValuesIn(std::set<uint32_t>{
304
- 2, 3, 4, test::kDefaultFormatVersion,
305
- kLatestFormatVersion}));
338
+ INSTANTIATE_TEST_CASE_P(
339
+ FormatVersions, PartitionedFilterBlockTest,
340
+ testing::Combine(testing::ValuesIn(std::set<uint32_t>{
341
+ 2, 3, 4, test::kDefaultFormatVersion,
342
+ kLatestFormatVersion}),
343
+ testing::ValuesIn(test::GetUDTTestModes())));
306
344
 
307
345
  TEST_P(PartitionedFilterBlockTest, EmptyBuilder) {
308
346
  std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
@@ -337,12 +375,14 @@ TEST_P(PartitionedFilterBlockTest, SamePrefixInMultipleBlocks) {
337
375
  std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
338
376
  std::unique_ptr<PartitionedFilterBlockBuilder> builder(
339
377
  NewBuilder(pib.get(), prefix_extractor.get()));
340
- const std::string pkeys[3] = {"p-key10", "p-key20", "p-key30"};
341
- builder->Add(pkeys[0]);
378
+ const std::string pkeys_without_ts[3] = {"p-key10", "p-key20", "p-key30"};
379
+ std::vector<std::string> pkeys =
380
+ PrepareKeys(pkeys_without_ts, 3 /* number_of_keys */);
381
+ builder->Add(StripTimestampFromUserKey(pkeys[0], ts_sz_));
342
382
  CutABlock(pib.get(), pkeys[0], pkeys[1]);
343
- builder->Add(pkeys[1]);
383
+ builder->Add(StripTimestampFromUserKey(pkeys[1], ts_sz_));
344
384
  CutABlock(pib.get(), pkeys[1], pkeys[2]);
345
- builder->Add(pkeys[2]);
385
+ builder->Add(StripTimestampFromUserKey(pkeys[2], ts_sz_));
346
386
  CutABlock(pib.get(), pkeys[2]);
347
387
  std::unique_ptr<PartitionedFilterBlockReader> reader(
348
388
  NewReader(builder.get(), pib.get()));
@@ -356,7 +396,10 @@ TEST_P(PartitionedFilterBlockTest, SamePrefixInMultipleBlocks) {
356
396
  ReadOptions()));
357
397
  }
358
398
  // Non-existent keys but with the same prefix
359
- const std::string pnonkeys[4] = {"p-key9", "p-key11", "p-key21", "p-key31"};
399
+ const std::string pnonkeys_without_ts[4] = {"p-key9", "p-key11", "p-key21",
400
+ "p-key31"};
401
+ std::vector<std::string> pnonkeys =
402
+ PrepareKeys(pnonkeys_without_ts, 4 /* number_of_keys */);
360
403
  for (auto key : pnonkeys) {
361
404
  auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
362
405
  const Slice ikey_slice = Slice(*ikey.rep());
@@ -381,23 +424,25 @@ TEST_P(PartitionedFilterBlockTest, PrefixInWrongPartitionBug) {
381
424
  // In the bug, searching for prefix "p3" on an index with format version 3,
382
425
  // will give the key "p3" and the partition of the keys that are <= p3, i.e.,
383
426
  // p2-keys, where the filter for prefix "p3" does not exist.
384
- const std::string pkeys[] = {"p1-key1", "p2-key2", "p3-key3", "p4-key3",
385
- "p5-key3"};
386
- builder->Add(pkeys[0]);
427
+ const std::string pkeys_without_ts[] = {"p1-key1", "p2-key2", "p3-key3",
428
+ "p4-key3", "p5-key3"};
429
+ std::vector<std::string> pkeys =
430
+ PrepareKeys(pkeys_without_ts, 5 /* number_of_keys */);
431
+ builder->Add(StripTimestampFromUserKey(pkeys[0], ts_sz_));
387
432
  CutABlock(pib.get(), pkeys[0], pkeys[1]);
388
- builder->Add(pkeys[1]);
433
+ builder->Add(StripTimestampFromUserKey(pkeys[1], ts_sz_));
389
434
  CutABlock(pib.get(), pkeys[1], pkeys[2]);
390
- builder->Add(pkeys[2]);
435
+ builder->Add(StripTimestampFromUserKey(pkeys[2], ts_sz_));
391
436
  CutABlock(pib.get(), pkeys[2], pkeys[3]);
392
- builder->Add(pkeys[3]);
437
+ builder->Add(StripTimestampFromUserKey(pkeys[3], ts_sz_));
393
438
  CutABlock(pib.get(), pkeys[3], pkeys[4]);
394
- builder->Add(pkeys[4]);
439
+ builder->Add(StripTimestampFromUserKey(pkeys[4], ts_sz_));
395
440
  CutABlock(pib.get(), pkeys[4]);
396
441
  std::unique_ptr<PartitionedFilterBlockReader> reader(
397
442
  NewReader(builder.get(), pib.get()));
398
443
  for (auto key : pkeys) {
399
444
  auto prefix = prefix_extractor->Transform(key);
400
- auto ikey = InternalKey(prefix, 0, ValueType::kTypeValue);
445
+ auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
401
446
  const Slice ikey_slice = Slice(*ikey.rep());
402
447
  ASSERT_TRUE(reader->PrefixMayMatch(prefix,
403
448
  /*no_io=*/false, &ikey_slice,
@@ -416,7 +461,6 @@ TEST_P(PartitionedFilterBlockTest, OneBlockPerKey) {
416
461
  }
417
462
 
418
463
  TEST_P(PartitionedFilterBlockTest, PartitionCount) {
419
- int num_keys = sizeof(keys) / sizeof(*keys);
420
464
  table_options_.metadata_block_size =
421
465
  std::max(MaxIndexSize(), MaxFilterSize());
422
466
  int partitions = TestBlockPerKey();
@@ -424,7 +468,7 @@ TEST_P(PartitionedFilterBlockTest, PartitionCount) {
424
468
  // A low number ensures cutting a block after each key
425
469
  table_options_.metadata_block_size = 1;
426
470
  partitions = TestBlockPerKey();
427
- ASSERT_EQ(partitions, num_keys - 1 /* last two keys make one flush */);
471
+ ASSERT_EQ(partitions, kKeyNum - 1 /* last two keys make one flush */);
428
472
  }
429
473
 
430
474
  } // namespace ROCKSDB_NAMESPACE
@@ -433,4 +477,4 @@ int main(int argc, char** argv) {
433
477
  ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
434
478
  ::testing::InitGoogleTest(&argc, argv);
435
479
  return RUN_ALL_TESTS();
436
- }
480
+ }
@@ -91,15 +91,16 @@ void PartitionedIndexIterator::InitPartitionedIndexBlock() {
91
91
  // Enabled from the very first IO when ReadOptions.readahead_size is set.
92
92
  block_prefetcher_.PrefetchIfNeeded(
93
93
  rep, partitioned_index_handle, read_options_.readahead_size,
94
- is_for_compaction, /*no_sequential_checking=*/false,
95
- read_options_.rate_limiter_priority);
94
+ is_for_compaction, /*no_sequential_checking=*/false, read_options_,
95
+ /*readaheadsize_cb=*/nullptr);
96
96
  Status s;
97
97
  table_->NewDataBlockIterator<IndexBlockIter>(
98
98
  read_options_, partitioned_index_handle, &block_iter_,
99
99
  BlockType::kIndex,
100
100
  /*get_context=*/nullptr, &lookup_context_,
101
101
  block_prefetcher_.prefetch_buffer(),
102
- /*for_compaction=*/is_for_compaction, /*async_read=*/false, s);
102
+ /*for_compaction=*/is_for_compaction, /*async_read=*/false, s,
103
+ /*use_block_cache_for_lookup=*/true);
103
104
  block_iter_points_to_real_block_ = true;
104
105
  // We could check upper bound here but it is complicated to reason about
105
106
  // upper bound in index iterator. On the other than, in large scans, index
@@ -75,7 +75,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
75
75
  internal_comparator()->user_comparator(),
76
76
  rep->get_global_seqno(BlockType::kIndex), nullptr, kNullStats, true,
77
77
  index_has_first_key(), index_key_includes_seq(),
78
- index_value_is_full()));
78
+ index_value_is_full(), false /* block_contents_pinned */,
79
+ user_defined_timestamps_persisted()));
79
80
  } else {
80
81
  ReadOptions ro;
81
82
  ro.fill_cache = read_options.fill_cache;
@@ -94,7 +95,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
94
95
  internal_comparator()->user_comparator(),
95
96
  rep->get_global_seqno(BlockType::kIndex), nullptr, kNullStats, true,
96
97
  index_has_first_key(), index_key_includes_seq(),
97
- index_value_is_full()));
98
+ index_value_is_full(), false /* block_contents_pinned */,
99
+ user_defined_timestamps_persisted()));
98
100
 
99
101
  it = new PartitionedIndexIterator(
100
102
  table(), ro, *internal_comparator(), std::move(index_iter),
@@ -140,7 +142,8 @@ Status PartitionIndexReader::CacheDependencies(
140
142
  index_block.GetValue()->NewIndexIterator(
141
143
  internal_comparator()->user_comparator(),
142
144
  rep->get_global_seqno(BlockType::kIndex), &biter, kNullStats, true,
143
- index_has_first_key(), index_key_includes_seq(), index_value_is_full());
145
+ index_has_first_key(), index_key_includes_seq(), index_value_is_full(),
146
+ false /* block_contents_pinned */, user_defined_timestamps_persisted());
144
147
  // Index partitions are assumed to be consecuitive. Prefetch them all.
145
148
  // Read the first block offset
146
149
  biter.SeekToFirst();
@@ -166,14 +169,15 @@ Status PartitionIndexReader::CacheDependencies(
166
169
  tail_prefetch_buffer->GetPrefetchOffset() > prefetch_off) {
167
170
  rep->CreateFilePrefetchBuffer(
168
171
  0, 0, &prefetch_buffer, false /*Implicit auto readahead*/,
169
- 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/);
172
+ 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/,
173
+ /*upper_bound_offset*/ 0, /*readaheadsize_cb*/ nullptr,
174
+ /*usage=*/FilePrefetchBufferUsage::kUnknown);
170
175
  IOOptions opts;
171
176
  {
172
177
  Status s = rep->file->PrepareIOOptions(ro, opts);
173
178
  if (s.ok()) {
174
179
  s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
175
- static_cast<size_t>(prefetch_len),
176
- ro.rate_limiter_priority);
180
+ static_cast<size_t>(prefetch_len));
177
181
  }
178
182
  if (!s.ok()) {
179
183
  return s;
@@ -197,7 +201,7 @@ Status PartitionIndexReader::CacheDependencies(
197
201
  handle, UncompressionDict::GetEmptyDict(),
198
202
  /*for_compaction=*/false, &block.As<Block_kIndex>(),
199
203
  /*get_context=*/nullptr, &lookup_context, /*contents=*/nullptr,
200
- /*async_read=*/false);
204
+ /*async_read=*/false, /*use_block_cache_for_lookup=*/true);
201
205
 
202
206
  if (!s.ok()) {
203
207
  return s;
@@ -23,10 +23,14 @@ void ForceReleaseCachedEntry(void* arg, void* h) {
23
23
  }
24
24
 
25
25
  // WART: this is specific to block-based table
26
- Status VerifyBlockChecksum(ChecksumType type, const char* data,
26
+ Status VerifyBlockChecksum(const Footer& footer, const char* data,
27
27
  size_t block_size, const std::string& file_name,
28
28
  uint64_t offset) {
29
29
  PERF_TIMER_GUARD(block_checksum_time);
30
+
31
+ assert(footer.GetBlockTrailerSize() == 5);
32
+ ChecksumType type = footer.checksum_type();
33
+
30
34
  // After block_size bytes is compression type (1 byte), which is part of
31
35
  // the checksummed section.
32
36
  size_t len = block_size + 1;
@@ -34,6 +38,13 @@ Status VerifyBlockChecksum(ChecksumType type, const char* data,
34
38
  uint32_t stored = DecodeFixed32(data + len);
35
39
 
36
40
  uint32_t computed = ComputeBuiltinChecksum(type, data, len);
41
+
42
+ // Unapply context to 'stored' rather than apply to 'computed, for people
43
+ // who might look for reference crc value in error message
44
+ uint32_t modifier =
45
+ ChecksumModifierForContext(footer.base_context_checksum(), offset);
46
+ stored -= modifier;
47
+
37
48
  if (stored == computed) {
38
49
  return Status::OK();
39
50
  } else {
@@ -43,8 +54,9 @@ Status VerifyBlockChecksum(ChecksumType type, const char* data,
43
54
  computed = crc32c::Unmask(computed);
44
55
  }
45
56
  return Status::Corruption(
46
- "block checksum mismatch: stored = " + std::to_string(stored) +
47
- ", computed = " + std::to_string(computed) +
57
+ "block checksum mismatch: stored" +
58
+ std::string(modifier ? "(context removed)" : "") + " = " +
59
+ std::to_string(stored) + ", computed = " + std::to_string(computed) +
48
60
  ", type = " + std::to_string(type) + " in " + file_name + " offset " +
49
61
  std::to_string(offset) + " size " + std::to_string(block_size));
50
62
  }
@@ -12,6 +12,8 @@
12
12
  #include "rocksdb/table.h"
13
13
 
14
14
  namespace ROCKSDB_NAMESPACE {
15
+ class Footer;
16
+
15
17
  // Release the cached entry and decrement its ref count.
16
18
  extern void ForceReleaseCachedEntry(void* arg, void* h);
17
19
 
@@ -22,12 +24,13 @@ inline MemoryAllocator* GetMemoryAllocator(
22
24
  : nullptr;
23
25
  }
24
26
 
25
- // Assumes block has a trailer as in format.h. file_name and offset provided
26
- // for generating a diagnostic message in returned status.
27
+ // Assumes block has a trailer past `data + block_size` as in format.h.
28
+ // `file_name` provided for generating diagnostic message in returned status.
29
+ // `offset` might be required for proper verification (also used for message).
27
30
  //
28
31
  // Returns Status::OK() on checksum match, or Status::Corruption() on checksum
29
32
  // mismatch.
30
- extern Status VerifyBlockChecksum(ChecksumType type, const char* data,
33
+ extern Status VerifyBlockChecksum(const Footer& footer, const char* data,
31
34
  size_t block_size,
32
35
  const std::string& file_name,
33
36
  uint64_t offset);
@@ -63,7 +63,7 @@ Status UncompressionDictReader::ReadUncompressionDictionary(
63
63
  UncompressionDict::GetEmptyDict(), uncompression_dict, get_context,
64
64
  lookup_context,
65
65
  /* for_compaction */ false, use_cache,
66
- /* async_read */ false);
66
+ /* async_read */ false, /* use_block_cache_for_lookup */ true);
67
67
 
68
68
  if (!s.ok()) {
69
69
  ROCKS_LOG_WARN(