@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,10 +38,10 @@ class DBTest2 : public DBTestBase {
38
38
  #ifndef ROCKSDB_LITE
39
39
  uint64_t GetSstSizeHelper(Temperature temperature) {
40
40
  std::string prop;
41
- EXPECT_TRUE(
42
- dbfull()->GetProperty(DB::Properties::kLiveSstFilesSizeAtTemperature +
43
- ToString(static_cast<uint8_t>(temperature)),
44
- &prop));
41
+ EXPECT_TRUE(dbfull()->GetProperty(
42
+ DB::Properties::kLiveSstFilesSizeAtTemperature +
43
+ std::to_string(static_cast<uint8_t>(temperature)),
44
+ &prop));
45
45
  return static_cast<uint64_t>(std::atoi(prop.c_str()));
46
46
  }
47
47
  #endif // ROCKSDB_LITE
@@ -1296,6 +1296,7 @@ TEST_F(DBTest2, PresetCompressionDict) {
1296
1296
  enum DictionaryTypes : int {
1297
1297
  kWithoutDict,
1298
1298
  kWithDict,
1299
+ kWithZSTDfinalizeDict,
1299
1300
  kWithZSTDTrainedDict,
1300
1301
  kDictEnd,
1301
1302
  };
@@ -1304,6 +1305,7 @@ TEST_F(DBTest2, PresetCompressionDict) {
1304
1305
  options.compression = compression_type;
1305
1306
  size_t bytes_without_dict = 0;
1306
1307
  size_t bytes_with_dict = 0;
1308
+ size_t bytes_with_zstd_finalize_dict = 0;
1307
1309
  size_t bytes_with_zstd_trained_dict = 0;
1308
1310
  for (int i = kWithoutDict; i < kDictEnd; i++) {
1309
1311
  // First iteration: compress without preset dictionary
@@ -1323,12 +1325,21 @@ TEST_F(DBTest2, PresetCompressionDict) {
1323
1325
  options.compression_opts.max_dict_bytes = kBlockSizeBytes;
1324
1326
  options.compression_opts.zstd_max_train_bytes = 0;
1325
1327
  break;
1328
+ case kWithZSTDfinalizeDict:
1329
+ if (compression_type != kZSTD) {
1330
+ continue;
1331
+ }
1332
+ options.compression_opts.max_dict_bytes = kBlockSizeBytes;
1333
+ options.compression_opts.zstd_max_train_bytes = kL0FileBytes;
1334
+ options.compression_opts.use_zstd_dict_trainer = false;
1335
+ break;
1326
1336
  case kWithZSTDTrainedDict:
1327
1337
  if (compression_type != kZSTD) {
1328
1338
  continue;
1329
1339
  }
1330
1340
  options.compression_opts.max_dict_bytes = kBlockSizeBytes;
1331
1341
  options.compression_opts.zstd_max_train_bytes = kL0FileBytes;
1342
+ options.compression_opts.use_zstd_dict_trainer = true;
1332
1343
  break;
1333
1344
  default:
1334
1345
  assert(false);
@@ -1365,6 +1376,8 @@ TEST_F(DBTest2, PresetCompressionDict) {
1365
1376
  bytes_without_dict = total_sst_bytes;
1366
1377
  } else if (i == kWithDict) {
1367
1378
  bytes_with_dict = total_sst_bytes;
1379
+ } else if (i == kWithZSTDfinalizeDict) {
1380
+ bytes_with_zstd_finalize_dict = total_sst_bytes;
1368
1381
  } else if (i == kWithZSTDTrainedDict) {
1369
1382
  bytes_with_zstd_trained_dict = total_sst_bytes;
1370
1383
  }
@@ -1375,6 +1388,13 @@ TEST_F(DBTest2, PresetCompressionDict) {
1375
1388
  }
1376
1389
  if (i == kWithDict) {
1377
1390
  ASSERT_GT(bytes_without_dict, bytes_with_dict);
1391
+ } else if (i == kWithZSTDTrainedDict) {
1392
+ // In zstd compression, it is sometimes possible that using a finalized
1393
+ // dictionary does not get as good a compression ratio as raw content
1394
+ // dictionary. But using a dictionary should always get better
1395
+ // compression ratio than not using one.
1396
+ ASSERT_TRUE(bytes_with_dict > bytes_with_zstd_finalize_dict ||
1397
+ bytes_without_dict > bytes_with_zstd_finalize_dict);
1378
1398
  } else if (i == kWithZSTDTrainedDict) {
1379
1399
  // In zstd compression, it is sometimes possible that using a trained
1380
1400
  // dictionary does not get as good a compression ratio as without
@@ -1694,9 +1714,9 @@ class CompactionCompressionListener : public EventListener {
1694
1714
  int bottommost_level = 0;
1695
1715
  for (int level = 0; level < db->NumberLevels(); level++) {
1696
1716
  std::string files_at_level;
1697
- ASSERT_TRUE(db->GetProperty(
1698
- "rocksdb.num-files-at-level" + ROCKSDB_NAMESPACE::ToString(level),
1699
- &files_at_level));
1717
+ ASSERT_TRUE(
1718
+ db->GetProperty("rocksdb.num-files-at-level" + std::to_string(level),
1719
+ &files_at_level));
1700
1720
  if (files_at_level != "0") {
1701
1721
  bottommost_level = level;
1702
1722
  }
@@ -2492,14 +2512,14 @@ TEST_F(DBTest2, TestPerfContextIterCpuTime) {
2492
2512
 
2493
2513
  const size_t kNumEntries = 10;
2494
2514
  for (size_t i = 0; i < kNumEntries; ++i) {
2495
- ASSERT_OK(Put("k" + ToString(i), "v" + ToString(i)));
2515
+ ASSERT_OK(Put("k" + std::to_string(i), "v" + std::to_string(i)));
2496
2516
  }
2497
2517
  ASSERT_OK(Flush());
2498
2518
  for (size_t i = 0; i < kNumEntries; ++i) {
2499
- ASSERT_EQ("v" + ToString(i), Get("k" + ToString(i)));
2519
+ ASSERT_EQ("v" + std::to_string(i), Get("k" + std::to_string(i)));
2500
2520
  }
2501
- std::string last_key = "k" + ToString(kNumEntries - 1);
2502
- std::string last_value = "v" + ToString(kNumEntries - 1);
2521
+ std::string last_key = "k" + std::to_string(kNumEntries - 1);
2522
+ std::string last_value = "v" + std::to_string(kNumEntries - 1);
2503
2523
  env_->now_cpu_count_.store(0);
2504
2524
  env_->SetMockSleep();
2505
2525
 
@@ -3987,12 +4007,14 @@ TEST_F(DBTest2, RateLimitedCompactionReads) {
3987
4007
 
3988
4008
  // should be slightly above 512KB due to non-data blocks read. Arbitrarily
3989
4009
  // chose 1MB as the upper bound on the total bytes read.
3990
- size_t rate_limited_bytes =
3991
- options.rate_limiter->GetTotalBytesThrough(Env::IO_TOTAL);
3992
- // There must be no charges at non-`IO_LOW` priorities.
4010
+ size_t rate_limited_bytes = static_cast<size_t>(
4011
+ options.rate_limiter->GetTotalBytesThrough(Env::IO_TOTAL));
4012
+ // The charges can exist for `IO_LOW` and `IO_USER` priorities.
4013
+ size_t rate_limited_bytes_by_pri =
4014
+ options.rate_limiter->GetTotalBytesThrough(Env::IO_LOW) +
4015
+ options.rate_limiter->GetTotalBytesThrough(Env::IO_USER);
3993
4016
  ASSERT_EQ(rate_limited_bytes,
3994
- static_cast<size_t>(
3995
- options.rate_limiter->GetTotalBytesThrough(Env::IO_LOW)));
4017
+ static_cast<size_t>(rate_limited_bytes_by_pri));
3996
4018
  // Include the explicit prefetch of the footer in direct I/O case.
3997
4019
  size_t direct_io_extra = use_direct_io ? 512 * 1024 : 0;
3998
4020
  ASSERT_GE(
@@ -4010,9 +4032,11 @@ TEST_F(DBTest2, RateLimitedCompactionReads) {
4010
4032
  }
4011
4033
  delete iter;
4012
4034
  // bytes read for user iterator shouldn't count against the rate limit.
4035
+ rate_limited_bytes_by_pri =
4036
+ options.rate_limiter->GetTotalBytesThrough(Env::IO_LOW) +
4037
+ options.rate_limiter->GetTotalBytesThrough(Env::IO_USER);
4013
4038
  ASSERT_EQ(rate_limited_bytes,
4014
- static_cast<size_t>(
4015
- options.rate_limiter->GetTotalBytesThrough(Env::IO_LOW)));
4039
+ static_cast<size_t>(rate_limited_bytes_by_pri));
4016
4040
  }
4017
4041
  }
4018
4042
  }
@@ -5553,7 +5577,7 @@ TEST_F(DBTest2, MultiDBParallelOpenTest) {
5553
5577
  Options options = CurrentOptions();
5554
5578
  std::vector<std::string> dbnames;
5555
5579
  for (int i = 0; i < kNumDbs; ++i) {
5556
- dbnames.emplace_back(test::PerThreadDBPath(env_, "db" + ToString(i)));
5580
+ dbnames.emplace_back(test::PerThreadDBPath(env_, "db" + std::to_string(i)));
5557
5581
  ASSERT_OK(DestroyDB(dbnames.back(), options));
5558
5582
  }
5559
5583
 
@@ -6305,115 +6329,118 @@ TEST_F(DBTest2, BlockBasedTablePrefixGetIndexNotFound) {
6305
6329
 
6306
6330
  #ifndef ROCKSDB_LITE
6307
6331
  TEST_F(DBTest2, AutoPrefixMode1) {
6308
- // create a DB with block prefix index
6309
- BlockBasedTableOptions table_options;
6310
- Options options = CurrentOptions();
6311
- table_options.filter_policy.reset(NewBloomFilterPolicy(10, false));
6312
- options.table_factory.reset(NewBlockBasedTableFactory(table_options));
6313
- options.prefix_extractor.reset(NewFixedPrefixTransform(1));
6314
- options.statistics = CreateDBStatistics();
6315
-
6316
- Reopen(options);
6317
-
6318
- Random rnd(301);
6319
- std::string large_value = rnd.RandomString(500);
6320
-
6321
- ASSERT_OK(Put("a1", large_value));
6322
- ASSERT_OK(Put("x1", large_value));
6323
- ASSERT_OK(Put("y1", large_value));
6324
- ASSERT_OK(Flush());
6325
-
6326
- ReadOptions ro;
6327
- ro.total_order_seek = false;
6328
- ro.auto_prefix_mode = true;
6329
- {
6330
- std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6331
- iterator->Seek("b1");
6332
- ASSERT_TRUE(iterator->Valid());
6333
- ASSERT_EQ("x1", iterator->key().ToString());
6334
- ASSERT_EQ(0, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6335
- ASSERT_OK(iterator->status());
6336
- }
6332
+ do {
6333
+ // create a DB with block prefix index
6334
+ Options options = CurrentOptions();
6335
+ BlockBasedTableOptions table_options =
6336
+ *options.table_factory->GetOptions<BlockBasedTableOptions>();
6337
+ table_options.filter_policy.reset(NewBloomFilterPolicy(10, false));
6338
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
6339
+ options.prefix_extractor.reset(NewFixedPrefixTransform(1));
6340
+ options.statistics = CreateDBStatistics();
6337
6341
 
6338
- std::string ub_str = "b9";
6339
- Slice ub(ub_str);
6340
- ro.iterate_upper_bound = &ub;
6342
+ Reopen(options);
6341
6343
 
6342
- {
6343
- std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6344
- iterator->Seek("b1");
6345
- ASSERT_FALSE(iterator->Valid());
6346
- ASSERT_EQ(1, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6347
- ASSERT_OK(iterator->status());
6348
- }
6344
+ Random rnd(301);
6345
+ std::string large_value = rnd.RandomString(500);
6349
6346
 
6350
- ub_str = "z";
6351
- ub = Slice(ub_str);
6352
- {
6353
- std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6354
- iterator->Seek("b1");
6355
- ASSERT_TRUE(iterator->Valid());
6356
- ASSERT_EQ("x1", iterator->key().ToString());
6357
- ASSERT_EQ(1, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6358
- ASSERT_OK(iterator->status());
6359
- }
6347
+ ASSERT_OK(Put("a1", large_value));
6348
+ ASSERT_OK(Put("x1", large_value));
6349
+ ASSERT_OK(Put("y1", large_value));
6350
+ ASSERT_OK(Flush());
6360
6351
 
6361
- ub_str = "c";
6362
- ub = Slice(ub_str);
6363
- {
6364
- std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6365
- iterator->Seek("b1");
6366
- ASSERT_FALSE(iterator->Valid());
6367
- ASSERT_EQ(2, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6368
- ASSERT_OK(iterator->status());
6369
- }
6352
+ ReadOptions ro;
6353
+ ro.total_order_seek = false;
6354
+ ro.auto_prefix_mode = true;
6355
+ {
6356
+ std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6357
+ iterator->Seek("b1");
6358
+ ASSERT_TRUE(iterator->Valid());
6359
+ ASSERT_EQ("x1", iterator->key().ToString());
6360
+ ASSERT_EQ(0, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6361
+ ASSERT_OK(iterator->status());
6362
+ }
6370
6363
 
6371
- // The same queries without recreating iterator
6372
- {
6373
- ub_str = "b9";
6374
- ub = Slice(ub_str);
6364
+ std::string ub_str = "b9";
6365
+ Slice ub(ub_str);
6375
6366
  ro.iterate_upper_bound = &ub;
6376
6367
 
6377
- std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6378
- iterator->Seek("b1");
6379
- ASSERT_FALSE(iterator->Valid());
6380
- ASSERT_EQ(3, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6381
- ASSERT_OK(iterator->status());
6368
+ {
6369
+ std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6370
+ iterator->Seek("b1");
6371
+ ASSERT_FALSE(iterator->Valid());
6372
+ ASSERT_EQ(1, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6373
+ ASSERT_OK(iterator->status());
6374
+ }
6382
6375
 
6383
6376
  ub_str = "z";
6384
6377
  ub = Slice(ub_str);
6385
-
6386
- iterator->Seek("b1");
6387
- ASSERT_TRUE(iterator->Valid());
6388
- ASSERT_EQ("x1", iterator->key().ToString());
6389
- ASSERT_EQ(3, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6378
+ {
6379
+ std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6380
+ iterator->Seek("b1");
6381
+ ASSERT_TRUE(iterator->Valid());
6382
+ ASSERT_EQ("x1", iterator->key().ToString());
6383
+ ASSERT_EQ(1, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6384
+ ASSERT_OK(iterator->status());
6385
+ }
6390
6386
 
6391
6387
  ub_str = "c";
6392
6388
  ub = Slice(ub_str);
6389
+ {
6390
+ std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6391
+ iterator->Seek("b1");
6392
+ ASSERT_FALSE(iterator->Valid());
6393
+ ASSERT_EQ(2, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6394
+ ASSERT_OK(iterator->status());
6395
+ }
6393
6396
 
6394
- iterator->Seek("b1");
6395
- ASSERT_FALSE(iterator->Valid());
6396
- ASSERT_EQ(4, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6397
+ // The same queries without recreating iterator
6398
+ {
6399
+ ub_str = "b9";
6400
+ ub = Slice(ub_str);
6401
+ ro.iterate_upper_bound = &ub;
6397
6402
 
6398
- ub_str = "b9";
6399
- ub = Slice(ub_str);
6400
- ro.iterate_upper_bound = &ub;
6401
- iterator->SeekForPrev("b1");
6402
- ASSERT_TRUE(iterator->Valid());
6403
- ASSERT_EQ("a1", iterator->key().ToString());
6404
- ASSERT_EQ(4, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6403
+ std::unique_ptr<Iterator> iterator(db_->NewIterator(ro));
6404
+ iterator->Seek("b1");
6405
+ ASSERT_FALSE(iterator->Valid());
6406
+ ASSERT_EQ(3, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6407
+ ASSERT_OK(iterator->status());
6405
6408
 
6406
- ub_str = "zz";
6407
- ub = Slice(ub_str);
6408
- ro.iterate_upper_bound = &ub;
6409
- iterator->SeekToLast();
6410
- ASSERT_TRUE(iterator->Valid());
6411
- ASSERT_EQ("y1", iterator->key().ToString());
6409
+ ub_str = "z";
6410
+ ub = Slice(ub_str);
6412
6411
 
6413
- iterator->SeekToFirst();
6414
- ASSERT_TRUE(iterator->Valid());
6415
- ASSERT_EQ("a1", iterator->key().ToString());
6416
- }
6412
+ iterator->Seek("b1");
6413
+ ASSERT_TRUE(iterator->Valid());
6414
+ ASSERT_EQ("x1", iterator->key().ToString());
6415
+ ASSERT_EQ(3, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6416
+
6417
+ ub_str = "c";
6418
+ ub = Slice(ub_str);
6419
+
6420
+ iterator->Seek("b1");
6421
+ ASSERT_FALSE(iterator->Valid());
6422
+ ASSERT_EQ(4, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6423
+
6424
+ ub_str = "b9";
6425
+ ub = Slice(ub_str);
6426
+ ro.iterate_upper_bound = &ub;
6427
+ iterator->SeekForPrev("b1");
6428
+ ASSERT_TRUE(iterator->Valid());
6429
+ ASSERT_EQ("a1", iterator->key().ToString());
6430
+ ASSERT_EQ(4, TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED));
6431
+
6432
+ ub_str = "zz";
6433
+ ub = Slice(ub_str);
6434
+ ro.iterate_upper_bound = &ub;
6435
+ iterator->SeekToLast();
6436
+ ASSERT_TRUE(iterator->Valid());
6437
+ ASSERT_EQ("y1", iterator->key().ToString());
6438
+
6439
+ iterator->SeekToFirst();
6440
+ ASSERT_TRUE(iterator->Valid());
6441
+ ASSERT_EQ("a1", iterator->key().ToString());
6442
+ }
6443
+ } while (ChangeOptions(kSkipPlainTable));
6417
6444
  }
6418
6445
 
6419
6446
  class RenameCurrentTest : public DBTestBase,
@@ -7145,6 +7172,112 @@ TEST_F(DBTest2, RenameDirectory) {
7145
7172
  dbname_ = old_dbname;
7146
7173
  }
7147
7174
 
7175
+ TEST_F(DBTest2, SstUniqueIdVerifyBackwardCompatible) {
7176
+ const int kNumSst = 3;
7177
+ const int kLevel0Trigger = 4;
7178
+ auto options = CurrentOptions();
7179
+ options.level0_file_num_compaction_trigger = kLevel0Trigger;
7180
+ options.statistics = CreateDBStatistics();
7181
+
7182
+ // Existing manifest doesn't have unique id
7183
+ SyncPoint::GetInstance()->SetCallBack(
7184
+ "VersionEdit::EncodeTo:UniqueId", [&](void* arg) {
7185
+ auto unique_id = static_cast<UniqueId64x2*>(arg);
7186
+ // remove id before writing it to manifest
7187
+ (*unique_id)[0] = 0;
7188
+ (*unique_id)[1] = 0;
7189
+ });
7190
+ std::atomic_int skipped = 0;
7191
+ SyncPoint::GetInstance()->SetCallBack("Version::VerifySstUniqueIds::Skipped",
7192
+ [&](void* /*arg*/) { skipped++; });
7193
+ SyncPoint::GetInstance()->EnableProcessing();
7194
+
7195
+ // generate a few SSTs
7196
+ for (int i = 0; i < kNumSst; i++) {
7197
+ for (int j = 0; j < 100; j++) {
7198
+ ASSERT_OK(Put(Key(i * 10 + j), "value"));
7199
+ }
7200
+ ASSERT_OK(Flush());
7201
+ }
7202
+
7203
+ // Reopen without verification
7204
+ Reopen(options);
7205
+
7206
+ // Reopen with verification, but it's skipped because manifest doesn't have id
7207
+ options.verify_sst_unique_id_in_manifest = true;
7208
+ Reopen(options);
7209
+ ASSERT_EQ(skipped, kNumSst);
7210
+
7211
+ // test compaction generated Sst
7212
+ for (int i = kNumSst; i < kLevel0Trigger; i++) {
7213
+ for (int j = 0; j < 100; j++) {
7214
+ ASSERT_OK(Put(Key(i * 10 + j), "value"));
7215
+ }
7216
+ ASSERT_OK(Flush());
7217
+ }
7218
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
7219
+
7220
+ #ifndef ROCKSDB_LITE
7221
+ ASSERT_EQ("0,1", FilesPerLevel(0));
7222
+ #endif // ROCKSDB_LITE
7223
+
7224
+ // Reopen with verification should fail
7225
+ options.verify_sst_unique_id_in_manifest = true;
7226
+ skipped = 0;
7227
+ Reopen(options);
7228
+ ASSERT_EQ(skipped, 1);
7229
+ }
7230
+
7231
+ TEST_F(DBTest2, SstUniqueIdVerify) {
7232
+ const int kNumSst = 3;
7233
+ const int kLevel0Trigger = 4;
7234
+ auto options = CurrentOptions();
7235
+ options.level0_file_num_compaction_trigger = kLevel0Trigger;
7236
+
7237
+ SyncPoint::GetInstance()->SetCallBack(
7238
+ "PropertyBlockBuilder::AddTableProperty:Start", [&](void* props_vs) {
7239
+ auto props = static_cast<TableProperties*>(props_vs);
7240
+ // update table property session_id to a different one
7241
+ props->db_session_id = DBImpl::GenerateDbSessionId(nullptr);
7242
+ });
7243
+ SyncPoint::GetInstance()->EnableProcessing();
7244
+
7245
+ // generate a few SSTs
7246
+ for (int i = 0; i < kNumSst; i++) {
7247
+ for (int j = 0; j < 100; j++) {
7248
+ ASSERT_OK(Put(Key(i * 10 + j), "value"));
7249
+ }
7250
+ ASSERT_OK(Flush());
7251
+ }
7252
+
7253
+ // Reopen with verification should report corruption
7254
+ options.verify_sst_unique_id_in_manifest = true;
7255
+ auto s = TryReopen(options);
7256
+ ASSERT_TRUE(s.IsCorruption());
7257
+
7258
+ // Reopen without verification should be fine
7259
+ options.verify_sst_unique_id_in_manifest = false;
7260
+ Reopen(options);
7261
+
7262
+ // test compaction generated Sst
7263
+ for (int i = kNumSst; i < kLevel0Trigger; i++) {
7264
+ for (int j = 0; j < 100; j++) {
7265
+ ASSERT_OK(Put(Key(i * 10 + j), "value"));
7266
+ }
7267
+ ASSERT_OK(Flush());
7268
+ }
7269
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
7270
+
7271
+ #ifndef ROCKSDB_LITE
7272
+ ASSERT_EQ("0,1", FilesPerLevel(0));
7273
+ #endif // ROCKSDB_LITE
7274
+
7275
+ // Reopen with verification should fail
7276
+ options.verify_sst_unique_id_in_manifest = true;
7277
+ s = TryReopen(options);
7278
+ ASSERT_TRUE(s.IsCorruption());
7279
+ }
7280
+
7148
7281
  #ifndef ROCKSDB_LITE
7149
7282
  TEST_F(DBTest2, GetLatestSeqAndTsForKey) {
7150
7283
  Destroy(last_options_);
@@ -9,8 +9,11 @@
9
9
 
10
10
  #include "db/db_test_util.h"
11
11
 
12
+ #include "cache/cache_reservation_manager.h"
12
13
  #include "db/forward_iterator.h"
13
14
  #include "env/mock_env.h"
15
+ #include "port/lang.h"
16
+ #include "rocksdb/cache.h"
14
17
  #include "rocksdb/convenience.h"
15
18
  #include "rocksdb/env_encryption.h"
16
19
  #include "rocksdb/unique_id.h"
@@ -360,6 +363,17 @@ Options DBTestBase::GetOptions(
360
363
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearCallBack(
361
364
  "NewWritableFile:O_DIRECT");
362
365
  #endif
366
+ // kMustFreeHeapAllocations -> indicates ASAN build
367
+ if (kMustFreeHeapAllocations && !options_override.full_block_cache) {
368
+ // Detecting block cache use-after-free is normally difficult in unit
369
+ // tests, because as a cache, it tends to keep unreferenced entries in
370
+ // memory, and we normally want unit tests to take advantage of block
371
+ // cache for speed. However, we also want a strong chance of detecting
372
+ // block cache use-after-free in unit tests in ASAN builds, so for ASAN
373
+ // builds we use a trivially small block cache to which entries can be
374
+ // added but are immediately freed on no more references.
375
+ table_options.block_cache = NewLRUCache(/* too small */ 1);
376
+ }
363
377
 
364
378
  bool can_allow_mmap = IsMemoryMappedAccessSupported();
365
379
  switch (option_config) {
@@ -816,10 +830,12 @@ std::string DBTestBase::Get(int cf, const std::string& k,
816
830
  std::vector<std::string> DBTestBase::MultiGet(std::vector<int> cfs,
817
831
  const std::vector<std::string>& k,
818
832
  const Snapshot* snapshot,
819
- const bool batched) {
833
+ const bool batched,
834
+ const bool async) {
820
835
  ReadOptions options;
821
836
  options.verify_checksums = true;
822
837
  options.snapshot = snapshot;
838
+ options.async_io = async;
823
839
  std::vector<ColumnFamilyHandle*> handles;
824
840
  std::vector<Slice> keys;
825
841
  std::vector<std::string> result;
@@ -831,7 +847,7 @@ std::vector<std::string> DBTestBase::MultiGet(std::vector<int> cfs,
831
847
  std::vector<Status> s;
832
848
  if (!batched) {
833
849
  s = db_->MultiGet(options, handles, keys, &result);
834
- for (unsigned int i = 0; i < s.size(); ++i) {
850
+ for (size_t i = 0; i < s.size(); ++i) {
835
851
  if (s[i].IsNotFound()) {
836
852
  result[i] = "NOT_FOUND";
837
853
  } else if (!s[i].ok()) {
@@ -844,13 +860,16 @@ std::vector<std::string> DBTestBase::MultiGet(std::vector<int> cfs,
844
860
  s.resize(cfs.size());
845
861
  db_->MultiGet(options, cfs.size(), handles.data(), keys.data(),
846
862
  pin_values.data(), s.data());
847
- for (unsigned int i = 0; i < s.size(); ++i) {
863
+ for (size_t i = 0; i < s.size(); ++i) {
848
864
  if (s[i].IsNotFound()) {
849
865
  result[i] = "NOT_FOUND";
850
866
  } else if (!s[i].ok()) {
851
867
  result[i] = s[i].ToString();
852
868
  } else {
853
869
  result[i].assign(pin_values[i].data(), pin_values[i].size());
870
+ // Increase likelihood of detecting potential use-after-free bugs with
871
+ // PinnableSlices tracking the same resource
872
+ pin_values[i].Reset();
854
873
  }
855
874
  }
856
875
  }
@@ -858,28 +877,32 @@ std::vector<std::string> DBTestBase::MultiGet(std::vector<int> cfs,
858
877
  }
859
878
 
860
879
  std::vector<std::string> DBTestBase::MultiGet(const std::vector<std::string>& k,
861
- const Snapshot* snapshot) {
880
+ const Snapshot* snapshot,
881
+ const bool async) {
862
882
  ReadOptions options;
863
883
  options.verify_checksums = true;
864
884
  options.snapshot = snapshot;
885
+ options.async_io = async;
865
886
  std::vector<Slice> keys;
866
- std::vector<std::string> result;
887
+ std::vector<std::string> result(k.size());
867
888
  std::vector<Status> statuses(k.size());
868
889
  std::vector<PinnableSlice> pin_values(k.size());
869
890
 
870
- for (unsigned int i = 0; i < k.size(); ++i) {
891
+ for (size_t i = 0; i < k.size(); ++i) {
871
892
  keys.push_back(k[i]);
872
893
  }
873
894
  db_->MultiGet(options, dbfull()->DefaultColumnFamily(), keys.size(),
874
895
  keys.data(), pin_values.data(), statuses.data());
875
- result.resize(k.size());
876
- for (auto iter = result.begin(); iter != result.end(); ++iter) {
877
- iter->assign(pin_values[iter - result.begin()].data(),
878
- pin_values[iter - result.begin()].size());
879
- }
880
- for (unsigned int i = 0; i < statuses.size(); ++i) {
896
+ for (size_t i = 0; i < statuses.size(); ++i) {
881
897
  if (statuses[i].IsNotFound()) {
882
898
  result[i] = "NOT_FOUND";
899
+ } else if (!statuses[i].ok()) {
900
+ result[i] = statuses[i].ToString();
901
+ } else {
902
+ result[i].assign(pin_values[i].data(), pin_values[i].size());
903
+ // Increase likelihood of detecting potential use-after-free bugs with
904
+ // PinnableSlices tracking the same resource
905
+ pin_values[i].Reset();
883
906
  }
884
907
  }
885
908
  return result;
@@ -1068,12 +1091,12 @@ int DBTestBase::NumTableFilesAtLevel(int level, int cf) {
1068
1091
  std::string property;
1069
1092
  if (cf == 0) {
1070
1093
  // default cfd
1071
- EXPECT_TRUE(db_->GetProperty("rocksdb.num-files-at-level" + ToString(level),
1072
- &property));
1094
+ EXPECT_TRUE(db_->GetProperty(
1095
+ "rocksdb.num-files-at-level" + std::to_string(level), &property));
1073
1096
  } else {
1074
- EXPECT_TRUE(db_->GetProperty(handles_[cf],
1075
- "rocksdb.num-files-at-level" + ToString(level),
1076
- &property));
1097
+ EXPECT_TRUE(db_->GetProperty(
1098
+ handles_[cf], "rocksdb.num-files-at-level" + std::to_string(level),
1099
+ &property));
1077
1100
  }
1078
1101
  return atoi(property.c_str());
1079
1102
  }
@@ -1083,10 +1106,12 @@ double DBTestBase::CompressionRatioAtLevel(int level, int cf) {
1083
1106
  if (cf == 0) {
1084
1107
  // default cfd
1085
1108
  EXPECT_TRUE(db_->GetProperty(
1086
- "rocksdb.compression-ratio-at-level" + ToString(level), &property));
1109
+ "rocksdb.compression-ratio-at-level" + std::to_string(level),
1110
+ &property));
1087
1111
  } else {
1088
1112
  EXPECT_TRUE(db_->GetProperty(
1089
- handles_[cf], "rocksdb.compression-ratio-at-level" + ToString(level),
1113
+ handles_[cf],
1114
+ "rocksdb.compression-ratio-at-level" + std::to_string(level),
1090
1115
  &property));
1091
1116
  }
1092
1117
  return std::stod(property);
@@ -1663,4 +1688,61 @@ void VerifySstUniqueIds(const TablePropertiesCollection& props) {
1663
1688
  }
1664
1689
  }
1665
1690
 
1691
+ template <CacheEntryRole R>
1692
+ TargetCacheChargeTrackingCache<R>::TargetCacheChargeTrackingCache(
1693
+ std::shared_ptr<Cache> target)
1694
+ : CacheWrapper(std::move(target)),
1695
+ cur_cache_charge_(0),
1696
+ cache_charge_peak_(0),
1697
+ cache_charge_increment_(0),
1698
+ last_peak_tracked_(false),
1699
+ cache_charge_increments_sum_(0) {}
1700
+
1701
+ template <CacheEntryRole R>
1702
+ Status TargetCacheChargeTrackingCache<R>::Insert(
1703
+ const Slice& key, void* value, size_t charge,
1704
+ void (*deleter)(const Slice& key, void* value), Handle** handle,
1705
+ Priority priority) {
1706
+ Status s = target_->Insert(key, value, charge, deleter, handle, priority);
1707
+ if (deleter == kNoopDeleter) {
1708
+ if (last_peak_tracked_) {
1709
+ cache_charge_peak_ = 0;
1710
+ cache_charge_increment_ = 0;
1711
+ last_peak_tracked_ = false;
1712
+ }
1713
+ if (s.ok()) {
1714
+ cur_cache_charge_ += charge;
1715
+ }
1716
+ cache_charge_peak_ = std::max(cache_charge_peak_, cur_cache_charge_);
1717
+ cache_charge_increment_ += charge;
1718
+ }
1719
+
1720
+ return s;
1721
+ }
1722
+
1723
+ template <CacheEntryRole R>
1724
+ bool TargetCacheChargeTrackingCache<R>::Release(Handle* handle,
1725
+ bool erase_if_last_ref) {
1726
+ auto deleter = GetDeleter(handle);
1727
+ if (deleter == kNoopDeleter) {
1728
+ if (!last_peak_tracked_) {
1729
+ cache_charge_peaks_.push_back(cache_charge_peak_);
1730
+ cache_charge_increments_sum_ += cache_charge_increment_;
1731
+ last_peak_tracked_ = true;
1732
+ }
1733
+ cur_cache_charge_ -= GetCharge(handle);
1734
+ }
1735
+ bool is_successful = target_->Release(handle, erase_if_last_ref);
1736
+ return is_successful;
1737
+ }
1738
+
1739
+ template <CacheEntryRole R>
1740
+ const Cache::DeleterFn TargetCacheChargeTrackingCache<R>::kNoopDeleter =
1741
+ CacheReservationManagerImpl<R>::TEST_GetNoopDeleterForRole();
1742
+
1743
+ template class TargetCacheChargeTrackingCache<
1744
+ CacheEntryRole::kFilterConstruction>;
1745
+ template class TargetCacheChargeTrackingCache<
1746
+ CacheEntryRole::kBlockBasedTableReader>;
1747
+
1666
1748
  } // namespace ROCKSDB_NAMESPACE