@nxtedition/rocksdb 6.0.1 → 7.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/BUILDING.md +12 -4
  2. package/binding.cc +421 -40
  3. package/deps/rocksdb/build_version.cc +4 -10
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +26 -3
  5. package/deps/rocksdb/rocksdb/Makefile +73 -91
  6. package/deps/rocksdb/rocksdb/TARGETS +27 -2
  7. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  8. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  12. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  13. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  14. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  15. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  16. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  17. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  18. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  19. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  20. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  21. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  22. package/deps/rocksdb/rocksdb/common.mk +30 -0
  23. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  24. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  25. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  26. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  27. package/deps/rocksdb/rocksdb/db/builder.cc +22 -7
  28. package/deps/rocksdb/rocksdb/db/c.cc +71 -0
  29. package/deps/rocksdb/rocksdb/db/c_test.c +28 -2
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +12 -5
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +54 -16
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +14 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +85 -18
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +23 -22
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +151 -32
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  48. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  49. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  50. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +404 -32
  51. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  52. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  53. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  54. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  55. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  56. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +11 -20
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +15 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +12 -9
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +42 -10
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +14 -4
  67. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  68. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  69. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  70. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  71. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  72. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  73. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +28 -12
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  76. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  77. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
  78. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +11 -6
  79. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  80. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  81. package/deps/rocksdb/rocksdb/db/db_test.cc +60 -42
  82. package/deps/rocksdb/rocksdb/db/db_test2.cc +244 -111
  83. package/deps/rocksdb/rocksdb/db/db_test_util.cc +101 -19
  84. package/deps/rocksdb/rocksdb/db/db_test_util.h +52 -2
  85. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  87. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +5 -175
  88. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  89. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  90. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  91. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  93. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  94. package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +91 -12
  96. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -2
  97. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
  98. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  99. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  100. package/deps/rocksdb/rocksdb/db/flush_job.cc +28 -15
  101. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  102. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  103. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +14 -1
  105. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  106. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  107. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  108. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  109. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  110. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  111. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  112. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  113. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  114. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  115. package/deps/rocksdb/rocksdb/db/repair.cc +13 -2
  116. package/deps/rocksdb/rocksdb/db/repair_test.cc +37 -15
  117. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  118. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/table_cache.cc +20 -130
  120. package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
  122. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +133 -133
  124. package/deps/rocksdb/rocksdb/db/version_edit.cc +22 -2
  125. package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -214
  128. package/deps/rocksdb/rocksdb/db/version_set.h +14 -3
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
  131. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  132. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  133. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  135. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  136. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -6
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +44 -6
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +374 -275
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  147. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  148. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  150. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  152. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  153. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  154. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  155. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  156. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  157. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  158. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  159. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  160. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  161. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
  162. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +44 -22
  163. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  164. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
  165. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  166. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  167. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +60 -40
  168. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -0
  169. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
  170. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +49 -1
  171. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  172. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  173. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  174. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  175. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  176. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  177. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  178. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  179. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -3
  181. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
  183. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  184. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  185. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  187. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  188. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +378 -103
  191. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  192. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  193. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  194. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  195. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  196. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  197. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  198. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  199. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  200. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  201. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  202. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  203. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  204. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  205. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +7 -8
  206. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  207. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  208. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  209. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  212. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  213. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  214. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  215. package/deps/rocksdb/rocksdb/options/cf_options.cc +47 -38
  216. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  217. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  218. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  219. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  220. package/deps/rocksdb/rocksdb/options/db_options.cc +46 -17
  221. package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
  222. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  223. package/deps/rocksdb/rocksdb/options/options_helper.cc +86 -39
  224. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  225. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +12 -7
  226. package/deps/rocksdb/rocksdb/options/options_test.cc +222 -68
  227. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  228. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  229. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  230. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  231. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  232. package/deps/rocksdb/rocksdb/src.mk +6 -1
  233. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  234. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  236. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  237. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +23 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  239. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +81 -7
  240. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
  241. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +94 -726
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -73
  246. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -5
  247. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +2 -11
  249. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
  250. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
  251. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  252. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
  253. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
  254. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  255. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  256. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  258. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
  259. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  260. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +8 -4
  261. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  262. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
  263. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +65 -7
  264. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
  265. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  266. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  267. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  268. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  269. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  270. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  271. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
  272. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  273. package/deps/rocksdb/rocksdb/table/multiget_context.h +60 -13
  274. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  275. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  276. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  277. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
  278. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
  279. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  280. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  281. package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
  282. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  283. package/deps/rocksdb/rocksdb/table/unique_id.cc +84 -25
  284. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +37 -4
  285. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -1
  286. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  287. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  288. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  289. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  290. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  291. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +277 -105
  292. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  293. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  294. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  295. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  296. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  297. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  298. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +26 -4
  299. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  300. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  301. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
  302. package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
  303. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  304. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  305. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  306. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  307. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  308. package/deps/rocksdb/rocksdb/util/compression.h +56 -7
  309. package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
  310. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  311. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  312. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  313. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  314. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  315. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  316. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  317. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  318. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  319. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
  320. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  321. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  322. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  323. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  324. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  325. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  326. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  327. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  328. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  329. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  330. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  331. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  332. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  333. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  334. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  335. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  336. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  337. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  338. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  339. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  340. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  341. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  342. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  343. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  344. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  345. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  346. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  351. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  352. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  353. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  356. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  357. package/deps/rocksdb/rocksdb.gyp +20 -13
  358. package/index.js +187 -3
  359. package/iterator.js +1 -0
  360. package/package-lock.json +23687 -0
  361. package/package.json +2 -30
  362. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  363. package/snapshot.js +23 -0
  364. package/deps/liburing/liburing/README +0 -46
  365. package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
  366. package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
  367. package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
  368. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
  369. package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
  370. package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
  371. package/deps/liburing/liburing/test/Makefile +0 -312
  372. package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
  373. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
  374. package/deps/liburing/liburing/test/accept-link.c +0 -251
  375. package/deps/liburing/liburing/test/accept-reuse.c +0 -164
  376. package/deps/liburing/liburing/test/accept-test.c +0 -79
  377. package/deps/liburing/liburing/test/accept.c +0 -476
  378. package/deps/liburing/liburing/test/across-fork.c +0 -283
  379. package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
  380. package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
  381. package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
  382. package/deps/liburing/liburing/test/close-opath.c +0 -122
  383. package/deps/liburing/liburing/test/config +0 -10
  384. package/deps/liburing/liburing/test/connect.c +0 -398
  385. package/deps/liburing/liburing/test/cq-full.c +0 -96
  386. package/deps/liburing/liburing/test/cq-overflow.c +0 -294
  387. package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
  388. package/deps/liburing/liburing/test/cq-ready.c +0 -94
  389. package/deps/liburing/liburing/test/cq-size.c +0 -58
  390. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
  391. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
  392. package/deps/liburing/liburing/test/defer.c +0 -307
  393. package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
  394. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
  395. package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
  396. package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
  397. package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
  398. package/deps/liburing/liburing/test/eventfd.c +0 -112
  399. package/deps/liburing/liburing/test/fadvise.c +0 -202
  400. package/deps/liburing/liburing/test/fallocate.c +0 -249
  401. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
  402. package/deps/liburing/liburing/test/file-register.c +0 -843
  403. package/deps/liburing/liburing/test/file-update.c +0 -173
  404. package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
  405. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
  406. package/deps/liburing/liburing/test/fixed-link.c +0 -90
  407. package/deps/liburing/liburing/test/fsync.c +0 -224
  408. package/deps/liburing/liburing/test/hardlink.c +0 -136
  409. package/deps/liburing/liburing/test/helpers.c +0 -135
  410. package/deps/liburing/liburing/test/helpers.h +0 -67
  411. package/deps/liburing/liburing/test/io-cancel.c +0 -537
  412. package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
  413. package/deps/liburing/liburing/test/io_uring_register.c +0 -664
  414. package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
  415. package/deps/liburing/liburing/test/iopoll.c +0 -366
  416. package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
  417. package/deps/liburing/liburing/test/lfs-openat.c +0 -273
  418. package/deps/liburing/liburing/test/link-timeout.c +0 -1107
  419. package/deps/liburing/liburing/test/link.c +0 -496
  420. package/deps/liburing/liburing/test/link_drain.c +0 -229
  421. package/deps/liburing/liburing/test/madvise.c +0 -195
  422. package/deps/liburing/liburing/test/mkdir.c +0 -108
  423. package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
  424. package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
  425. package/deps/liburing/liburing/test/nop.c +0 -115
  426. package/deps/liburing/liburing/test/open-close.c +0 -146
  427. package/deps/liburing/liburing/test/openat2.c +0 -240
  428. package/deps/liburing/liburing/test/personality.c +0 -204
  429. package/deps/liburing/liburing/test/pipe-eof.c +0 -81
  430. package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
  431. package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
  432. package/deps/liburing/liburing/test/poll-cancel.c +0 -135
  433. package/deps/liburing/liburing/test/poll-link.c +0 -227
  434. package/deps/liburing/liburing/test/poll-many.c +0 -208
  435. package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
  436. package/deps/liburing/liburing/test/poll-ring.c +0 -48
  437. package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
  438. package/deps/liburing/liburing/test/poll.c +0 -109
  439. package/deps/liburing/liburing/test/probe.c +0 -137
  440. package/deps/liburing/liburing/test/read-write.c +0 -876
  441. package/deps/liburing/liburing/test/register-restrictions.c +0 -633
  442. package/deps/liburing/liburing/test/rename.c +0 -134
  443. package/deps/liburing/liburing/test/ring-leak.c +0 -173
  444. package/deps/liburing/liburing/test/ring-leak2.c +0 -249
  445. package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
  446. package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
  447. package/deps/liburing/liburing/test/runtests.sh +0 -170
  448. package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
  449. package/deps/liburing/liburing/test/self.c +0 -91
  450. package/deps/liburing/liburing/test/send_recv.c +0 -291
  451. package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
  452. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
  453. package/deps/liburing/liburing/test/shared-wq.c +0 -84
  454. package/deps/liburing/liburing/test/short-read.c +0 -75
  455. package/deps/liburing/liburing/test/shutdown.c +0 -163
  456. package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
  457. package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
  458. package/deps/liburing/liburing/test/socket-rw.c +0 -147
  459. package/deps/liburing/liburing/test/splice.c +0 -511
  460. package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
  461. package/deps/liburing/liburing/test/sq-full.c +0 -45
  462. package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
  463. package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
  464. package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
  465. package/deps/liburing/liburing/test/sq-space_left.c +0 -159
  466. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
  467. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
  468. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
  469. package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
  470. package/deps/liburing/liburing/test/statx.c +0 -172
  471. package/deps/liburing/liburing/test/stdout.c +0 -232
  472. package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
  473. package/deps/liburing/liburing/test/submit-reuse.c +0 -239
  474. package/deps/liburing/liburing/test/symlink.c +0 -116
  475. package/deps/liburing/liburing/test/teardowns.c +0 -58
  476. package/deps/liburing/liburing/test/thread-exit.c +0 -131
  477. package/deps/liburing/liburing/test/timeout-new.c +0 -246
  478. package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
  479. package/deps/liburing/liburing/test/timeout.c +0 -1354
  480. package/deps/liburing/liburing/test/unlink.c +0 -111
  481. package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
  482. package/deps/rocksdb/rocksdb/README.md +0 -32
  483. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  484. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  485. package/deps/rocksdb/rocksdb/port/README +0 -10
  486. package/deps/rocksdb/rocksdb/python.mk +0 -9
  487. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  488. package/prebuilds/darwin-x64/node.napi.node +0 -0
  489. package/prebuilds/linux-arm64/node.napi.node +0 -0
  490. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -0,0 +1,11 @@
1
+ prefix="@CMAKE_INSTALL_PREFIX@"
2
+ exec_prefix="${prefix}"
3
+ libdir="${prefix}/lib"
4
+ includedir="${prefix}/include"
5
+
6
+ Name: @PROJECT_NAME@
7
+ Description: @CMAKE_PROJECT_DESCRIPTION@
8
+ URL: @CMAKE_PROJECT_HOMEPAGE_URL@
9
+ Version: @PROJECT_VERSION@
10
+ Cflags: -I"${includedir}"
11
+ Libs: -L"${libdir}" -lrocksdb
@@ -5,6 +5,7 @@ LIB_SOURCES = \
5
5
  cache/cache_key.cc \
6
6
  cache/cache_reservation_manager.cc \
7
7
  cache/clock_cache.cc \
8
+ cache/fast_lru_cache.cc \
8
9
  cache/lru_cache.cc \
9
10
  cache/compressed_secondary_cache.cc \
10
11
  cache/sharded_cache.cc \
@@ -210,7 +211,9 @@ LIB_SOURCES = \
210
211
  trace_replay/trace_replay.cc \
211
212
  trace_replay/block_cache_tracer.cc \
212
213
  trace_replay/io_tracer.cc \
214
+ util/async_file_reader.cc \
213
215
  util/build_version.cc \
216
+ util/cleanable.cc \
214
217
  util/coding.cc \
215
218
  util/compaction_job_stats_impl.cc \
216
219
  util/comparator.cc \
@@ -362,6 +365,7 @@ STRESS_LIB_SOURCES = \
362
365
 
363
366
  TEST_LIB_SOURCES = \
364
367
  db/db_test_util.cc \
368
+ db/db_with_timestamp_test_util.cc \
365
369
  test_util/mock_time_env.cc \
366
370
  test_util/testharness.cc \
367
371
  test_util/testutil.cc \
@@ -427,7 +431,6 @@ TEST_MAIN_SOURCES = \
427
431
  db/corruption_test.cc \
428
432
  db/cuckoo_table_db_test.cc \
429
433
  db/db_basic_test.cc \
430
- db/db_with_timestamp_basic_test.cc \
431
434
  db/db_block_cache_test.cc \
432
435
  db/db_bloom_filter_test.cc \
433
436
  db/db_compaction_filter_test.cc \
@@ -435,6 +438,8 @@ TEST_MAIN_SOURCES = \
435
438
  db/db_dynamic_level_test.cc \
436
439
  db/db_encryption_test.cc \
437
440
  db/db_flush_test.cc \
441
+ db/db_readonly_with_timestamp_test.cc \
442
+ db/db_with_timestamp_basic_test.cc \
438
443
  db/import_column_family_test.cc \
439
444
  db/db_inplace_update_test.cc \
440
445
  db/db_io_failure_test.cc \
@@ -47,7 +47,8 @@ InternalIteratorBase<IndexValue>* BinarySearchIndexReader::NewIterator(
47
47
  const bool no_io = (read_options.read_tier == kBlockCacheTier);
48
48
  CachableEntry<Block> index_block;
49
49
  const Status s =
50
- GetOrReadIndexBlock(no_io, get_context, lookup_context, &index_block);
50
+ GetOrReadIndexBlock(no_io, read_options.rate_limiter_priority,
51
+ get_context, lookup_context, &index_block);
51
52
  if (!s.ok()) {
52
53
  if (iter != nullptr) {
53
54
  iter->Invalidate(s);
@@ -10,6 +10,7 @@
10
10
  // Decodes the blocks generated by block_builder.cc.
11
11
 
12
12
  #include "table/block_based/block.h"
13
+
13
14
  #include <algorithm>
14
15
  #include <string>
15
16
  #include <unordered_map>
@@ -400,7 +401,8 @@ bool DataBlockIter::SeekForGetImpl(const Slice& target) {
400
401
  return true;
401
402
  }
402
403
 
403
- if (ucmp().Compare(raw_key_.GetUserKey(), target_user_key) != 0) {
404
+ if (icmp_->user_comparator()->Compare(raw_key_.GetUserKey(),
405
+ target_user_key) != 0) {
404
406
  // the key is not in this block and cannot be at the next block either.
405
407
  return false;
406
408
  }
@@ -719,7 +721,7 @@ void BlockIter<TValue>::FindKeyAfterBinarySeek(const Slice& target,
719
721
  } else {
720
722
  // We are in the last restart interval. The while-loop will terminate by
721
723
  // `Valid()` returning false upon advancing past the block's last key.
722
- max_offset = port::kMaxUint32;
724
+ max_offset = std::numeric_limits<uint32_t>::max();
723
725
  }
724
726
  while (true) {
725
727
  NextImpl();
@@ -10,6 +10,7 @@
10
10
  #pragma once
11
11
  #include <stddef.h>
12
12
  #include <stdint.h>
13
+
13
14
  #include <string>
14
15
  #include <vector>
15
16
 
@@ -266,23 +267,6 @@ class Block {
266
267
  template <class TValue>
267
268
  class BlockIter : public InternalIteratorBase<TValue> {
268
269
  public:
269
- void InitializeBase(const Comparator* raw_ucmp, const char* data,
270
- uint32_t restarts, uint32_t num_restarts,
271
- SequenceNumber global_seqno, bool block_contents_pinned) {
272
- assert(data_ == nullptr); // Ensure it is called only once
273
- assert(num_restarts > 0); // Ensure the param is valid
274
-
275
- raw_ucmp_ = raw_ucmp;
276
- data_ = data;
277
- restarts_ = restarts;
278
- num_restarts_ = num_restarts;
279
- current_ = restarts_;
280
- restart_index_ = num_restarts_;
281
- global_seqno_ = global_seqno;
282
- block_contents_pinned_ = block_contents_pinned;
283
- cache_handle_ = nullptr;
284
- }
285
-
286
270
  // Makes Valid() return false, status() return `s`, and Seek()/Prev()/etc do
287
271
  // nothing. Calls cleanup functions.
288
272
  virtual void Invalidate(const Status& s) {
@@ -371,6 +355,7 @@ class BlockIter : public InternalIteratorBase<TValue> {
371
355
  Cache::Handle* cache_handle() { return cache_handle_; }
372
356
 
373
357
  protected:
358
+ std::unique_ptr<InternalKeyComparator> icmp_;
374
359
  const char* data_; // underlying block contents
375
360
  uint32_t num_restarts_; // Number of uint32_t entries in restart array
376
361
 
@@ -405,11 +390,23 @@ class BlockIter : public InternalIteratorBase<TValue> {
405
390
  template <typename DecodeEntryFunc>
406
391
  inline bool ParseNextKey(bool* is_shared);
407
392
 
408
- InternalKeyComparator icmp() {
409
- return InternalKeyComparator(raw_ucmp_, false /* named */);
410
- }
393
+ void InitializeBase(const Comparator* raw_ucmp, const char* data,
394
+ uint32_t restarts, uint32_t num_restarts,
395
+ SequenceNumber global_seqno, bool block_contents_pinned) {
396
+ assert(data_ == nullptr); // Ensure it is called only once
397
+ assert(num_restarts > 0); // Ensure the param is valid
411
398
 
412
- UserComparatorWrapper ucmp() { return UserComparatorWrapper(raw_ucmp_); }
399
+ icmp_ =
400
+ std::make_unique<InternalKeyComparator>(raw_ucmp, false /* named */);
401
+ data_ = data;
402
+ restarts_ = restarts;
403
+ num_restarts_ = num_restarts;
404
+ current_ = restarts_;
405
+ restart_index_ = num_restarts_;
406
+ global_seqno_ = global_seqno;
407
+ block_contents_pinned_ = block_contents_pinned;
408
+ cache_handle_ = nullptr;
409
+ }
413
410
 
414
411
  // Must be called every time a key is found that needs to be returned to user,
415
412
  // and may be called when no key is found (as a no-op). Updates `key_`,
@@ -440,16 +437,15 @@ class BlockIter : public InternalIteratorBase<TValue> {
440
437
  int CompareCurrentKey(const Slice& other) {
441
438
  if (raw_key_.IsUserKey()) {
442
439
  assert(global_seqno_ == kDisableGlobalSequenceNumber);
443
- return ucmp().Compare(raw_key_.GetUserKey(), other);
440
+ return icmp_->user_comparator()->Compare(raw_key_.GetUserKey(), other);
444
441
  } else if (global_seqno_ == kDisableGlobalSequenceNumber) {
445
- return icmp().Compare(raw_key_.GetInternalKey(), other);
442
+ return icmp_->Compare(raw_key_.GetInternalKey(), other);
446
443
  }
447
- return icmp().Compare(raw_key_.GetInternalKey(), global_seqno_, other,
444
+ return icmp_->Compare(raw_key_.GetInternalKey(), global_seqno_, other,
448
445
  kDisableGlobalSequenceNumber);
449
446
  }
450
447
 
451
448
  private:
452
- const Comparator* raw_ucmp_;
453
449
  // Store the cache handle, if the block is cached. We need this since the
454
450
  // only other place the handle is stored is as an argument to the Cleanable
455
451
  // function callback, which is hard to retrieve. When multiple value
@@ -51,7 +51,7 @@ void AppendItem(std::string* props, const std::string& key,
51
51
 
52
52
  template <class TKey>
53
53
  void AppendItem(std::string* props, const TKey& key, const std::string& value) {
54
- std::string key_str = ROCKSDB_NAMESPACE::ToString(key);
54
+ std::string key_str = std::to_string(key);
55
55
  AppendItem(props, key_str, value);
56
56
  }
57
57
  } // namespace
@@ -337,7 +337,7 @@ std::string BlockBasedFilterBlockReader::ToString() const {
337
337
  result.reserve(1024);
338
338
 
339
339
  std::string s_bo("Block offset"), s_hd("Hex dump"), s_fb("# filter blocks");
340
- AppendItem(&result, s_fb, ROCKSDB_NAMESPACE::ToString(num));
340
+ AppendItem(&result, s_fb, std::to_string(num));
341
341
  AppendItem(&result, s_bo, s_hd);
342
342
 
343
343
  for (size_t index = 0; index < num; index++) {
@@ -345,8 +345,7 @@ std::string BlockBasedFilterBlockReader::ToString() const {
345
345
  uint32_t limit = DecodeFixed32(offset + index * 4 + 4);
346
346
 
347
347
  if (start != limit) {
348
- result.append(" filter block # " +
349
- ROCKSDB_NAMESPACE::ToString(index + 1) + "\n");
348
+ result.append(" filter block # " + std::to_string(index + 1) + "\n");
350
349
  Slice filter = Slice(data + start, limit - start);
351
350
  AppendItem(&result, start, filter.ToString(true));
352
351
  }
@@ -461,14 +461,24 @@ struct BlockBasedTableBuilder::Rep {
461
461
  buffer_limit = std::min(tbo.target_file_size,
462
462
  compression_opts.max_dict_buffer_bytes);
463
463
  }
464
- if (table_options.no_block_cache || table_options.block_cache == nullptr) {
465
- compression_dict_buffer_cache_res_mgr = nullptr;
466
- } else {
464
+
465
+ const auto compress_dict_build_buffer_charged =
466
+ table_options.cache_usage_options.options_overrides
467
+ .at(CacheEntryRole::kCompressionDictionaryBuildingBuffer)
468
+ .charged;
469
+ if (table_options.block_cache &&
470
+ (compress_dict_build_buffer_charged ==
471
+ CacheEntryRoleOptions::Decision::kEnabled ||
472
+ compress_dict_build_buffer_charged ==
473
+ CacheEntryRoleOptions::Decision::kFallback)) {
467
474
  compression_dict_buffer_cache_res_mgr =
468
475
  std::make_shared<CacheReservationManagerImpl<
469
476
  CacheEntryRole::kCompressionDictionaryBuildingBuffer>>(
470
477
  table_options.block_cache);
478
+ } else {
479
+ compression_dict_buffer_cache_res_mgr = nullptr;
471
480
  }
481
+
472
482
  for (uint32_t i = 0; i < compression_opts.parallel_threads; i++) {
473
483
  compression_ctxs[i].reset(new CompressionContext(compression_type));
474
484
  }
@@ -942,7 +952,7 @@ void BlockBasedTableBuilder::Add(const Slice& key, const Slice& value) {
942
952
  (r->buffer_limit != 0 && r->data_begin_offset > r->buffer_limit);
943
953
  bool exceeds_global_block_cache_limit = false;
944
954
 
945
- // Increase cache reservation for the last buffered data block
955
+ // Increase cache charging for the last buffered data block
946
956
  // only if the block is not going to be unbuffered immediately
947
957
  // and there exists a cache reservation manager
948
958
  if (!exceeds_buffer_limit &&
@@ -1886,9 +1896,15 @@ void BlockBasedTableBuilder::EnterUnbuffered() {
1886
1896
  // OK if compression_dict_samples is empty, we'll just get empty dictionary.
1887
1897
  std::string dict;
1888
1898
  if (r->compression_opts.zstd_max_train_bytes > 0) {
1889
- dict = ZSTD_TrainDictionary(compression_dict_samples,
1890
- compression_dict_sample_lens,
1891
- r->compression_opts.max_dict_bytes);
1899
+ if (r->compression_opts.use_zstd_dict_trainer) {
1900
+ dict = ZSTD_TrainDictionary(compression_dict_samples,
1901
+ compression_dict_sample_lens,
1902
+ r->compression_opts.max_dict_bytes);
1903
+ } else {
1904
+ dict = ZSTD_FinalizeDictionary(
1905
+ compression_dict_samples, compression_dict_sample_lens,
1906
+ r->compression_opts.max_dict_bytes, r->compression_opts.level);
1907
+ }
1892
1908
  } else {
1893
1909
  dict = std::move(compression_dict_samples);
1894
1910
  }
@@ -1924,7 +1940,6 @@ void BlockBasedTableBuilder::EnterUnbuffered() {
1924
1940
  }
1925
1941
 
1926
1942
  auto& data_block = r->data_block_buffers[i];
1927
-
1928
1943
  if (r->IsParallelCompressionEnabled()) {
1929
1944
  Slice first_key_in_next_block;
1930
1945
  const Slice* first_key_in_next_block_ptr = &first_key_in_next_block;
@@ -234,6 +234,7 @@ static std::unordered_map<std::string, OptionTypeInfo>
234
234
  /* currently not supported
235
235
  std::shared_ptr<Cache> block_cache = nullptr;
236
236
  std::shared_ptr<Cache> block_cache_compressed = nullptr;
237
+ CacheUsageOptions cache_usage_options;
237
238
  */
238
239
  {"flush_block_policy_factory",
239
240
  OptionTypeInfo::AsCustomSharedPtr<FlushBlockPolicyFactory>(
@@ -328,12 +329,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
328
329
  OptionType::kBoolean, OptionVerificationType::kNormal,
329
330
  OptionTypeFlags::kMutable}},
330
331
  {"reserve_table_builder_memory",
331
- {offsetof(struct BlockBasedTableOptions, reserve_table_builder_memory),
332
- OptionType::kBoolean, OptionVerificationType::kNormal,
332
+ {0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
333
333
  OptionTypeFlags::kNone}},
334
334
  {"reserve_table_reader_memory",
335
- {offsetof(struct BlockBasedTableOptions, reserve_table_reader_memory),
336
- OptionType::kBoolean, OptionVerificationType::kNormal,
335
+ {0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
337
336
  OptionTypeFlags::kNone}},
338
337
  {"skip_table_builder_flush",
339
338
  {0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
@@ -429,8 +428,12 @@ BlockBasedTableFactory::BlockBasedTableFactory(
429
428
  InitializeOptions();
430
429
  RegisterOptions(&table_options_, &block_based_table_type_info);
431
430
 
432
- if (table_options_.reserve_table_reader_memory &&
433
- table_options_.no_block_cache == false) {
431
+ const auto table_reader_charged =
432
+ table_options_.cache_usage_options.options_overrides
433
+ .at(CacheEntryRole::kBlockBasedTableReader)
434
+ .charged;
435
+ if (table_options_.block_cache &&
436
+ table_reader_charged == CacheEntryRoleOptions::Decision::kEnabled) {
434
437
  table_reader_cache_res_mgr_.reset(new ConcurrentCacheReservationManager(
435
438
  std::make_shared<CacheReservationManagerImpl<
436
439
  CacheEntryRole::kBlockBasedTableReader>>(
@@ -474,6 +477,19 @@ void BlockBasedTableFactory::InitializeOptions() {
474
477
  // We do not support partitioned filters without partitioning indexes
475
478
  table_options_.partition_filters = false;
476
479
  }
480
+ auto& options_overrides =
481
+ table_options_.cache_usage_options.options_overrides;
482
+ const auto options = table_options_.cache_usage_options.options;
483
+ for (std::uint32_t i = 0; i < kNumCacheEntryRoles; ++i) {
484
+ CacheEntryRole role = static_cast<CacheEntryRole>(i);
485
+ auto options_overrides_iter = options_overrides.find(role);
486
+ if (options_overrides_iter == options_overrides.end()) {
487
+ options_overrides.insert({role, options});
488
+ } else if (options_overrides_iter->second.charged ==
489
+ CacheEntryRoleOptions::Decision::kFallback) {
490
+ options_overrides_iter->second.charged = options.charged;
491
+ }
492
+ }
477
493
  }
478
494
 
479
495
  Status BlockBasedTableFactory::PrepareOptions(const ConfigOptions& opts) {
@@ -637,12 +653,6 @@ Status BlockBasedTableFactory::ValidateOptions(
637
653
  "Enable pin_l0_filter_and_index_blocks_in_cache, "
638
654
  ", but block cache is disabled");
639
655
  }
640
- if (table_options_.reserve_table_reader_memory &&
641
- table_options_.no_block_cache) {
642
- return Status::InvalidArgument(
643
- "Enable reserve_table_reader_memory, "
644
- ", but block cache is disabled");
645
- }
646
656
  if (!IsSupportedFormatVersion(table_options_.format_version)) {
647
657
  return Status::InvalidArgument(
648
658
  "Unsupported BlockBasedTable format_version. Please check "
@@ -658,7 +668,7 @@ Status BlockBasedTableFactory::ValidateOptions(
658
668
  return Status::InvalidArgument(
659
669
  "Block alignment requested but block size is not a power of 2");
660
670
  }
661
- if (table_options_.block_size > port::kMaxUint32) {
671
+ if (table_options_.block_size > std::numeric_limits<uint32_t>::max()) {
662
672
  return Status::InvalidArgument(
663
673
  "block size exceeds maximum number (4GiB) allowed");
664
674
  }
@@ -675,6 +685,34 @@ Status BlockBasedTableFactory::ValidateOptions(
675
685
  "max_successive_merges larger than 0 is currently inconsistent with "
676
686
  "unordered_write");
677
687
  }
688
+ const auto& options_overrides =
689
+ table_options_.cache_usage_options.options_overrides;
690
+ for (auto options_overrides_iter = options_overrides.cbegin();
691
+ options_overrides_iter != options_overrides.cend();
692
+ ++options_overrides_iter) {
693
+ const CacheEntryRole role = options_overrides_iter->first;
694
+ const CacheEntryRoleOptions options = options_overrides_iter->second;
695
+ static const std::set<CacheEntryRole> kMemoryChargingSupported = {
696
+ CacheEntryRole::kCompressionDictionaryBuildingBuffer,
697
+ CacheEntryRole::kFilterConstruction,
698
+ CacheEntryRole::kBlockBasedTableReader};
699
+ if (options.charged != CacheEntryRoleOptions::Decision::kFallback &&
700
+ kMemoryChargingSupported.count(role) == 0) {
701
+ return Status::NotSupported(
702
+ "Enable/Disable CacheEntryRoleOptions::charged"
703
+ "for CacheEntryRole " +
704
+ kCacheEntryRoleToCamelString[static_cast<uint32_t>(role)] +
705
+ " is not supported");
706
+ }
707
+ if (table_options_.no_block_cache &&
708
+ options.charged == CacheEntryRoleOptions::Decision::kEnabled) {
709
+ return Status::InvalidArgument(
710
+ "Enable CacheEntryRoleOptions::charged"
711
+ "for CacheEntryRole " +
712
+ kCacheEntryRoleToCamelString[static_cast<uint32_t>(role)] +
713
+ " but block cache is disabled");
714
+ }
715
+ }
678
716
  {
679
717
  Status s = CheckCacheOptionCompatibility(table_options_);
680
718
  if (!s.ok()) {
@@ -686,8 +724,7 @@ Status BlockBasedTableFactory::ValidateOptions(
686
724
  table_options_.checksum, &garbage)) {
687
725
  return Status::InvalidArgument(
688
726
  "Unrecognized ChecksumType for checksum: " +
689
- ROCKSDB_NAMESPACE::ToString(
690
- static_cast<uint32_t>(table_options_.checksum)));
727
+ std::to_string(static_cast<uint32_t>(table_options_.checksum)));
691
728
  }
692
729
  return TableFactory::ValidateOptions(db_opts, cf_opts);
693
730
  }
@@ -9,11 +9,21 @@
9
9
  #include "table/block_based/block_based_table_iterator.h"
10
10
 
11
11
  namespace ROCKSDB_NAMESPACE {
12
- void BlockBasedTableIterator::Seek(const Slice& target) { SeekImpl(&target); }
13
12
 
14
- void BlockBasedTableIterator::SeekToFirst() { SeekImpl(nullptr); }
13
+ void BlockBasedTableIterator::SeekToFirst() { SeekImpl(nullptr, false); }
14
+
15
+ void BlockBasedTableIterator::Seek(const Slice& target) {
16
+ SeekImpl(&target, true);
17
+ }
18
+
19
+ void BlockBasedTableIterator::SeekImpl(const Slice* target,
20
+ bool async_prefetch) {
21
+ bool is_first_pass = true;
22
+ if (async_read_in_progress_) {
23
+ AsyncInitDataBlock(false);
24
+ is_first_pass = false;
25
+ }
15
26
 
16
- void BlockBasedTableIterator::SeekImpl(const Slice* target) {
17
27
  is_out_of_bound_ = false;
18
28
  is_at_first_key_from_index_ = false;
19
29
  if (target && !CheckPrefixMayMatch(*target, IterDirection::kForward)) {
@@ -74,7 +84,20 @@ void BlockBasedTableIterator::SeekImpl(const Slice* target) {
74
84
  } else {
75
85
  // Need to use the data block.
76
86
  if (!same_block) {
77
- InitDataBlock();
87
+ if (read_options_.async_io && async_prefetch) {
88
+ if (is_first_pass) {
89
+ AsyncInitDataBlock(is_first_pass);
90
+ }
91
+ if (async_read_in_progress_) {
92
+ // Status::TryAgain indicates asynchronous request for retrieval of
93
+ // data blocks has been submitted. So it should return at this point
94
+ // and Seek should be called again to retrieve the requested block and
95
+ // execute the remaining code.
96
+ return;
97
+ }
98
+ } else {
99
+ InitDataBlock();
100
+ }
78
101
  } else {
79
102
  // When the user does a reseek, the iterate_upper_bound might have
80
103
  // changed. CheckDataBlockWithinUpperBound() needs to be called
@@ -234,18 +257,69 @@ void BlockBasedTableIterator::InitDataBlock() {
234
257
  // Enabled from the very first IO when ReadOptions.readahead_size is set.
235
258
  block_prefetcher_.PrefetchIfNeeded(
236
259
  rep, data_block_handle, read_options_.readahead_size, is_for_compaction,
237
- read_options_.async_io);
260
+ read_options_.async_io, read_options_.rate_limiter_priority);
238
261
  Status s;
239
262
  table_->NewDataBlockIterator<DataBlockIter>(
240
263
  read_options_, data_block_handle, &block_iter_, BlockType::kData,
241
- /*get_context=*/nullptr, &lookup_context_, s,
264
+ /*get_context=*/nullptr, &lookup_context_,
242
265
  block_prefetcher_.prefetch_buffer(),
243
- /*for_compaction=*/is_for_compaction);
266
+ /*for_compaction=*/is_for_compaction, /*async_read=*/false, s);
244
267
  block_iter_points_to_real_block_ = true;
245
268
  CheckDataBlockWithinUpperBound();
246
269
  }
247
270
  }
248
271
 
272
+ void BlockBasedTableIterator::AsyncInitDataBlock(bool is_first_pass) {
273
+ BlockHandle data_block_handle = index_iter_->value().handle;
274
+ bool is_for_compaction =
275
+ lookup_context_.caller == TableReaderCaller::kCompaction;
276
+ if (is_first_pass) {
277
+ if (!block_iter_points_to_real_block_ ||
278
+ data_block_handle.offset() != prev_block_offset_ ||
279
+ // if previous attempt of reading the block missed cache, try again
280
+ block_iter_.status().IsIncomplete()) {
281
+ if (block_iter_points_to_real_block_) {
282
+ ResetDataIter();
283
+ }
284
+ auto* rep = table_->get_rep();
285
+ // Prefetch additional data for range scans (iterators).
286
+ // Implicit auto readahead:
287
+ // Enabled after 2 sequential IOs when ReadOptions.readahead_size == 0.
288
+ // Explicit user requested readahead:
289
+ // Enabled from the very first IO when ReadOptions.readahead_size is
290
+ // set.
291
+ block_prefetcher_.PrefetchIfNeeded(
292
+ rep, data_block_handle, read_options_.readahead_size,
293
+ is_for_compaction, read_options_.async_io,
294
+ read_options_.rate_limiter_priority);
295
+
296
+ Status s;
297
+ table_->NewDataBlockIterator<DataBlockIter>(
298
+ read_options_, data_block_handle, &block_iter_, BlockType::kData,
299
+ /*get_context=*/nullptr, &lookup_context_,
300
+ block_prefetcher_.prefetch_buffer(),
301
+ /*for_compaction=*/is_for_compaction, /*async_read=*/true, s);
302
+
303
+ if (s.IsTryAgain()) {
304
+ async_read_in_progress_ = true;
305
+ return;
306
+ }
307
+ }
308
+ } else {
309
+ // Second pass will call the Poll to get the data block which has been
310
+ // requested asynchronously.
311
+ Status s;
312
+ table_->NewDataBlockIterator<DataBlockIter>(
313
+ read_options_, data_block_handle, &block_iter_, BlockType::kData,
314
+ /*get_context=*/nullptr, &lookup_context_,
315
+ block_prefetcher_.prefetch_buffer(),
316
+ /*for_compaction=*/is_for_compaction, /*async_read=*/false, s);
317
+ }
318
+ block_iter_points_to_real_block_ = true;
319
+ CheckDataBlockWithinUpperBound();
320
+ async_read_in_progress_ = false;
321
+ }
322
+
249
323
  bool BlockBasedTableIterator::MaterializeCurrentBlock() {
250
324
  assert(is_at_first_key_from_index_);
251
325
  assert(!block_iter_points_to_real_block_);
@@ -41,7 +41,8 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
41
41
  allow_unprepared_value_(allow_unprepared_value),
42
42
  block_iter_points_to_real_block_(false),
43
43
  check_filter_(check_filter),
44
- need_upper_bound_check_(need_upper_bound_check) {}
44
+ need_upper_bound_check_(need_upper_bound_check),
45
+ async_read_in_progress_(false) {}
45
46
 
46
47
  ~BlockBasedTableIterator() {}
47
48
 
@@ -96,6 +97,8 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
96
97
  return index_iter_->status();
97
98
  } else if (block_iter_points_to_real_block_) {
98
99
  return block_iter_.status();
100
+ } else if (async_read_in_progress_) {
101
+ return Status::TryAgain();
99
102
  } else {
100
103
  return Status::OK();
101
104
  }
@@ -236,10 +239,13 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
236
239
  // TODO(Zhongyi): pick a better name
237
240
  bool need_upper_bound_check_;
238
241
 
242
+ bool async_read_in_progress_;
243
+
239
244
  // If `target` is null, seek to first.
240
- void SeekImpl(const Slice* target);
245
+ void SeekImpl(const Slice* target, bool async_prefetch);
241
246
 
242
247
  void InitDataBlock();
248
+ void AsyncInitDataBlock(bool is_first_pass);
243
249
  bool MaterializeCurrentBlock();
244
250
  void FindKeyForward();
245
251
  void FindBlockForward();