@nxtedition/rocksdb 8.2.8 → 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
@@ -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,8 +91,7 @@ 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_);
96
95
  Status s;
97
96
  table_->NewDataBlockIterator<IndexBlockIter>(
98
97
  read_options_, partitioned_index_handle, &block_iter_,
@@ -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,14 @@ 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);
170
174
  IOOptions opts;
171
175
  {
172
176
  Status s = rep->file->PrepareIOOptions(ro, opts);
173
177
  if (s.ok()) {
174
178
  s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
175
- static_cast<size_t>(prefetch_len),
176
- ro.rate_limiter_priority);
179
+ static_cast<size_t>(prefetch_len));
177
180
  }
178
181
  if (!s.ok()) {
179
182
  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);
@@ -33,9 +33,9 @@ inline void BlockFetcher::ProcessTrailerIfPresent() {
33
33
  if (footer_.GetBlockTrailerSize() > 0) {
34
34
  assert(footer_.GetBlockTrailerSize() == BlockBasedTable::kBlockTrailerSize);
35
35
  if (read_options_.verify_checksums) {
36
- io_status_ = status_to_io_status(VerifyBlockChecksum(
37
- footer_.checksum_type(), slice_.data(), block_size_,
38
- file_->file_name(), handle_.offset()));
36
+ io_status_ = status_to_io_status(
37
+ VerifyBlockChecksum(footer_, slice_.data(), block_size_,
38
+ file_->file_name(), handle_.offset()));
39
39
  RecordTick(ioptions_.stats, BLOCK_CHECKSUM_COMPUTE_COUNT);
40
40
  if (!io_status_.ok()) {
41
41
  assert(io_status_.IsCorruption());
@@ -80,11 +80,11 @@ inline bool BlockFetcher::TryGetFromPrefetchBuffer() {
80
80
  if (read_options_.async_io && !for_compaction_) {
81
81
  read_from_prefetch_buffer = prefetch_buffer_->TryReadFromCacheAsync(
82
82
  opts, file_, handle_.offset(), block_size_with_trailer_, &slice_,
83
- &io_s, read_options_.rate_limiter_priority);
83
+ &io_s);
84
84
  } else {
85
85
  read_from_prefetch_buffer = prefetch_buffer_->TryReadFromCache(
86
86
  opts, file_, handle_.offset(), block_size_with_trailer_, &slice_,
87
- &io_s, read_options_.rate_limiter_priority, for_compaction_);
87
+ &io_s, for_compaction_);
88
88
  }
89
89
  if (read_from_prefetch_buffer) {
90
90
  ProcessTrailerIfPresent();
@@ -259,18 +259,18 @@ IOStatus BlockFetcher::ReadBlockContents() {
259
259
  if (file_->use_direct_io()) {
260
260
  PERF_TIMER_GUARD(block_read_time);
261
261
  PERF_CPU_TIMER_GUARD(block_read_cpu_time, nullptr);
262
- io_status_ = file_->Read(
263
- opts, handle_.offset(), block_size_with_trailer_, &slice_, nullptr,
264
- &direct_io_buf_, read_options_.rate_limiter_priority);
262
+ io_status_ =
263
+ file_->Read(opts, handle_.offset(), block_size_with_trailer_,
264
+ &slice_, nullptr, &direct_io_buf_);
265
265
  PERF_COUNTER_ADD(block_read_count, 1);
266
266
  used_buf_ = const_cast<char*>(slice_.data());
267
267
  } else {
268
268
  PrepareBufferForBlockFromFile();
269
269
  PERF_TIMER_GUARD(block_read_time);
270
270
  PERF_CPU_TIMER_GUARD(block_read_cpu_time, nullptr);
271
- io_status_ = file_->Read(opts, handle_.offset(),
272
- block_size_with_trailer_, &slice_, used_buf_,
273
- nullptr, read_options_.rate_limiter_priority);
271
+ io_status_ =
272
+ file_->Read(opts, handle_.offset(), block_size_with_trailer_,
273
+ &slice_, used_buf_, nullptr);
274
274
  PERF_COUNTER_ADD(block_read_count, 1);
275
275
  #ifndef NDEBUG
276
276
  if (slice_.data() == &stack_buf_[0]) {
@@ -107,6 +107,9 @@ class BlockFetcherTest : public testing::Test {
107
107
  Footer footer;
108
108
  ReadFooter(file.get(), &footer);
109
109
  const BlockHandle& index_handle = footer.index_handle();
110
+ // FIXME: index handle will need to come from metaindex for
111
+ // format_version >= 6 when that becomes the default
112
+ ASSERT_FALSE(index_handle.IsNull());
110
113
 
111
114
  CompressionType compression_type;
112
115
  FetchBlock(file.get(), index_handle, BlockType::kIndex,
@@ -329,6 +329,7 @@ void CompactionMergingIterator::FindNextVisibleKey() {
329
329
  assert(current->iter.status().ok());
330
330
  minHeap_.replace_top(current);
331
331
  } else {
332
+ considerStatus(current->iter.status());
332
333
  minHeap_.pop();
333
334
  }
334
335
  if (range_tombstone_iters_[current->level]) {
@@ -403,8 +403,12 @@ Status CuckooTableBuilder::Finish() {
403
403
  }
404
404
 
405
405
  FooterBuilder footer;
406
- footer.Build(kCuckooTableMagicNumber, /* format_version */ 1, offset,
407
- kNoChecksum, meta_index_block_handle);
406
+ Status s = footer.Build(kCuckooTableMagicNumber, /* format_version */ 1,
407
+ offset, kNoChecksum, meta_index_block_handle);
408
+ if (!s.ok()) {
409
+ status_ = s;
410
+ return status_;
411
+ }
408
412
  io_status_ = file_->Append(footer.GetSlice());
409
413
  status_ = io_status_;
410
414
  return status_;
@@ -122,8 +122,7 @@ class CuckooBuilderTest : public testing::Test {
122
122
  for (uint32_t i = 0; i + 1 < table_size + cuckoo_block_size; ++i) {
123
123
  Slice read_slice;
124
124
  ASSERT_OK(file_reader->Read(IOOptions(), i * bucket_size, bucket_size,
125
- &read_slice, nullptr, nullptr,
126
- Env::IO_TOTAL /* rate_limiter_priority */));
125
+ &read_slice, nullptr, nullptr));
127
126
  size_t key_idx =
128
127
  std::find(expected_locations.begin(), expected_locations.end(), i) -
129
128
  expected_locations.begin();
@@ -144,9 +144,8 @@ CuckooTableReader::CuckooTableReader(
144
144
  *reinterpret_cast<const uint32_t*>(cuckoo_block_size->second.data());
145
145
  cuckoo_block_bytes_minus_one_ = cuckoo_block_size_ * bucket_length_ - 1;
146
146
  // TODO: rate limit reads of whole cuckoo tables.
147
- status_ =
148
- file_->Read(IOOptions(), 0, static_cast<size_t>(file_size), &file_data_,
149
- nullptr, nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
147
+ status_ = file_->Read(IOOptions(), 0, static_cast<size_t>(file_size),
148
+ &file_data_, nullptr, nullptr);
150
149
  }
151
150
 
152
151
  Status CuckooTableReader::Get(const ReadOptions& /*readOptions*/,