@nxtedition/rocksdb 8.2.7 → 9.0.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 (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -29,14 +29,16 @@ IndexBuilder* IndexBuilder::CreateIndexBuilder(
29
29
  const InternalKeyComparator* comparator,
30
30
  const InternalKeySliceTransform* int_key_slice_transform,
31
31
  const bool use_value_delta_encoding,
32
- const BlockBasedTableOptions& table_opt) {
32
+ const BlockBasedTableOptions& table_opt, size_t ts_sz,
33
+ const bool persist_user_defined_timestamps) {
33
34
  IndexBuilder* result = nullptr;
34
35
  switch (index_type) {
35
36
  case BlockBasedTableOptions::kBinarySearch: {
36
37
  result = new ShortenedIndexBuilder(
37
38
  comparator, table_opt.index_block_restart_interval,
38
39
  table_opt.format_version, use_value_delta_encoding,
39
- table_opt.index_shortening, /* include_first_key */ false);
40
+ table_opt.index_shortening, /* include_first_key */ false, ts_sz,
41
+ persist_user_defined_timestamps);
40
42
  break;
41
43
  }
42
44
  case BlockBasedTableOptions::kHashSearch: {
@@ -46,19 +48,22 @@ IndexBuilder* IndexBuilder::CreateIndexBuilder(
46
48
  result = new HashIndexBuilder(
47
49
  comparator, int_key_slice_transform,
48
50
  table_opt.index_block_restart_interval, table_opt.format_version,
49
- use_value_delta_encoding, table_opt.index_shortening);
51
+ use_value_delta_encoding, table_opt.index_shortening, ts_sz,
52
+ persist_user_defined_timestamps);
50
53
  break;
51
54
  }
52
55
  case BlockBasedTableOptions::kTwoLevelIndexSearch: {
53
56
  result = PartitionedIndexBuilder::CreateIndexBuilder(
54
- comparator, use_value_delta_encoding, table_opt);
57
+ comparator, use_value_delta_encoding, table_opt, ts_sz,
58
+ persist_user_defined_timestamps);
55
59
  break;
56
60
  }
57
61
  case BlockBasedTableOptions::kBinarySearchWithFirstKey: {
58
62
  result = new ShortenedIndexBuilder(
59
63
  comparator, table_opt.index_block_restart_interval,
60
64
  table_opt.format_version, use_value_delta_encoding,
61
- table_opt.index_shortening, /* include_first_key */ true);
65
+ table_opt.index_shortening, /* include_first_key */ true, ts_sz,
66
+ persist_user_defined_timestamps);
62
67
  break;
63
68
  }
64
69
  default: {
@@ -106,22 +111,31 @@ void ShortenedIndexBuilder::FindShortInternalKeySuccessor(
106
111
  PartitionedIndexBuilder* PartitionedIndexBuilder::CreateIndexBuilder(
107
112
  const InternalKeyComparator* comparator,
108
113
  const bool use_value_delta_encoding,
109
- const BlockBasedTableOptions& table_opt) {
114
+ const BlockBasedTableOptions& table_opt, size_t ts_sz,
115
+ const bool persist_user_defined_timestamps) {
110
116
  return new PartitionedIndexBuilder(comparator, table_opt,
111
- use_value_delta_encoding);
117
+ use_value_delta_encoding, ts_sz,
118
+ persist_user_defined_timestamps);
112
119
  }
113
120
 
114
121
  PartitionedIndexBuilder::PartitionedIndexBuilder(
115
122
  const InternalKeyComparator* comparator,
116
123
  const BlockBasedTableOptions& table_opt,
117
- const bool use_value_delta_encoding)
118
- : IndexBuilder(comparator),
119
- index_block_builder_(table_opt.index_block_restart_interval,
120
- true /*use_delta_encoding*/,
121
- use_value_delta_encoding),
122
- index_block_builder_without_seq_(table_opt.index_block_restart_interval,
123
- true /*use_delta_encoding*/,
124
- use_value_delta_encoding),
124
+ const bool use_value_delta_encoding, size_t ts_sz,
125
+ const bool persist_user_defined_timestamps)
126
+ : IndexBuilder(comparator, ts_sz, persist_user_defined_timestamps),
127
+ index_block_builder_(
128
+ table_opt.index_block_restart_interval, true /*use_delta_encoding*/,
129
+ use_value_delta_encoding,
130
+ BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
131
+ 0.75 /* data_block_hash_table_util_ratio */, ts_sz,
132
+ persist_user_defined_timestamps, false /* is_user_key */),
133
+ index_block_builder_without_seq_(
134
+ table_opt.index_block_restart_interval, true /*use_delta_encoding*/,
135
+ use_value_delta_encoding,
136
+ BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
137
+ 0.75 /* data_block_hash_table_util_ratio */, ts_sz,
138
+ persist_user_defined_timestamps, true /* is_user_key */),
125
139
  sub_index_builder_(nullptr),
126
140
  table_opt_(table_opt),
127
141
  // We start by false. After each partition we revise the value based on
@@ -142,7 +156,8 @@ void PartitionedIndexBuilder::MakeNewSubIndexBuilder() {
142
156
  sub_index_builder_ = new ShortenedIndexBuilder(
143
157
  comparator_, table_opt_.index_block_restart_interval,
144
158
  table_opt_.format_version, use_value_delta_encoding_,
145
- table_opt_.index_shortening, /* include_first_key */ false);
159
+ table_opt_.index_shortening, /* include_first_key */ false, ts_sz_,
160
+ persist_user_defined_timestamps_);
146
161
 
147
162
  // Set sub_index_builder_->seperator_is_key_plus_seq_ to true if
148
163
  // seperator_is_key_plus_seq_ is true (internal-key mode) (set to false by
@@ -9,13 +9,12 @@
9
9
 
10
10
  #pragma once
11
11
 
12
- #include <assert.h>
13
-
14
12
  #include <cinttypes>
15
13
  #include <list>
16
14
  #include <string>
17
15
  #include <unordered_map>
18
16
 
17
+ #include "db/dbformat.h"
19
18
  #include "rocksdb/comparator.h"
20
19
  #include "table/block_based/block_based_table_factory.h"
21
20
  #include "table/block_based/block_builder.h"
@@ -38,8 +37,8 @@ class IndexBuilder {
38
37
  BlockBasedTableOptions::IndexType index_type,
39
38
  const ROCKSDB_NAMESPACE::InternalKeyComparator* comparator,
40
39
  const InternalKeySliceTransform* int_key_slice_transform,
41
- const bool use_value_delta_encoding,
42
- const BlockBasedTableOptions& table_opt);
40
+ bool use_value_delta_encoding, const BlockBasedTableOptions& table_opt,
41
+ size_t ts_sz, bool persist_user_defined_timestamps);
43
42
 
44
43
  // Index builder will construct a set of blocks which contain:
45
44
  // 1. One primary index block.
@@ -49,10 +48,13 @@ class IndexBuilder {
49
48
  Slice index_block_contents;
50
49
  std::unordered_map<std::string, Slice> meta_blocks;
51
50
  };
52
- explicit IndexBuilder(const InternalKeyComparator* comparator)
53
- : comparator_(comparator) {}
51
+ IndexBuilder(const InternalKeyComparator* comparator, size_t ts_sz,
52
+ bool persist_user_defined_timestamps)
53
+ : comparator_(comparator),
54
+ ts_sz_(ts_sz),
55
+ persist_user_defined_timestamps_(persist_user_defined_timestamps) {}
54
56
 
55
- virtual ~IndexBuilder() {}
57
+ virtual ~IndexBuilder() = default;
56
58
 
57
59
  // Add a new index entry to index block.
58
60
  // To allow further optimization, we provide `last_key_in_current_block` and
@@ -105,6 +107,13 @@ class IndexBuilder {
105
107
 
106
108
  protected:
107
109
  const InternalKeyComparator* comparator_;
110
+ // Size of user-defined timestamp in bytes.
111
+ size_t ts_sz_;
112
+ // Whether user-defined timestamp in the user key should be persisted when
113
+ // creating index block. If this flag is false, user-defined timestamp will
114
+ // be stripped from user key for each index entry, and the
115
+ // `first_internal_key` in `IndexValue` if it's included.
116
+ bool persist_user_defined_timestamps_;
108
117
  // Set after ::Finish is called
109
118
  size_t index_size_ = 0;
110
119
  };
@@ -120,19 +129,26 @@ class IndexBuilder {
120
129
  // substitute key that serves the same function.
121
130
  class ShortenedIndexBuilder : public IndexBuilder {
122
131
  public:
123
- explicit ShortenedIndexBuilder(
132
+ ShortenedIndexBuilder(
124
133
  const InternalKeyComparator* comparator,
125
134
  const int index_block_restart_interval, const uint32_t format_version,
126
135
  const bool use_value_delta_encoding,
127
136
  BlockBasedTableOptions::IndexShorteningMode shortening_mode,
128
- bool include_first_key)
129
- : IndexBuilder(comparator),
130
- index_block_builder_(index_block_restart_interval,
131
- true /*use_delta_encoding*/,
132
- use_value_delta_encoding),
133
- index_block_builder_without_seq_(index_block_restart_interval,
134
- true /*use_delta_encoding*/,
135
- use_value_delta_encoding),
137
+ bool include_first_key, size_t ts_sz,
138
+ const bool persist_user_defined_timestamps)
139
+ : IndexBuilder(comparator, ts_sz, persist_user_defined_timestamps),
140
+ index_block_builder_(
141
+ index_block_restart_interval, true /*use_delta_encoding*/,
142
+ use_value_delta_encoding,
143
+ BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
144
+ 0.75 /* data_block_hash_table_util_ratio */, ts_sz,
145
+ persist_user_defined_timestamps, false /* is_user_key */),
146
+ index_block_builder_without_seq_(
147
+ index_block_restart_interval, true /*use_delta_encoding*/,
148
+ use_value_delta_encoding,
149
+ BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
150
+ 0.75 /* data_block_hash_table_util_ratio */, ts_sz,
151
+ persist_user_defined_timestamps, true /* is_user_key */),
136
152
  use_value_delta_encoding_(use_value_delta_encoding),
137
153
  include_first_key_(include_first_key),
138
154
  shortening_mode_(shortening_mode) {
@@ -140,15 +156,15 @@ class ShortenedIndexBuilder : public IndexBuilder {
140
156
  seperator_is_key_plus_seq_ = (format_version <= 2);
141
157
  }
142
158
 
143
- virtual void OnKeyAdded(const Slice& key) override {
159
+ void OnKeyAdded(const Slice& key) override {
144
160
  if (include_first_key_ && current_block_first_internal_key_.empty()) {
145
161
  current_block_first_internal_key_.assign(key.data(), key.size());
146
162
  }
147
163
  }
148
164
 
149
- virtual void AddIndexEntry(std::string* last_key_in_current_block,
150
- const Slice* first_key_in_next_block,
151
- const BlockHandle& block_handle) override {
165
+ void AddIndexEntry(std::string* last_key_in_current_block,
166
+ const Slice* first_key_in_next_block,
167
+ const BlockHandle& block_handle) override {
152
168
  if (first_key_in_next_block != nullptr) {
153
169
  if (shortening_mode_ !=
154
170
  BlockBasedTableOptions::IndexShorteningMode::kNoShortening) {
@@ -172,7 +188,19 @@ class ShortenedIndexBuilder : public IndexBuilder {
172
188
  auto sep = Slice(*last_key_in_current_block);
173
189
 
174
190
  assert(!include_first_key_ || !current_block_first_internal_key_.empty());
175
- IndexValue entry(block_handle, current_block_first_internal_key_);
191
+ // When UDT should not be persisted, the index block builders take care of
192
+ // stripping UDT from the key, for the first internal key contained in the
193
+ // IndexValue, we need to explicitly do the stripping here before passing
194
+ // it to the block builders.
195
+ std::string first_internal_key_buf;
196
+ Slice first_internal_key = current_block_first_internal_key_;
197
+ if (!current_block_first_internal_key_.empty() && ts_sz_ > 0 &&
198
+ !persist_user_defined_timestamps_) {
199
+ StripTimestampFromInternalKey(&first_internal_key_buf,
200
+ current_block_first_internal_key_, ts_sz_);
201
+ first_internal_key = first_internal_key_buf;
202
+ }
203
+ IndexValue entry(block_handle, first_internal_key);
176
204
  std::string encoded_entry;
177
205
  std::string delta_encoded_entry;
178
206
  entry.EncodeTo(&encoded_entry, include_first_key_, nullptr);
@@ -185,6 +213,16 @@ class ShortenedIndexBuilder : public IndexBuilder {
185
213
  }
186
214
  last_encoded_handle_ = block_handle;
187
215
  const Slice delta_encoded_entry_slice(delta_encoded_entry);
216
+
217
+ // TODO(yuzhangyu): fix this when "FindShortInternalKeySuccessor"
218
+ // optimization is available.
219
+ // Timestamp aware comparator currently doesn't provide override for
220
+ // "FindShortInternalKeySuccessor" optimization. So the actual
221
+ // last key in current block is used as the key for indexing the current
222
+ // block. As a result, when UDTs should not be persisted, it's safe to strip
223
+ // away the UDT from key in index block as data block does the same thing.
224
+ // What are the implications if a "FindShortInternalKeySuccessor"
225
+ // optimization is provided.
188
226
  index_block_builder_.Add(sep, encoded_entry, &delta_encoded_entry_slice);
189
227
  if (!seperator_is_key_plus_seq_) {
190
228
  index_block_builder_without_seq_.Add(ExtractUserKey(sep), encoded_entry,
@@ -195,9 +233,8 @@ class ShortenedIndexBuilder : public IndexBuilder {
195
233
  }
196
234
 
197
235
  using IndexBuilder::Finish;
198
- virtual Status Finish(
199
- IndexBlocks* index_blocks,
200
- const BlockHandle& /*last_partition_block_handle*/) override {
236
+ Status Finish(IndexBlocks* index_blocks,
237
+ const BlockHandle& /*last_partition_block_handle*/) override {
201
238
  if (seperator_is_key_plus_seq_) {
202
239
  index_blocks->index_block_contents = index_block_builder_.Finish();
203
240
  } else {
@@ -208,9 +245,9 @@ class ShortenedIndexBuilder : public IndexBuilder {
208
245
  return Status::OK();
209
246
  }
210
247
 
211
- virtual size_t IndexSize() const override { return index_size_; }
248
+ size_t IndexSize() const override { return index_size_; }
212
249
 
213
- virtual bool seperator_is_key_plus_seq() override {
250
+ bool seperator_is_key_plus_seq() override {
214
251
  return seperator_is_key_plus_seq_;
215
252
  }
216
253
 
@@ -265,27 +302,28 @@ class ShortenedIndexBuilder : public IndexBuilder {
265
302
  // data copy or small heap allocations for prefixes.
266
303
  class HashIndexBuilder : public IndexBuilder {
267
304
  public:
268
- explicit HashIndexBuilder(
269
- const InternalKeyComparator* comparator,
270
- const SliceTransform* hash_key_extractor,
271
- int index_block_restart_interval, int format_version,
272
- bool use_value_delta_encoding,
273
- BlockBasedTableOptions::IndexShorteningMode shortening_mode)
274
- : IndexBuilder(comparator),
305
+ HashIndexBuilder(const InternalKeyComparator* comparator,
306
+ const SliceTransform* hash_key_extractor,
307
+ int index_block_restart_interval, int format_version,
308
+ bool use_value_delta_encoding,
309
+ BlockBasedTableOptions::IndexShorteningMode shortening_mode,
310
+ size_t ts_sz, const bool persist_user_defined_timestamps)
311
+ : IndexBuilder(comparator, ts_sz, persist_user_defined_timestamps),
275
312
  primary_index_builder_(comparator, index_block_restart_interval,
276
313
  format_version, use_value_delta_encoding,
277
- shortening_mode, /* include_first_key */ false),
314
+ shortening_mode, /* include_first_key */ false,
315
+ ts_sz, persist_user_defined_timestamps),
278
316
  hash_key_extractor_(hash_key_extractor) {}
279
317
 
280
- virtual void AddIndexEntry(std::string* last_key_in_current_block,
281
- const Slice* first_key_in_next_block,
282
- const BlockHandle& block_handle) override {
318
+ void AddIndexEntry(std::string* last_key_in_current_block,
319
+ const Slice* first_key_in_next_block,
320
+ const BlockHandle& block_handle) override {
283
321
  ++current_restart_index_;
284
322
  primary_index_builder_.AddIndexEntry(last_key_in_current_block,
285
323
  first_key_in_next_block, block_handle);
286
324
  }
287
325
 
288
- virtual void OnKeyAdded(const Slice& key) override {
326
+ void OnKeyAdded(const Slice& key) override {
289
327
  auto key_prefix = hash_key_extractor_->Transform(key);
290
328
  bool is_first_entry = pending_block_num_ == 0;
291
329
 
@@ -312,9 +350,8 @@ class HashIndexBuilder : public IndexBuilder {
312
350
  }
313
351
  }
314
352
 
315
- virtual Status Finish(
316
- IndexBlocks* index_blocks,
317
- const BlockHandle& last_partition_block_handle) override {
353
+ Status Finish(IndexBlocks* index_blocks,
354
+ const BlockHandle& last_partition_block_handle) override {
318
355
  if (pending_block_num_ != 0) {
319
356
  FlushPendingPrefix();
320
357
  }
@@ -327,12 +364,12 @@ class HashIndexBuilder : public IndexBuilder {
327
364
  return s;
328
365
  }
329
366
 
330
- virtual size_t IndexSize() const override {
367
+ size_t IndexSize() const override {
331
368
  return primary_index_builder_.IndexSize() + prefix_block_.size() +
332
369
  prefix_meta_block_.size();
333
370
  }
334
371
 
335
- virtual bool seperator_is_key_plus_seq() override {
372
+ bool seperator_is_key_plus_seq() override {
336
373
  return primary_index_builder_.seperator_is_key_plus_seq();
337
374
  }
338
375
 
@@ -378,24 +415,24 @@ class PartitionedIndexBuilder : public IndexBuilder {
378
415
  public:
379
416
  static PartitionedIndexBuilder* CreateIndexBuilder(
380
417
  const ROCKSDB_NAMESPACE::InternalKeyComparator* comparator,
381
- const bool use_value_delta_encoding,
382
- const BlockBasedTableOptions& table_opt);
418
+ bool use_value_delta_encoding, const BlockBasedTableOptions& table_opt,
419
+ size_t ts_sz, bool persist_user_defined_timestamps);
383
420
 
384
- explicit PartitionedIndexBuilder(const InternalKeyComparator* comparator,
385
- const BlockBasedTableOptions& table_opt,
386
- const bool use_value_delta_encoding);
421
+ PartitionedIndexBuilder(const InternalKeyComparator* comparator,
422
+ const BlockBasedTableOptions& table_opt,
423
+ bool use_value_delta_encoding, size_t ts_sz,
424
+ bool persist_user_defined_timestamps);
387
425
 
388
- virtual ~PartitionedIndexBuilder();
426
+ ~PartitionedIndexBuilder() override;
389
427
 
390
- virtual void AddIndexEntry(std::string* last_key_in_current_block,
391
- const Slice* first_key_in_next_block,
392
- const BlockHandle& block_handle) override;
428
+ void AddIndexEntry(std::string* last_key_in_current_block,
429
+ const Slice* first_key_in_next_block,
430
+ const BlockHandle& block_handle) override;
393
431
 
394
- virtual Status Finish(
395
- IndexBlocks* index_blocks,
396
- const BlockHandle& last_partition_block_handle) override;
432
+ Status Finish(IndexBlocks* index_blocks,
433
+ const BlockHandle& last_partition_block_handle) override;
397
434
 
398
- virtual size_t IndexSize() const override { return index_size_; }
435
+ size_t IndexSize() const override { return index_size_; }
399
436
  size_t TopLevelIndexSize(uint64_t) const { return top_level_index_size_; }
400
437
  size_t NumPartitions() const;
401
438
 
@@ -414,11 +451,13 @@ class PartitionedIndexBuilder : public IndexBuilder {
414
451
  // cutting the next partition
415
452
  void RequestPartitionCut();
416
453
 
417
- virtual bool seperator_is_key_plus_seq() override {
454
+ bool seperator_is_key_plus_seq() override {
418
455
  return seperator_is_key_plus_seq_;
419
456
  }
420
457
 
421
- bool get_use_value_delta_encoding() { return use_value_delta_encoding_; }
458
+ bool get_use_value_delta_encoding() const {
459
+ return use_value_delta_encoding_;
460
+ }
422
461
 
423
462
  private:
424
463
  // Set after ::Finish is called
@@ -26,7 +26,7 @@ Status BlockBasedTable::IndexReaderCommon::ReadIndexBlock(
26
26
  assert(rep != nullptr);
27
27
 
28
28
  const Status s = table->RetrieveBlock(
29
- prefetch_buffer, read_options, rep->footer.index_handle(),
29
+ prefetch_buffer, read_options, rep->index_handle,
30
30
  UncompressionDict::GetEmptyDict(), &index_block->As<Block_kIndex>(),
31
31
  get_context, lookup_context, /* for_compaction */ false, use_cache,
32
32
  /* async_read */ false);
@@ -65,6 +65,12 @@ class BlockBasedTable::IndexReaderCommon : public BlockBasedTable::IndexReader {
65
65
  return table_->get_rep()->table_options.cache_index_and_filter_blocks;
66
66
  }
67
67
 
68
+ bool user_defined_timestamps_persisted() const {
69
+ assert(table_ != nullptr);
70
+ assert(table_->get_rep() != nullptr);
71
+ return table_->get_rep()->user_defined_timestamps_persisted;
72
+ }
73
+
68
74
  Status GetOrReadIndexBlock(bool no_io, GetContext* get_context,
69
75
  BlockCacheLookupContext* lookup_context,
70
76
  CachableEntry<Block>* index_block,
@@ -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
@@ -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,14 @@ 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);
492
502
 
493
503
  IOOptions opts;
494
504
  s = rep->file->PrepareIOOptions(ro, opts);
495
505
  if (s.ok()) {
496
506
  s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
497
- static_cast<size_t>(prefetch_len),
498
- ro.rate_limiter_priority);
507
+ static_cast<size_t>(prefetch_len));
499
508
  }
500
509
  if (!s.ok()) {
501
510
  return s;
@@ -551,4 +560,10 @@ bool PartitionedFilterBlockReader::index_value_is_full() const {
551
560
  return table()->get_rep()->index_value_is_full;
552
561
  }
553
562
 
563
+ bool PartitionedFilterBlockReader::user_defined_timestamps_persisted() const {
564
+ assert(table());
565
+ assert(table()->get_rep());
566
+
567
+ return table()->get_rep()->user_defined_timestamps_persisted;
568
+ }
554
569
  } // 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