@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
@@ -38,6 +38,10 @@
38
38
  #include "db/table_cache.h"
39
39
  #include "db/version_builder.h"
40
40
  #include "db/version_edit_handler.h"
41
+ #if USE_COROUTINES
42
+ #include "folly/experimental/coro/BlockingWait.h"
43
+ #include "folly/experimental/coro/Collect.h"
44
+ #endif
41
45
  #include "file/filename.h"
42
46
  #include "file/random_access_file_reader.h"
43
47
  #include "file/read_write_util.h"
@@ -59,13 +63,28 @@
59
63
  #include "table/plain/plain_table_factory.h"
60
64
  #include "table/table_reader.h"
61
65
  #include "table/two_level_iterator.h"
66
+ #include "table/unique_id_impl.h"
62
67
  #include "test_util/sync_point.h"
63
68
  #include "util/cast_util.h"
64
69
  #include "util/coding.h"
70
+ #include "util/coro_utils.h"
65
71
  #include "util/stop_watch.h"
66
72
  #include "util/string_util.h"
67
73
  #include "util/user_comparator_wrapper.h"
68
74
 
75
+ // Generate the regular and coroutine versions of some methods by
76
+ // including version_set_sync_and_async.h twice
77
+ // Macros in the header will expand differently based on whether
78
+ // WITH_COROUTINES or WITHOUT_COROUTINES is defined
79
+ // clang-format off
80
+ #define WITHOUT_COROUTINES
81
+ #include "db/version_set_sync_and_async.h"
82
+ #undef WITHOUT_COROUTINES
83
+ #define WITH_COROUTINES
84
+ #include "db/version_set_sync_and_async.h"
85
+ #undef WITH_COROUTINES
86
+ // clang-format on
87
+
69
88
  namespace ROCKSDB_NAMESPACE {
70
89
 
71
90
  namespace {
@@ -504,68 +523,63 @@ class FilePickerMultiGet {
504
523
  return file_hit;
505
524
  }
506
525
 
507
- FdWithKeyRange* GetNextFile() {
508
- while (!search_ended_) {
509
- // Start searching next level.
510
- if (batch_iter_ == current_level_range_.end()) {
511
- search_ended_ = !PrepareNextLevel();
512
- continue;
513
- } else {
514
- if (maybe_repeat_key_) {
515
- maybe_repeat_key_ = false;
516
- // Check if we found the final value for the last key in the
517
- // previous lookup range. If we did, then there's no need to look
518
- // any further for that key, so advance batch_iter_. Else, keep
519
- // batch_iter_ positioned on that key so we look it up again in
520
- // the next file
521
- // For L0, always advance the key because we will look in the next
522
- // file regardless for all keys not found yet
523
- if (current_level_range_.CheckKeyDone(batch_iter_) ||
524
- curr_level_ == 0) {
525
- batch_iter_ = upper_key_;
526
- }
526
+ void PrepareNextLevelForSearch() { search_ended_ = !PrepareNextLevel(); }
527
+
528
+ FdWithKeyRange* GetNextFileInLevel() {
529
+ if (batch_iter_ == current_level_range_.end() || search_ended_) {
530
+ return nullptr;
531
+ } else {
532
+ if (maybe_repeat_key_) {
533
+ maybe_repeat_key_ = false;
534
+ // Check if we found the final value for the last key in the
535
+ // previous lookup range. If we did, then there's no need to look
536
+ // any further for that key, so advance batch_iter_. Else, keep
537
+ // batch_iter_ positioned on that key so we look it up again in
538
+ // the next file
539
+ // For L0, always advance the key because we will look in the next
540
+ // file regardless for all keys not found yet
541
+ if (current_level_range_.CheckKeyDone(batch_iter_) ||
542
+ curr_level_ == 0) {
543
+ batch_iter_ = upper_key_;
527
544
  }
528
- // batch_iter_prev_ will become the start key for the next file
529
- // lookup
530
- batch_iter_prev_ = batch_iter_;
531
545
  }
532
-
533
- MultiGetRange next_file_range(current_level_range_, batch_iter_prev_,
534
- current_level_range_.end());
535
- size_t curr_file_index =
536
- (batch_iter_ != current_level_range_.end())
537
- ? fp_ctx_array_[batch_iter_.index()].curr_index_in_curr_level
538
- : curr_file_level_->num_files;
539
- FdWithKeyRange* f;
540
- bool is_last_key_in_file;
541
- if (!GetNextFileInLevelWithKeys(&next_file_range, &curr_file_index, &f,
542
- &is_last_key_in_file)) {
543
- search_ended_ = !PrepareNextLevel();
544
- } else {
545
- if (is_last_key_in_file) {
546
- // Since cmp_largest is 0, batch_iter_ still points to the last key
547
- // that falls in this file, instead of the next one. Increment
548
- // the file index for all keys between batch_iter_ and upper_key_
549
- auto tmp_iter = batch_iter_;
550
- while (tmp_iter != upper_key_) {
551
- ++(fp_ctx_array_[tmp_iter.index()].curr_index_in_curr_level);
552
- ++tmp_iter;
553
- }
554
- maybe_repeat_key_ = true;
546
+ // batch_iter_prev_ will become the start key for the next file
547
+ // lookup
548
+ batch_iter_prev_ = batch_iter_;
549
+ }
550
+
551
+ MultiGetRange next_file_range(current_level_range_, batch_iter_prev_,
552
+ current_level_range_.end());
553
+ size_t curr_file_index =
554
+ (batch_iter_ != current_level_range_.end())
555
+ ? fp_ctx_array_[batch_iter_.index()].curr_index_in_curr_level
556
+ : curr_file_level_->num_files;
557
+ FdWithKeyRange* f;
558
+ bool is_last_key_in_file;
559
+ if (!GetNextFileInLevelWithKeys(&next_file_range, &curr_file_index, &f,
560
+ &is_last_key_in_file)) {
561
+ return nullptr;
562
+ } else {
563
+ if (is_last_key_in_file) {
564
+ // Since cmp_largest is 0, batch_iter_ still points to the last key
565
+ // that falls in this file, instead of the next one. Increment
566
+ // the file index for all keys between batch_iter_ and upper_key_
567
+ auto tmp_iter = batch_iter_;
568
+ while (tmp_iter != upper_key_) {
569
+ ++(fp_ctx_array_[tmp_iter.index()].curr_index_in_curr_level);
570
+ ++tmp_iter;
555
571
  }
556
- // Set the range for this file
557
- current_file_range_ =
558
- MultiGetRange(next_file_range, batch_iter_prev_, upper_key_);
559
- returned_file_level_ = curr_level_;
560
- hit_file_level_ = curr_level_;
561
- is_hit_file_last_in_level_ =
562
- curr_file_index == curr_file_level_->num_files - 1;
563
- return f;
572
+ maybe_repeat_key_ = true;
564
573
  }
574
+ // Set the range for this file
575
+ current_file_range_ =
576
+ MultiGetRange(next_file_range, batch_iter_prev_, upper_key_);
577
+ returned_file_level_ = curr_level_;
578
+ hit_file_level_ = curr_level_;
579
+ is_hit_file_last_in_level_ =
580
+ curr_file_index == curr_file_level_->num_files - 1;
581
+ return f;
565
582
  }
566
-
567
- // Search ended
568
- return nullptr;
569
583
  }
570
584
 
571
585
  // getter for current file level
@@ -576,8 +590,16 @@ class FilePickerMultiGet {
576
590
  // GetNextFile()) is at the last index in its level.
577
591
  bool IsHitFileLastInLevel() { return is_hit_file_last_in_level_; }
578
592
 
593
+ bool KeyMaySpanNextFile() { return maybe_repeat_key_; }
594
+
595
+ bool IsSearchEnded() { return search_ended_; }
596
+
579
597
  const MultiGetRange& CurrentFileRange() { return current_file_range_; }
580
598
 
599
+ bool RemainingOverlapInLevel() {
600
+ return !current_level_range_.Suffix(current_file_range_).empty();
601
+ }
602
+
581
603
  private:
582
604
  unsigned int num_levels_;
583
605
  unsigned int curr_level_;
@@ -1056,7 +1078,15 @@ void LevelIterator::Seek(const Slice& target) {
1056
1078
 
1057
1079
  if (file_iter_.iter() != nullptr) {
1058
1080
  file_iter_.Seek(target);
1081
+ // Status::TryAgain indicates asynchronous request for retrieval of data
1082
+ // blocks has been submitted. So it should return at this point and Seek
1083
+ // should be called again to retrieve the requested block and execute the
1084
+ // remaining code.
1085
+ if (file_iter_.status() == Status::TryAgain()) {
1086
+ return;
1087
+ }
1059
1088
  }
1089
+
1060
1090
  if (SkipEmptyFileForward() && prefix_extractor_ != nullptr &&
1061
1091
  !read_options_.total_order_seek && !read_options_.auto_prefix_mode &&
1062
1092
  file_iter_.iter() != nullptr && file_iter_.Valid()) {
@@ -1517,7 +1547,7 @@ uint64_t Version::GetSstFilesSize() {
1517
1547
  }
1518
1548
 
1519
1549
  void Version::GetCreationTimeOfOldestFile(uint64_t* creation_time) {
1520
- uint64_t oldest_time = port::kMaxUint64;
1550
+ uint64_t oldest_time = std::numeric_limits<uint64_t>::max();
1521
1551
  for (int level = 0; level < storage_info_.num_non_empty_levels_; level++) {
1522
1552
  for (FileMetaData* meta : storage_info_.LevelFiles(level)) {
1523
1553
  assert(meta->fd.table_reader != nullptr);
@@ -1534,6 +1564,40 @@ void Version::GetCreationTimeOfOldestFile(uint64_t* creation_time) {
1534
1564
  *creation_time = oldest_time;
1535
1565
  }
1536
1566
 
1567
+ Status Version::VerifySstUniqueIds() const {
1568
+ for (int level = 0; level < storage_info_.num_non_empty_levels_; level++) {
1569
+ for (FileMetaData* meta : storage_info_.LevelFiles(level)) {
1570
+ if (meta->unique_id != kNullUniqueId64x2) {
1571
+ std::shared_ptr<const TableProperties> props;
1572
+ Status s =
1573
+ GetTableProperties(&props, meta); // may open the file if it's not
1574
+ if (!s.ok()) {
1575
+ return s;
1576
+ }
1577
+ UniqueId64x2 id;
1578
+ s = GetSstInternalUniqueId(props->db_id, props->db_session_id,
1579
+ props->orig_file_number, &id);
1580
+ if (!s.ok() || id != meta->unique_id) {
1581
+ std::ostringstream oss;
1582
+ oss << "SST #" << meta->fd.GetNumber() << " unique ID mismatch. ";
1583
+ oss << "Manifest: "
1584
+ << InternalUniqueIdToHumanString(&(meta->unique_id)) << ", ";
1585
+ if (s.ok()) {
1586
+ oss << "Table Properties: " << InternalUniqueIdToHumanString(&id);
1587
+ } else {
1588
+ oss << "Failed to get Table Properties: " << s.ToString();
1589
+ }
1590
+ return Status::Corruption("VersionSet", oss.str());
1591
+ }
1592
+ TEST_SYNC_POINT_CALLBACK("Version::VerifySstUniqueIds::Passed", &id);
1593
+ } else {
1594
+ TEST_SYNC_POINT_CALLBACK("Version::VerifySstUniqueIds::Skipped", meta);
1595
+ }
1596
+ }
1597
+ }
1598
+ return Status::OK();
1599
+ }
1600
+
1537
1601
  uint64_t VersionStorageInfo::GetEstimatedActiveKeys() const {
1538
1602
  // Estimation will be inaccurate when:
1539
1603
  // (1) there exist merge keys
@@ -2183,7 +2247,7 @@ void Version::MultiGet(const ReadOptions& read_options, MultiGetRange* range,
2183
2247
  &file_picker_range,
2184
2248
  &storage_info_.level_files_brief_, storage_info_.num_non_empty_levels_,
2185
2249
  &storage_info_.file_indexer_, user_comparator(), internal_comparator());
2186
- FdWithKeyRange* f = fp.GetNextFile();
2250
+ FdWithKeyRange* f = fp.GetNextFileInLevel();
2187
2251
  Status s;
2188
2252
  uint64_t num_index_read = 0;
2189
2253
  uint64_t num_filter_read = 0;
@@ -2193,164 +2257,92 @@ void Version::MultiGet(const ReadOptions& read_options, MultiGetRange* range,
2193
2257
  MultiGetRange keys_with_blobs_range(*range, range->begin(), range->end());
2194
2258
  // blob_file => [[blob_idx, it], ...]
2195
2259
  std::unordered_map<uint64_t, BlobReadRequests> blob_rqs;
2196
- int level = -1;
2197
-
2198
- while (f != nullptr) {
2199
- MultiGetRange file_range = fp.CurrentFileRange();
2200
- bool timer_enabled =
2201
- GetPerfLevel() >= PerfLevel::kEnableTimeExceptForMutex &&
2202
- get_perf_context()->per_level_perf_context_enabled;
2203
-
2204
- // Report MultiGet stats per level.
2205
- if (level >= 0 && level != (int)fp.GetHitFileLevel()) {
2206
- // Dump the stats if the search has moved to the next level and
2207
- // reset for next level.
2208
- RecordInHistogram(db_statistics_,
2209
- NUM_INDEX_AND_FILTER_BLOCKS_READ_PER_LEVEL,
2210
- num_index_read + num_filter_read);
2211
- RecordInHistogram(db_statistics_, NUM_DATA_BLOCKS_READ_PER_LEVEL,
2212
- num_data_read);
2213
- RecordInHistogram(db_statistics_, NUM_SST_READ_PER_LEVEL, num_sst_read);
2214
- num_filter_read = 0;
2215
- num_index_read = 0;
2216
- num_data_read = 0;
2217
- num_sst_read = 0;
2218
- level = fp.GetHitFileLevel();
2219
- }
2220
-
2221
- StopWatchNano timer(clock_, timer_enabled /* auto_start */);
2222
- s = table_cache_->MultiGet(
2223
- read_options, *internal_comparator(), *f->file_metadata, &file_range,
2224
- mutable_cf_options_.prefix_extractor,
2225
- cfd_->internal_stats()->GetFileReadHist(fp.GetHitFileLevel()),
2226
- IsFilterSkipped(static_cast<int>(fp.GetHitFileLevel()),
2227
- fp.IsHitFileLastInLevel()),
2228
- fp.GetHitFileLevel());
2229
- // TODO: examine the behavior for corrupted key
2230
- if (timer_enabled) {
2231
- PERF_COUNTER_BY_LEVEL_ADD(get_from_table_nanos, timer.ElapsedNanos(),
2232
- fp.GetHitFileLevel());
2233
- }
2234
- if (!s.ok()) {
2235
- // TODO: Set status for individual keys appropriately
2236
- for (auto iter = file_range.begin(); iter != file_range.end(); ++iter) {
2237
- *iter->s = s;
2238
- file_range.MarkKeyDone(iter);
2239
- }
2240
- return;
2241
- }
2242
- uint64_t batch_size = 0;
2243
- for (auto iter = file_range.begin(); s.ok() && iter != file_range.end();
2244
- ++iter) {
2245
- GetContext& get_context = *iter->get_context;
2246
- Status* status = iter->s;
2247
- // The Status in the KeyContext takes precedence over GetContext state
2248
- // Status may be an error if there were any IO errors in the table
2249
- // reader. We never expect Status to be NotFound(), as that is
2250
- // determined by get_context
2251
- assert(!status->IsNotFound());
2252
- if (!status->ok()) {
2253
- file_range.MarkKeyDone(iter);
2254
- continue;
2260
+ int prev_level = -1;
2261
+
2262
+ while (!fp.IsSearchEnded()) {
2263
+ // This will be set to true later if we actually look up in a file in L0.
2264
+ // For per level stats purposes, an L0 file is treated as a level
2265
+ bool dump_stats_for_l0_file = false;
2266
+
2267
+ // Avoid using the coroutine version if we're looking in a L0 file, since
2268
+ // L0 files won't be parallelized anyway. The regular synchronous version
2269
+ // is faster.
2270
+ if (!read_options.async_io || !using_coroutines() ||
2271
+ fp.GetHitFileLevel() == 0 || !fp.RemainingOverlapInLevel()) {
2272
+ if (f) {
2273
+ // Call MultiGetFromSST for looking up a single file
2274
+ s = MultiGetFromSST(read_options, fp.CurrentFileRange(),
2275
+ fp.GetHitFileLevel(), fp.IsHitFileLastInLevel(), f,
2276
+ blob_rqs, num_filter_read, num_index_read,
2277
+ num_data_read, num_sst_read);
2278
+ if (fp.GetHitFileLevel() == 0) {
2279
+ dump_stats_for_l0_file = true;
2280
+ }
2255
2281
  }
2256
-
2257
- if (get_context.sample()) {
2258
- sample_file_read_inc(f->file_metadata);
2282
+ if (s.ok()) {
2283
+ f = fp.GetNextFileInLevel();
2259
2284
  }
2260
- batch_size++;
2261
- num_index_read += get_context.get_context_stats_.num_index_read;
2262
- num_filter_read += get_context.get_context_stats_.num_filter_read;
2263
- num_data_read += get_context.get_context_stats_.num_data_read;
2264
- num_sst_read += get_context.get_context_stats_.num_sst_read;
2265
- // Reset these stats since they're specific to a level
2266
- get_context.get_context_stats_.num_index_read = 0;
2267
- get_context.get_context_stats_.num_filter_read = 0;
2268
- get_context.get_context_stats_.num_data_read = 0;
2269
- get_context.get_context_stats_.num_sst_read = 0;
2270
-
2271
- // report the counters before returning
2272
- if (get_context.State() != GetContext::kNotFound &&
2273
- get_context.State() != GetContext::kMerge &&
2274
- db_statistics_ != nullptr) {
2275
- get_context.ReportCounters();
2276
- } else {
2277
- if (iter->max_covering_tombstone_seq > 0) {
2278
- // The remaining files we look at will only contain covered keys, so
2279
- // we stop here for this key
2280
- file_picker_range.SkipKey(iter);
2285
+ #if USE_COROUTINES
2286
+ } else {
2287
+ std::vector<folly::coro::Task<Status>> mget_tasks;
2288
+ while (f != nullptr) {
2289
+ mget_tasks.emplace_back(MultiGetFromSSTCoroutine(
2290
+ read_options, fp.CurrentFileRange(), fp.GetHitFileLevel(),
2291
+ fp.IsHitFileLastInLevel(), f, blob_rqs, num_filter_read,
2292
+ num_index_read, num_data_read, num_sst_read));
2293
+ if (fp.KeyMaySpanNextFile()) {
2294
+ break;
2281
2295
  }
2296
+ f = fp.GetNextFileInLevel();
2282
2297
  }
2283
- switch (get_context.State()) {
2284
- case GetContext::kNotFound:
2285
- // Keep searching in other files
2286
- break;
2287
- case GetContext::kMerge:
2288
- // TODO: update per-level perfcontext user_key_return_count for kMerge
2289
- break;
2290
- case GetContext::kFound:
2291
- if (fp.GetHitFileLevel() == 0) {
2292
- RecordTick(db_statistics_, GET_HIT_L0);
2293
- } else if (fp.GetHitFileLevel() == 1) {
2294
- RecordTick(db_statistics_, GET_HIT_L1);
2295
- } else if (fp.GetHitFileLevel() >= 2) {
2296
- RecordTick(db_statistics_, GET_HIT_L2_AND_UP);
2298
+ if (mget_tasks.size() > 0) {
2299
+ // Collect all results so far
2300
+ std::vector<Status> statuses = folly::coro::blockingWait(
2301
+ folly::coro::collectAllRange(std::move(mget_tasks))
2302
+ .scheduleOn(&range->context()->executor()));
2303
+ for (Status stat : statuses) {
2304
+ if (!stat.ok()) {
2305
+ s = stat;
2297
2306
  }
2307
+ }
2298
2308
 
2299
- PERF_COUNTER_BY_LEVEL_ADD(user_key_return_count, 1,
2300
- fp.GetHitFileLevel());
2301
-
2302
- file_range.MarkKeyDone(iter);
2303
-
2304
- if (iter->is_blob_index) {
2305
- if (iter->value) {
2306
- TEST_SYNC_POINT_CALLBACK("Version::MultiGet::TamperWithBlobIndex",
2307
- &(*iter));
2308
-
2309
- const Slice& blob_index_slice = *(iter->value);
2310
- BlobIndex blob_index;
2311
- Status tmp_s = blob_index.DecodeFrom(blob_index_slice);
2312
- if (tmp_s.ok()) {
2313
- const uint64_t blob_file_num = blob_index.file_number();
2314
- blob_rqs[blob_file_num].emplace_back(
2315
- std::make_pair(blob_index, std::cref(*iter)));
2316
- } else {
2317
- *(iter->s) = tmp_s;
2318
- }
2319
- }
2320
- } else {
2321
- file_range.AddValueSize(iter->value->size());
2322
- if (file_range.GetValueSize() >
2323
- read_options.value_size_soft_limit) {
2324
- s = Status::Aborted();
2325
- break;
2326
- }
2327
- }
2328
- continue;
2329
- case GetContext::kDeleted:
2330
- // Use empty error message for speed
2331
- *status = Status::NotFound();
2332
- file_range.MarkKeyDone(iter);
2333
- continue;
2334
- case GetContext::kCorrupt:
2335
- *status =
2336
- Status::Corruption("corrupted key for ", iter->lkey->user_key());
2337
- file_range.MarkKeyDone(iter);
2338
- continue;
2339
- case GetContext::kUnexpectedBlobIndex:
2340
- ROCKS_LOG_ERROR(info_log_, "Encounter unexpected blob index.");
2341
- *status = Status::NotSupported(
2342
- "Encounter unexpected blob index. Please open DB with "
2343
- "ROCKSDB_NAMESPACE::blob_db::BlobDB instead.");
2344
- file_range.MarkKeyDone(iter);
2345
- continue;
2309
+ if (s.ok() && fp.KeyMaySpanNextFile()) {
2310
+ f = fp.GetNextFileInLevel();
2311
+ }
2346
2312
  }
2313
+ #endif // USE_COROUTINES
2347
2314
  }
2348
-
2349
- RecordInHistogram(db_statistics_, SST_BATCH_SIZE, batch_size);
2315
+ // If bad status or we found final result for all the keys
2350
2316
  if (!s.ok() || file_picker_range.empty()) {
2351
2317
  break;
2352
2318
  }
2353
- f = fp.GetNextFile();
2319
+ if (!f) {
2320
+ // Reached the end of this level. Prepare the next level
2321
+ fp.PrepareNextLevelForSearch();
2322
+ if (!fp.IsSearchEnded()) {
2323
+ // Its possible there is no overlap on this level and f is nullptr
2324
+ f = fp.GetNextFileInLevel();
2325
+ }
2326
+ if (dump_stats_for_l0_file ||
2327
+ (prev_level != 0 && prev_level != (int)fp.GetHitFileLevel())) {
2328
+ // Dump the stats if the search has moved to the next level and
2329
+ // reset for next level.
2330
+ if (num_sst_read || (num_filter_read + num_index_read)) {
2331
+ RecordInHistogram(db_statistics_,
2332
+ NUM_INDEX_AND_FILTER_BLOCKS_READ_PER_LEVEL,
2333
+ num_index_read + num_filter_read);
2334
+ RecordInHistogram(db_statistics_, NUM_DATA_BLOCKS_READ_PER_LEVEL,
2335
+ num_data_read);
2336
+ RecordInHistogram(db_statistics_, NUM_SST_READ_PER_LEVEL,
2337
+ num_sst_read);
2338
+ }
2339
+ num_filter_read = 0;
2340
+ num_index_read = 0;
2341
+ num_data_read = 0;
2342
+ num_sst_read = 0;
2343
+ }
2344
+ prev_level = fp.GetHitFileLevel();
2345
+ }
2354
2346
  }
2355
2347
 
2356
2348
  // Dump stats for most recent level
@@ -3986,7 +3978,7 @@ std::string Version::DebugString(bool hex, bool print_stats) const {
3986
3978
  }
3987
3979
  if (print_stats) {
3988
3980
  r.append("(");
3989
- r.append(ToString(
3981
+ r.append(std::to_string(
3990
3982
  files[i]->stats.num_reads_sampled.load(std::memory_order_relaxed)));
3991
3983
  r.append(")");
3992
3984
  }
@@ -5492,13 +5484,14 @@ Status VersionSet::WriteCurrentStateToManifest(
5492
5484
  for (const auto& f : level_files) {
5493
5485
  assert(f);
5494
5486
 
5495
- edit.AddFile(
5496
- level, f->fd.GetNumber(), f->fd.GetPathId(), f->fd.GetFileSize(),
5497
- f->smallest, f->largest, f->fd.smallest_seqno,
5498
- f->fd.largest_seqno, f->marked_for_compaction, f->temperature,
5499
- f->oldest_blob_file_number, f->oldest_ancester_time,
5500
- f->file_creation_time, f->file_checksum,
5501
- f->file_checksum_func_name, f->min_timestamp, f->max_timestamp);
5487
+ edit.AddFile(level, f->fd.GetNumber(), f->fd.GetPathId(),
5488
+ f->fd.GetFileSize(), f->smallest, f->largest,
5489
+ f->fd.smallest_seqno, f->fd.largest_seqno,
5490
+ f->marked_for_compaction, f->temperature,
5491
+ f->oldest_blob_file_number, f->oldest_ancester_time,
5492
+ f->file_creation_time, f->file_checksum,
5493
+ f->file_checksum_func_name, f->min_timestamp,
5494
+ f->max_timestamp, f->unique_id);
5502
5495
  }
5503
5496
  }
5504
5497
 
@@ -54,6 +54,7 @@
54
54
  #include "table/get_context.h"
55
55
  #include "table/multiget_context.h"
56
56
  #include "trace_replay/block_cache_tracer.h"
57
+ #include "util/coro_utils.h"
57
58
  #include "util/hash_containers.h"
58
59
 
59
60
  namespace ROCKSDB_NAMESPACE {
@@ -851,6 +852,8 @@ class Version {
851
852
 
852
853
  const MutableCFOptions& GetMutableCFOptions() { return mutable_cf_options_; }
853
854
 
855
+ Status VerifySstUniqueIds() const;
856
+
854
857
  private:
855
858
  Env* env_;
856
859
  SystemClock* clock_;
@@ -882,6 +885,14 @@ class Version {
882
885
  // This accumulated stats will be used in compaction.
883
886
  void UpdateAccumulatedStats();
884
887
 
888
+ DECLARE_SYNC_AND_ASYNC(
889
+ /* ret_type */ Status, /* func_name */ MultiGetFromSST,
890
+ const ReadOptions& read_options, MultiGetRange file_range,
891
+ int hit_file_level, bool is_hit_file_last_in_level, FdWithKeyRange* f,
892
+ std::unordered_map<uint64_t, BlobReadRequests>& blob_rqs,
893
+ uint64_t& num_filter_read, uint64_t& num_index_read,
894
+ uint64_t& num_data_read, uint64_t& num_sst_read);
895
+
885
896
  ColumnFamilyData* cfd_; // ColumnFamilyData to which this Version belongs
886
897
  Logger* info_log_;
887
898
  Statistics* db_statistics_;
@@ -1213,7 +1224,7 @@ class VersionSet {
1213
1224
  // new_log_number_for_empty_cf.
1214
1225
  uint64_t PreComputeMinLogNumberWithUnflushedData(
1215
1226
  uint64_t new_log_number_for_empty_cf) const {
1216
- uint64_t min_log_num = port::kMaxUint64;
1227
+ uint64_t min_log_num = std::numeric_limits<uint64_t>::max();
1217
1228
  for (auto cfd : *column_family_set_) {
1218
1229
  // It's safe to ignore dropped column families here:
1219
1230
  // cfd->IsDropped() becomes true after the drop is persisted in MANIFEST.
@@ -1229,7 +1240,7 @@ class VersionSet {
1229
1240
  // file, except data from `cfd_to_skip`.
1230
1241
  uint64_t PreComputeMinLogNumberWithUnflushedData(
1231
1242
  const ColumnFamilyData* cfd_to_skip) const {
1232
- uint64_t min_log_num = port::kMaxUint64;
1243
+ uint64_t min_log_num = std::numeric_limits<uint64_t>::max();
1233
1244
  for (auto cfd : *column_family_set_) {
1234
1245
  if (cfd == cfd_to_skip) {
1235
1246
  continue;
@@ -1246,7 +1257,7 @@ class VersionSet {
1246
1257
  // file, except data from `cfds_to_skip`.
1247
1258
  uint64_t PreComputeMinLogNumberWithUnflushedData(
1248
1259
  const std::unordered_set<const ColumnFamilyData*>& cfds_to_skip) const {
1249
- uint64_t min_log_num = port::kMaxUint64;
1260
+ uint64_t min_log_num = std::numeric_limits<uint64_t>::max();
1250
1261
  for (auto cfd : *column_family_set_) {
1251
1262
  if (cfds_to_skip.count(cfd)) {
1252
1263
  continue;