@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
@@ -15,6 +15,7 @@
15
15
  #include "table/block_based/block.h"
16
16
  #include "table/block_based/block_builder.h"
17
17
  #include "util/random.h"
18
+ #include "utilities/merge_operators.h"
18
19
 
19
20
  namespace ROCKSDB_NAMESPACE {
20
21
 
@@ -32,7 +33,11 @@ class KeyGenerator {
32
33
  if (is_sequential_) {
33
34
  assert(next_sequential_key_ < max_key_);
34
35
  k = (next_sequential_key_ % max_key_) * MULTIPLIER + offset;
35
- next_sequential_key_++;
36
+ if (next_sequential_key_ + 1 == max_key_) {
37
+ next_sequential_key_ = 0;
38
+ } else {
39
+ next_sequential_key_++;
40
+ }
36
41
  } else {
37
42
  k = (rnd_->Next() % max_key_) * MULTIPLIER + offset;
38
43
  }
@@ -118,7 +123,8 @@ class KeyGenerator {
118
123
  }
119
124
  };
120
125
 
121
- static void SetupDB(benchmark::State& state, Options& options, DB** dpptr,
126
+ static void SetupDB(benchmark::State& state, Options& options,
127
+ std::unique_ptr<DB>* db,
122
128
  const std::string& test_name = "") {
123
129
  options.create_if_missing = true;
124
130
  auto env = Env::Default();
@@ -132,15 +138,17 @@ static void SetupDB(benchmark::State& state, Options& options, DB** dpptr,
132
138
  db_path + kFilePathSeparator + test_name + std::to_string(getpid());
133
139
  DestroyDB(db_name, options);
134
140
 
135
- s = DB::Open(options, db_name, dpptr);
141
+ DB* db_ptr = nullptr;
142
+ s = DB::Open(options, db_name, &db_ptr);
136
143
  if (!s.ok()) {
137
144
  state.SkipWithError(s.ToString().c_str());
138
145
  return;
139
146
  }
147
+ db->reset(db_ptr);
140
148
  }
141
149
 
142
- static void TeardownDB(benchmark::State& state, DB* db, const Options& options,
143
- KeyGenerator& kg) {
150
+ static void TeardownDB(benchmark::State& state, const std::unique_ptr<DB>& db,
151
+ const Options& options, KeyGenerator& kg) {
144
152
  char min_buff[256], max_buff[256];
145
153
  const Range r(kg.MinKey(min_buff), kg.MaxKey(max_buff));
146
154
  uint64_t size;
@@ -160,7 +168,7 @@ static void TeardownDB(benchmark::State& state, DB* db, const Options& options,
160
168
 
161
169
  static void DBOpen(benchmark::State& state) {
162
170
  // create DB
163
- DB* db = nullptr;
171
+ std::unique_ptr<DB> db;
164
172
  Options options;
165
173
  SetupDB(state, options, &db, "DBOpen");
166
174
 
@@ -172,12 +180,17 @@ static void DBOpen(benchmark::State& state) {
172
180
  auto rnd = Random(123);
173
181
 
174
182
  for (auto _ : state) {
175
- Status s = DB::Open(options, db_name, &db);
176
- if (!s.ok()) {
177
- state.SkipWithError(s.ToString().c_str());
183
+ {
184
+ DB* db_ptr = nullptr;
185
+ Status s = DB::Open(options, db_name, &db_ptr);
186
+ if (!s.ok()) {
187
+ state.SkipWithError(s.ToString().c_str());
188
+ }
189
+ db.reset(db_ptr);
178
190
  }
179
191
  state.PauseTiming();
180
192
  auto wo = WriteOptions();
193
+ Status s;
181
194
  for (int i = 0; i < 2; i++) {
182
195
  for (int j = 0; j < 100; j++) {
183
196
  s = db->Put(wo, rnd.RandomString(10), rnd.RandomString(100));
@@ -204,7 +217,7 @@ BENCHMARK(DBOpen)->Iterations(200); // specify iteration number as the db size
204
217
 
205
218
  static void DBClose(benchmark::State& state) {
206
219
  // create DB
207
- DB* db;
220
+ std::unique_ptr<DB> db;
208
221
  Options options;
209
222
  SetupDB(state, options, &db, "DBClose");
210
223
 
@@ -217,11 +230,16 @@ static void DBClose(benchmark::State& state) {
217
230
 
218
231
  for (auto _ : state) {
219
232
  state.PauseTiming();
220
- Status s = DB::Open(options, db_name, &db);
221
- if (!s.ok()) {
222
- state.SkipWithError(s.ToString().c_str());
233
+ {
234
+ DB* db_ptr = nullptr;
235
+ Status s = DB::Open(options, db_name, &db_ptr);
236
+ if (!s.ok()) {
237
+ state.SkipWithError(s.ToString().c_str());
238
+ }
239
+ db.reset(db_ptr);
223
240
  }
224
241
  auto wo = WriteOptions();
242
+ Status s;
225
243
  for (int i = 0; i < 2; i++) {
226
244
  for (int j = 0; j < 100; j++) {
227
245
  s = db->Put(wo, rnd.RandomString(10), rnd.RandomString(100));
@@ -255,7 +273,7 @@ static void DBPut(benchmark::State& state) {
255
273
  uint64_t key_num = max_data / per_key_size;
256
274
 
257
275
  // setup DB
258
- static DB* db = nullptr;
276
+ static std::unique_ptr<DB> db = nullptr;
259
277
  Options options;
260
278
  if (enable_statistics) {
261
279
  options.statistics = CreateDBStatistics();
@@ -284,7 +302,7 @@ static void DBPut(benchmark::State& state) {
284
302
  }
285
303
 
286
304
  if (state.thread_index() == 0) {
287
- auto db_full = static_cast_with_check<DBImpl>(db);
305
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
288
306
  Status s = db_full->WaitForCompact(true);
289
307
  if (!s.ok()) {
290
308
  state.SkipWithError(s.ToString().c_str());
@@ -332,7 +350,7 @@ static void ManualCompaction(benchmark::State& state) {
332
350
  uint64_t key_num = max_data / per_key_size;
333
351
 
334
352
  // setup DB
335
- static DB* db;
353
+ static std::unique_ptr<DB> db;
336
354
  Options options;
337
355
  if (enable_statistics) {
338
356
  options.statistics = CreateDBStatistics();
@@ -391,7 +409,7 @@ static void ManualCompaction(benchmark::State& state) {
391
409
  }
392
410
 
393
411
  if (state.thread_index() == 0) {
394
- auto db_full = static_cast_with_check<DBImpl>(db);
412
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
395
413
  s = db_full->WaitForCompact(true);
396
414
  if (!s.ok()) {
397
415
  state.SkipWithError(s.ToString().c_str());
@@ -453,7 +471,7 @@ static void ManualFlush(benchmark::State& state) {
453
471
  bool enable_statistics = true;
454
472
 
455
473
  // setup DB
456
- static DB* db;
474
+ static std::unique_ptr<DB> db;
457
475
  Options options;
458
476
  if (enable_statistics) {
459
477
  options.statistics = CreateDBStatistics();
@@ -489,7 +507,7 @@ static void ManualFlush(benchmark::State& state) {
489
507
  }
490
508
 
491
509
  if (state.thread_index() == 0) {
492
- auto db_full = static_cast_with_check<DBImpl>(db);
510
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
493
511
  Status s = db_full->WaitForCompact(true);
494
512
  if (!s.ok()) {
495
513
  state.SkipWithError(s.ToString().c_str());
@@ -525,21 +543,30 @@ static void DBGet(benchmark::State& state) {
525
543
  bool enable_statistics = state.range(3);
526
544
  bool negative_query = state.range(4);
527
545
  bool enable_filter = state.range(5);
546
+ bool mmap = state.range(6);
528
547
  uint64_t key_num = max_data / per_key_size;
529
548
 
530
549
  // setup DB
531
- static DB* db;
550
+ static std::unique_ptr<DB> db;
532
551
  Options options;
533
552
  if (enable_statistics) {
534
553
  options.statistics = CreateDBStatistics();
535
554
  }
555
+ if (mmap) {
556
+ options.allow_mmap_reads = true;
557
+ options.compression = kNoCompression;
558
+ }
536
559
  options.compaction_style = compaction_style;
537
560
 
561
+ BlockBasedTableOptions table_options;
538
562
  if (enable_filter) {
539
- BlockBasedTableOptions table_options;
540
563
  table_options.filter_policy.reset(NewBloomFilterPolicy(10, false));
541
- options.table_factory.reset(NewBlockBasedTableFactory(table_options));
542
564
  }
565
+ if (mmap) {
566
+ table_options.no_block_cache = true;
567
+ table_options.block_restart_interval = 1;
568
+ }
569
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
543
570
 
544
571
  auto rnd = Random(301 + state.thread_index());
545
572
  KeyGenerator kg(&rnd, key_num);
@@ -564,7 +591,7 @@ static void DBGet(benchmark::State& state) {
564
591
  state.SkipWithError(s.ToString().c_str());
565
592
  }
566
593
 
567
- auto db_full = static_cast_with_check<DBImpl>(db);
594
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
568
595
  s = db_full->WaitForCompact(true);
569
596
  if (!s.ok()) {
570
597
  state.SkipWithError(s.ToString().c_str());
@@ -573,6 +600,9 @@ static void DBGet(benchmark::State& state) {
573
600
  }
574
601
 
575
602
  auto ro = ReadOptions();
603
+ if (mmap) {
604
+ ro.verify_checksums = false;
605
+ }
576
606
  size_t not_found = 0;
577
607
  if (negative_query) {
578
608
  for (auto _ : state) {
@@ -616,8 +646,10 @@ static void DBGetArguments(benchmark::internal::Benchmark* b) {
616
646
  for (bool enable_statistics : {false, true}) {
617
647
  for (bool negative_query : {false, true}) {
618
648
  for (bool enable_filter : {false, true}) {
619
- b->Args({comp_style, max_data, per_key_size, enable_statistics,
620
- negative_query, enable_filter});
649
+ for (bool mmap : {false, true}) {
650
+ b->Args({comp_style, max_data, per_key_size, enable_statistics,
651
+ negative_query, enable_filter, mmap});
652
+ }
621
653
  }
622
654
  }
623
655
  }
@@ -625,16 +657,16 @@ static void DBGetArguments(benchmark::internal::Benchmark* b) {
625
657
  }
626
658
  }
627
659
  b->ArgNames({"comp_style", "max_data", "per_key_size", "enable_statistics",
628
- "negative_query", "enable_filter"});
660
+ "negative_query", "enable_filter", "mmap"});
629
661
  }
630
662
 
631
- static constexpr uint64_t kDBGetNum = 10l << 10;
663
+ static constexpr uint64_t kDBGetNum = 1l << 20;
632
664
  BENCHMARK(DBGet)->Threads(1)->Iterations(kDBGetNum)->Apply(DBGetArguments);
633
665
  BENCHMARK(DBGet)->Threads(8)->Iterations(kDBGetNum / 8)->Apply(DBGetArguments);
634
666
 
635
667
  static void SimpleGetWithPerfContext(benchmark::State& state) {
636
668
  // setup DB
637
- static DB* db;
669
+ static std::unique_ptr<DB> db;
638
670
  std::string db_name;
639
671
  Options options;
640
672
  options.create_if_missing = true;
@@ -654,10 +686,14 @@ static void SimpleGetWithPerfContext(benchmark::State& state) {
654
686
  db_name = db_path + "/simple_get_" + std::to_string(getpid());
655
687
  DestroyDB(db_name, options);
656
688
 
657
- s = DB::Open(options, db_name, &db);
658
- if (!s.ok()) {
659
- state.SkipWithError(s.ToString().c_str());
660
- return;
689
+ {
690
+ DB* db_ptr = nullptr;
691
+ s = DB::Open(options, db_name, &db_ptr);
692
+ if (!s.ok()) {
693
+ state.SkipWithError(s.ToString().c_str());
694
+ return;
695
+ }
696
+ db.reset(db_ptr);
661
697
  }
662
698
  // load db
663
699
  auto wo = WriteOptions();
@@ -668,7 +704,7 @@ static void SimpleGetWithPerfContext(benchmark::State& state) {
668
704
  state.SkipWithError(s.ToString().c_str());
669
705
  }
670
706
  }
671
- auto db_full = static_cast_with_check<DBImpl>(db);
707
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
672
708
  s = db_full->WaitForCompact(true);
673
709
  if (!s.ok()) {
674
710
  state.SkipWithError(s.ToString().c_str());
@@ -755,6 +791,191 @@ static void SimpleGetWithPerfContext(benchmark::State& state) {
755
791
 
756
792
  BENCHMARK(SimpleGetWithPerfContext)->Iterations(1000000);
757
793
 
794
+ static void DBGetMergeOperandsInMemtable(benchmark::State& state) {
795
+ const uint64_t kDataLen = 16 << 20; // 16MB
796
+ const uint64_t kValueLen = 64;
797
+ const uint64_t kNumEntries = kDataLen / kValueLen;
798
+ const uint64_t kNumEntriesPerKey = state.range(0);
799
+ const uint64_t kNumKeys = kNumEntries / kNumEntriesPerKey;
800
+
801
+ // setup DB
802
+ static std::unique_ptr<DB> db;
803
+
804
+ Options options;
805
+ options.merge_operator = MergeOperators::CreateStringAppendOperator();
806
+ // Make memtable large enough that automatic flush will not be triggered.
807
+ options.write_buffer_size = 2 * kDataLen;
808
+
809
+ KeyGenerator sequential_key_gen(kNumKeys);
810
+ auto rnd = Random(301 + state.thread_index());
811
+
812
+ if (state.thread_index() == 0) {
813
+ SetupDB(state, options, &db, "DBGetMergeOperandsInMemtable");
814
+
815
+ // load db
816
+ auto write_opts = WriteOptions();
817
+ write_opts.disableWAL = true;
818
+ for (uint64_t i = 0; i < kNumEntries; i++) {
819
+ Status s = db->Merge(write_opts, sequential_key_gen.Next(),
820
+ rnd.RandomString(static_cast<int>(kValueLen)));
821
+ if (!s.ok()) {
822
+ state.SkipWithError(s.ToString().c_str());
823
+ }
824
+ }
825
+ }
826
+
827
+ KeyGenerator random_key_gen(kNumKeys);
828
+ std::vector<PinnableSlice> value_operands;
829
+ value_operands.resize(kNumEntriesPerKey);
830
+ GetMergeOperandsOptions get_merge_ops_opts;
831
+ get_merge_ops_opts.expected_max_number_of_operands =
832
+ static_cast<int>(kNumEntriesPerKey);
833
+ for (auto _ : state) {
834
+ int num_value_operands = 0;
835
+ Status s = db->GetMergeOperands(
836
+ ReadOptions(), db->DefaultColumnFamily(), random_key_gen.Next(),
837
+ value_operands.data(), &get_merge_ops_opts, &num_value_operands);
838
+ if (!s.ok()) {
839
+ state.SkipWithError(s.ToString().c_str());
840
+ }
841
+ if (num_value_operands != static_cast<int>(kNumEntriesPerKey)) {
842
+ state.SkipWithError("Unexpected number of merge operands found for key");
843
+ }
844
+ }
845
+
846
+ if (state.thread_index() == 0) {
847
+ TeardownDB(state, db, options, random_key_gen);
848
+ }
849
+ }
850
+
851
+ static void DBGetMergeOperandsInSstFile(benchmark::State& state) {
852
+ const uint64_t kDataLen = 16 << 20; // 16MB
853
+ const uint64_t kValueLen = 64;
854
+ const uint64_t kNumEntries = kDataLen / kValueLen;
855
+ const uint64_t kNumEntriesPerKey = state.range(0);
856
+ const uint64_t kNumKeys = kNumEntries / kNumEntriesPerKey;
857
+ const bool kMmap = state.range(1);
858
+
859
+ // setup DB
860
+ static std::unique_ptr<DB> db;
861
+
862
+ BlockBasedTableOptions table_options;
863
+ if (kMmap) {
864
+ table_options.no_block_cache = true;
865
+ } else {
866
+ // Make block cache large enough that eviction will not be triggered.
867
+ table_options.block_cache = NewLRUCache(2 * kDataLen);
868
+ }
869
+
870
+ Options options;
871
+ if (kMmap) {
872
+ options.allow_mmap_reads = true;
873
+ }
874
+ options.compression = kNoCompression;
875
+ options.merge_operator = MergeOperators::CreateStringAppendOperator();
876
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
877
+ // Make memtable large enough that automatic flush will not be triggered.
878
+ options.write_buffer_size = 2 * kDataLen;
879
+
880
+ KeyGenerator sequential_key_gen(kNumKeys);
881
+ auto rnd = Random(301 + state.thread_index());
882
+
883
+ if (state.thread_index() == 0) {
884
+ SetupDB(state, options, &db, "DBGetMergeOperandsInBlockCache");
885
+
886
+ // load db
887
+ //
888
+ // Take a snapshot after each cycle of merges to ensure flush cannot
889
+ // merge any entries.
890
+ std::vector<const Snapshot*> snapshots;
891
+ snapshots.resize(kNumEntriesPerKey);
892
+ auto write_opts = WriteOptions();
893
+ write_opts.disableWAL = true;
894
+ for (uint64_t i = 0; i < kNumEntriesPerKey; i++) {
895
+ for (uint64_t j = 0; j < kNumKeys; j++) {
896
+ Status s = db->Merge(write_opts, sequential_key_gen.Next(),
897
+ rnd.RandomString(static_cast<int>(kValueLen)));
898
+ if (!s.ok()) {
899
+ state.SkipWithError(s.ToString().c_str());
900
+ }
901
+ }
902
+ snapshots[i] = db->GetSnapshot();
903
+ }
904
+
905
+ // Flush to an L0 file; read back to prime the cache/mapped memory.
906
+ db->Flush(FlushOptions());
907
+ for (uint64_t i = 0; i < kNumKeys; ++i) {
908
+ std::string value;
909
+ Status s = db->Get(ReadOptions(), sequential_key_gen.Next(), &value);
910
+ if (!s.ok()) {
911
+ state.SkipWithError(s.ToString().c_str());
912
+ }
913
+ }
914
+
915
+ if (state.thread_index() == 0) {
916
+ for (uint64_t i = 0; i < kNumEntriesPerKey; ++i) {
917
+ db->ReleaseSnapshot(snapshots[i]);
918
+ }
919
+ }
920
+ }
921
+
922
+ KeyGenerator random_key_gen(kNumKeys);
923
+ std::vector<PinnableSlice> value_operands;
924
+ value_operands.resize(kNumEntriesPerKey);
925
+ GetMergeOperandsOptions get_merge_ops_opts;
926
+ get_merge_ops_opts.expected_max_number_of_operands =
927
+ static_cast<int>(kNumEntriesPerKey);
928
+ for (auto _ : state) {
929
+ int num_value_operands = 0;
930
+ ReadOptions read_opts;
931
+ read_opts.verify_checksums = false;
932
+ Status s = db->GetMergeOperands(
933
+ read_opts, db->DefaultColumnFamily(), random_key_gen.Next(),
934
+ value_operands.data(), &get_merge_ops_opts, &num_value_operands);
935
+ if (!s.ok()) {
936
+ state.SkipWithError(s.ToString().c_str());
937
+ }
938
+ if (num_value_operands != static_cast<int>(kNumEntriesPerKey)) {
939
+ state.SkipWithError("Unexpected number of merge operands found for key");
940
+ }
941
+ }
942
+
943
+ if (state.thread_index() == 0) {
944
+ TeardownDB(state, db, options, random_key_gen);
945
+ }
946
+ }
947
+
948
+ static void DBGetMergeOperandsInMemtableArguments(
949
+ benchmark::internal::Benchmark* b) {
950
+ for (int entries_per_key : {1, 32, 1024}) {
951
+ b->Args({entries_per_key});
952
+ }
953
+ b->ArgNames({"entries_per_key"});
954
+ }
955
+
956
+ static void DBGetMergeOperandsInSstFileArguments(
957
+ benchmark::internal::Benchmark* b) {
958
+ for (int entries_per_key : {1, 32, 1024}) {
959
+ for (bool mmap : {false, true}) {
960
+ b->Args({entries_per_key, mmap});
961
+ }
962
+ }
963
+ b->ArgNames({"entries_per_key", "mmap"});
964
+ }
965
+
966
+ BENCHMARK(DBGetMergeOperandsInMemtable)
967
+ ->Threads(1)
968
+ ->Apply(DBGetMergeOperandsInMemtableArguments);
969
+ BENCHMARK(DBGetMergeOperandsInMemtable)
970
+ ->Threads(8)
971
+ ->Apply(DBGetMergeOperandsInMemtableArguments);
972
+ BENCHMARK(DBGetMergeOperandsInSstFile)
973
+ ->Threads(1)
974
+ ->Apply(DBGetMergeOperandsInSstFileArguments);
975
+ BENCHMARK(DBGetMergeOperandsInSstFile)
976
+ ->Threads(8)
977
+ ->Apply(DBGetMergeOperandsInSstFileArguments);
978
+
758
979
  std::string GenerateKey(int primary_key, int secondary_key, int padding_size,
759
980
  Random* rnd) {
760
981
  char buf[50];
@@ -844,7 +1065,7 @@ static void IteratorSeek(benchmark::State& state) {
844
1065
  uint64_t key_num = max_data / per_key_size;
845
1066
 
846
1067
  // setup DB
847
- static DB* db;
1068
+ static std::unique_ptr<DB> db;
848
1069
  Options options;
849
1070
  if (enable_statistics) {
850
1071
  options.statistics = CreateDBStatistics();
@@ -880,7 +1101,7 @@ static void IteratorSeek(benchmark::State& state) {
880
1101
  state.SkipWithError(s.ToString().c_str());
881
1102
  }
882
1103
 
883
- auto db_full = static_cast_with_check<DBImpl>(db);
1104
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
884
1105
  s = db_full->WaitForCompact(true);
885
1106
  if (!s.ok()) {
886
1107
  state.SkipWithError(s.ToString().c_str());
@@ -947,7 +1168,7 @@ static void IteratorNext(benchmark::State& state) {
947
1168
  uint64_t key_num = max_data / per_key_size;
948
1169
 
949
1170
  // setup DB
950
- static DB* db;
1171
+ static std::unique_ptr<DB> db;
951
1172
  Options options;
952
1173
  options.compaction_style = compaction_style;
953
1174
 
@@ -973,7 +1194,7 @@ static void IteratorNext(benchmark::State& state) {
973
1194
  state.SkipWithError(s.ToString().c_str());
974
1195
  }
975
1196
 
976
- auto db_full = static_cast_with_check<DBImpl>(db);
1197
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
977
1198
  s = db_full->WaitForCompact(true);
978
1199
  if (!s.ok()) {
979
1200
  state.SkipWithError(s.ToString().c_str());
@@ -1022,7 +1243,7 @@ BENCHMARK(IteratorNext)
1022
1243
 
1023
1244
  static void IteratorNextWithPerfContext(benchmark::State& state) {
1024
1245
  // setup DB
1025
- static DB* db;
1246
+ static std::unique_ptr<DB> db;
1026
1247
  Options options;
1027
1248
 
1028
1249
  auto rnd = Random(301 + state.thread_index());
@@ -1039,7 +1260,7 @@ static void IteratorNextWithPerfContext(benchmark::State& state) {
1039
1260
  state.SkipWithError(s.ToString().c_str());
1040
1261
  }
1041
1262
  }
1042
- auto db_full = static_cast_with_check<DBImpl>(db);
1263
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
1043
1264
  Status s = db_full->WaitForCompact(true);
1044
1265
  if (!s.ok()) {
1045
1266
  state.SkipWithError(s.ToString().c_str());
@@ -1114,7 +1335,7 @@ static void IteratorPrev(benchmark::State& state) {
1114
1335
  uint64_t key_num = max_data / per_key_size;
1115
1336
 
1116
1337
  // setup DB
1117
- static DB* db;
1338
+ static std::unique_ptr<DB> db;
1118
1339
  std::string db_name;
1119
1340
  Options options;
1120
1341
  options.compaction_style = compaction_style;
@@ -1141,7 +1362,7 @@ static void IteratorPrev(benchmark::State& state) {
1141
1362
  state.SkipWithError(s.ToString().c_str());
1142
1363
  }
1143
1364
 
1144
- auto db_full = static_cast_with_check<DBImpl>(db);
1365
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
1145
1366
  s = db_full->WaitForCompact(true);
1146
1367
  if (!s.ok()) {
1147
1368
  state.SkipWithError(s.ToString().c_str());
@@ -1198,7 +1419,7 @@ static void PrefixSeek(benchmark::State& state) {
1198
1419
  uint64_t key_num = max_data / per_key_size;
1199
1420
 
1200
1421
  // setup DB
1201
- static DB* db;
1422
+ static std::unique_ptr<DB> db;
1202
1423
  Options options;
1203
1424
  if (enable_statistics) {
1204
1425
  options.statistics = CreateDBStatistics();
@@ -1235,7 +1456,7 @@ static void PrefixSeek(benchmark::State& state) {
1235
1456
  state.SkipWithError(s.ToString().c_str());
1236
1457
  }
1237
1458
 
1238
- auto db_full = static_cast_with_check<DBImpl>(db);
1459
+ auto db_full = static_cast_with_check<DBImpl>(db.get());
1239
1460
  s = db_full->WaitForCompact(true);
1240
1461
  if (!s.ok()) {
1241
1462
  state.SkipWithError(s.ToString().c_str());
@@ -1311,7 +1532,7 @@ static void RandomAccessFileReaderRead(benchmark::State& state) {
1311
1532
  auto statistics_share = CreateDBStatistics();
1312
1533
  Statistics* statistics = enable_statistics ? statistics_share.get() : nullptr;
1313
1534
  for (int i = 0; i < kFileNum; i++) {
1314
- std::string fname = fname_base + ToString(i);
1535
+ std::string fname = fname_base + std::to_string(i);
1315
1536
  std::string content = rand.RandomString(kDefaultPageSize);
1316
1537
  std::unique_ptr<WritableFile> tgt_file;
1317
1538
  env->NewWritableFile(fname, &tgt_file, EnvOptions());
@@ -1344,7 +1565,7 @@ static void RandomAccessFileReaderRead(benchmark::State& state) {
1344
1565
 
1345
1566
  // clean up
1346
1567
  for (int i = 0; i < kFileNum; i++) {
1347
- std::string fname = fname_base + ToString(i);
1568
+ std::string fname = fname_base + std::to_string(i);
1348
1569
  env->DeleteFile(fname); // ignore return, okay to fail cleanup
1349
1570
  }
1350
1571
  }
@@ -26,7 +26,8 @@ HistogramBucketMapper::HistogramBucketMapper() {
26
26
  // size of array buckets_ in HistogramImpl
27
27
  bucketValues_ = {1, 2};
28
28
  double bucket_val = static_cast<double>(bucketValues_.back());
29
- while ((bucket_val = 1.5 * bucket_val) <= static_cast<double>(port::kMaxUint64)) {
29
+ while ((bucket_val = 1.5 * bucket_val) <=
30
+ static_cast<double>(std::numeric_limits<uint64_t>::max())) {
30
31
  bucketValues_.push_back(static_cast<uint64_t>(bucket_val));
31
32
  // Extracts two most significant digits to make histogram buckets more
32
33
  // human-readable. E.g., 172 becomes 170.
@@ -13,11 +13,8 @@ namespace ROCKSDB_NAMESPACE {
13
13
  // Should not be used because the counters are not thread-safe.
14
14
  // Put here just to make get_iostats_context() simple without ifdef.
15
15
  static IOStatsContext iostats_context;
16
- #elif defined(ROCKSDB_SUPPORT_THREAD_LOCAL)
17
- __thread IOStatsContext iostats_context;
18
16
  #else
19
- #error \
20
- "No thread-local support. Disable iostats context with -DNIOSTATS_CONTEXT."
17
+ thread_local IOStatsContext iostats_context;
21
18
  #endif
22
19
 
23
20
  IOStatsContext* get_iostats_context() {
@@ -7,9 +7,9 @@
7
7
  #include "monitoring/perf_step_timer.h"
8
8
  #include "rocksdb/iostats_context.h"
9
9
 
10
- #if defined(ROCKSDB_SUPPORT_THREAD_LOCAL) && !defined(NIOSTATS_CONTEXT)
10
+ #if !defined(NIOSTATS_CONTEXT)
11
11
  namespace ROCKSDB_NAMESPACE {
12
- extern __thread IOStatsContext iostats_context;
12
+ extern thread_local IOStatsContext iostats_context;
13
13
  } // namespace ROCKSDB_NAMESPACE
14
14
 
15
15
  // increment a specific counter by the specified value
@@ -40,7 +40,7 @@ extern __thread IOStatsContext iostats_context;
40
40
  PerfLevel::kEnableTimeAndCPUTimeExceptForMutex); \
41
41
  iostats_step_timer_##metric.Start();
42
42
 
43
- #else // ROCKSDB_SUPPORT_THREAD_LOCAL && !NIOSTATS_CONTEXT
43
+ #else // !NIOSTATS_CONTEXT
44
44
 
45
45
  #define IOSTATS_ADD(metric, value)
46
46
  #define IOSTATS_ADD_IF_POSITIVE(metric, value)
@@ -53,4 +53,4 @@ extern __thread IOStatsContext iostats_context;
53
53
  #define IOSTATS_TIMER_GUARD(metric)
54
54
  #define IOSTATS_CPU_TIMER_GUARD(metric, clock) static_cast<void>(clock)
55
55
 
56
- #endif // ROCKSDB_SUPPORT_THREAD_LOCAL && !NIOSTATS_CONTEXT
56
+ #endif // !NIOSTATS_CONTEXT
@@ -13,14 +13,8 @@ namespace ROCKSDB_NAMESPACE {
13
13
  // Should not be used because the counters are not thread-safe.
14
14
  // Put here just to make get_perf_context() simple without ifdef.
15
15
  PerfContext perf_context;
16
- #elif defined(ROCKSDB_SUPPORT_THREAD_LOCAL)
17
- #if defined(OS_SOLARIS)
18
- __thread PerfContext perf_context;
19
- #else // OS_SOLARIS
20
- thread_local PerfContext perf_context;
21
- #endif // OS_SOLARIS
22
16
  #else
23
- #error "No thread-local support. Disable perf context with -DNPERF_CONTEXT."
17
+ thread_local PerfContext perf_context;
24
18
  #endif
25
19
 
26
20
  PerfContext* get_perf_context() {
@@ -28,7 +22,7 @@ PerfContext* get_perf_context() {
28
22
  }
29
23
 
30
24
  PerfContext::~PerfContext() {
31
- #if !defined(NPERF_CONTEXT) && defined(ROCKSDB_SUPPORT_THREAD_LOCAL) && !defined(OS_SOLARIS)
25
+ #if !defined(NPERF_CONTEXT) && !defined(OS_SOLARIS)
32
26
  ClearPerLevelPerfContext();
33
27
  #endif
34
28
  }
@@ -120,6 +114,7 @@ PerfContext::PerfContext(const PerfContext& other) {
120
114
  iter_next_cpu_nanos = other.iter_next_cpu_nanos;
121
115
  iter_prev_cpu_nanos = other.iter_prev_cpu_nanos;
122
116
  iter_seek_cpu_nanos = other.iter_seek_cpu_nanos;
117
+ number_async_seek = other.number_async_seek;
123
118
  if (per_level_perf_context_enabled && level_to_perf_context != nullptr) {
124
119
  ClearPerLevelPerfContext();
125
120
  }
@@ -218,6 +213,7 @@ PerfContext::PerfContext(PerfContext&& other) noexcept {
218
213
  iter_next_cpu_nanos = other.iter_next_cpu_nanos;
219
214
  iter_prev_cpu_nanos = other.iter_prev_cpu_nanos;
220
215
  iter_seek_cpu_nanos = other.iter_seek_cpu_nanos;
216
+ number_async_seek = other.number_async_seek;
221
217
  if (per_level_perf_context_enabled && level_to_perf_context != nullptr) {
222
218
  ClearPerLevelPerfContext();
223
219
  }
@@ -318,6 +314,7 @@ PerfContext& PerfContext::operator=(const PerfContext& other) {
318
314
  iter_next_cpu_nanos = other.iter_next_cpu_nanos;
319
315
  iter_prev_cpu_nanos = other.iter_prev_cpu_nanos;
320
316
  iter_seek_cpu_nanos = other.iter_seek_cpu_nanos;
317
+ number_async_seek = other.number_async_seek;
321
318
  if (per_level_perf_context_enabled && level_to_perf_context != nullptr) {
322
319
  ClearPerLevelPerfContext();
323
320
  }
@@ -413,6 +410,7 @@ void PerfContext::Reset() {
413
410
  iter_next_cpu_nanos = 0;
414
411
  iter_prev_cpu_nanos = 0;
415
412
  iter_seek_cpu_nanos = 0;
413
+ number_async_seek = 0;
416
414
  if (per_level_perf_context_enabled && level_to_perf_context) {
417
415
  for (auto& kv : *level_to_perf_context) {
418
416
  kv.second.Reset();
@@ -532,6 +530,7 @@ std::string PerfContext::ToString(bool exclude_zero_counters) const {
532
530
  PERF_CONTEXT_OUTPUT(iter_next_cpu_nanos);
533
531
  PERF_CONTEXT_OUTPUT(iter_prev_cpu_nanos);
534
532
  PERF_CONTEXT_OUTPUT(iter_seek_cpu_nanos);
533
+ PERF_CONTEXT_OUTPUT(number_async_seek);
535
534
  PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(bloom_filter_useful);
536
535
  PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(bloom_filter_full_positive);
537
536
  PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(bloom_filter_full_true_positive);