@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
@@ -8,6 +8,7 @@
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
  //
10
10
 
11
+ #include "util/compression.h"
11
12
  #ifdef GFLAGS
12
13
  #include "db_stress_tool/db_stress_common.h"
13
14
  #include "db_stress_tool/db_stress_compaction_filter.h"
@@ -57,7 +58,8 @@ std::shared_ptr<const FilterPolicy> CreateFilterPolicy() {
57
58
 
58
59
  StressTest::StressTest()
59
60
  : cache_(NewCache(FLAGS_cache_size, FLAGS_cache_numshardbits)),
60
- compressed_cache_(NewLRUCache(FLAGS_compressed_cache_size)),
61
+ compressed_cache_(NewLRUCache(FLAGS_compressed_cache_size,
62
+ FLAGS_compressed_cache_numshardbits)),
61
63
  filter_policy_(CreateFilterPolicy()),
62
64
  db_(nullptr),
63
65
  #ifndef ROCKSDB_LITE
@@ -185,69 +187,69 @@ bool StressTest::BuildOptionsTable() {
185
187
 
186
188
  std::unordered_map<std::string, std::vector<std::string>> options_tbl = {
187
189
  {"write_buffer_size",
188
- {ToString(options_.write_buffer_size),
189
- ToString(options_.write_buffer_size * 2),
190
- ToString(options_.write_buffer_size * 4)}},
190
+ {std::to_string(options_.write_buffer_size),
191
+ std::to_string(options_.write_buffer_size * 2),
192
+ std::to_string(options_.write_buffer_size * 4)}},
191
193
  {"max_write_buffer_number",
192
- {ToString(options_.max_write_buffer_number),
193
- ToString(options_.max_write_buffer_number * 2),
194
- ToString(options_.max_write_buffer_number * 4)}},
194
+ {std::to_string(options_.max_write_buffer_number),
195
+ std::to_string(options_.max_write_buffer_number * 2),
196
+ std::to_string(options_.max_write_buffer_number * 4)}},
195
197
  {"arena_block_size",
196
198
  {
197
- ToString(options_.arena_block_size),
198
- ToString(options_.write_buffer_size / 4),
199
- ToString(options_.write_buffer_size / 8),
199
+ std::to_string(options_.arena_block_size),
200
+ std::to_string(options_.write_buffer_size / 4),
201
+ std::to_string(options_.write_buffer_size / 8),
200
202
  }},
201
- {"memtable_huge_page_size", {"0", ToString(2 * 1024 * 1024)}},
203
+ {"memtable_huge_page_size", {"0", std::to_string(2 * 1024 * 1024)}},
202
204
  {"max_successive_merges", {"0", "2", "4"}},
203
205
  {"inplace_update_num_locks", {"100", "200", "300"}},
204
206
  // TODO(ljin): enable test for this option
205
207
  // {"disable_auto_compactions", {"100", "200", "300"}},
206
208
  {"level0_file_num_compaction_trigger",
207
209
  {
208
- ToString(options_.level0_file_num_compaction_trigger),
209
- ToString(options_.level0_file_num_compaction_trigger + 2),
210
- ToString(options_.level0_file_num_compaction_trigger + 4),
210
+ std::to_string(options_.level0_file_num_compaction_trigger),
211
+ std::to_string(options_.level0_file_num_compaction_trigger + 2),
212
+ std::to_string(options_.level0_file_num_compaction_trigger + 4),
211
213
  }},
212
214
  {"level0_slowdown_writes_trigger",
213
215
  {
214
- ToString(options_.level0_slowdown_writes_trigger),
215
- ToString(options_.level0_slowdown_writes_trigger + 2),
216
- ToString(options_.level0_slowdown_writes_trigger + 4),
216
+ std::to_string(options_.level0_slowdown_writes_trigger),
217
+ std::to_string(options_.level0_slowdown_writes_trigger + 2),
218
+ std::to_string(options_.level0_slowdown_writes_trigger + 4),
217
219
  }},
218
220
  {"level0_stop_writes_trigger",
219
221
  {
220
- ToString(options_.level0_stop_writes_trigger),
221
- ToString(options_.level0_stop_writes_trigger + 2),
222
- ToString(options_.level0_stop_writes_trigger + 4),
222
+ std::to_string(options_.level0_stop_writes_trigger),
223
+ std::to_string(options_.level0_stop_writes_trigger + 2),
224
+ std::to_string(options_.level0_stop_writes_trigger + 4),
223
225
  }},
224
226
  {"max_compaction_bytes",
225
227
  {
226
- ToString(options_.target_file_size_base * 5),
227
- ToString(options_.target_file_size_base * 15),
228
- ToString(options_.target_file_size_base * 100),
228
+ std::to_string(options_.target_file_size_base * 5),
229
+ std::to_string(options_.target_file_size_base * 15),
230
+ std::to_string(options_.target_file_size_base * 100),
229
231
  }},
230
232
  {"target_file_size_base",
231
233
  {
232
- ToString(options_.target_file_size_base),
233
- ToString(options_.target_file_size_base * 2),
234
- ToString(options_.target_file_size_base * 4),
234
+ std::to_string(options_.target_file_size_base),
235
+ std::to_string(options_.target_file_size_base * 2),
236
+ std::to_string(options_.target_file_size_base * 4),
235
237
  }},
236
238
  {"target_file_size_multiplier",
237
239
  {
238
- ToString(options_.target_file_size_multiplier),
240
+ std::to_string(options_.target_file_size_multiplier),
239
241
  "1",
240
242
  "2",
241
243
  }},
242
244
  {"max_bytes_for_level_base",
243
245
  {
244
- ToString(options_.max_bytes_for_level_base / 2),
245
- ToString(options_.max_bytes_for_level_base),
246
- ToString(options_.max_bytes_for_level_base * 2),
246
+ std::to_string(options_.max_bytes_for_level_base / 2),
247
+ std::to_string(options_.max_bytes_for_level_base),
248
+ std::to_string(options_.max_bytes_for_level_base * 2),
247
249
  }},
248
250
  {"max_bytes_for_level_multiplier",
249
251
  {
250
- ToString(options_.max_bytes_for_level_multiplier),
252
+ std::to_string(options_.max_bytes_for_level_multiplier),
251
253
  "1",
252
254
  "2",
253
255
  }},
@@ -281,12 +283,12 @@ bool StressTest::BuildOptionsTable() {
281
283
  return true;
282
284
  }
283
285
 
284
- void StressTest::InitDb() {
286
+ void StressTest::InitDb(SharedState* shared) {
285
287
  uint64_t now = clock_->NowMicros();
286
288
  fprintf(stdout, "%s Initializing db_stress\n",
287
289
  clock_->TimeToString(now / 1000000).c_str());
288
290
  PrintEnv();
289
- Open();
291
+ Open(shared);
290
292
  BuildOptionsTable();
291
293
  }
292
294
 
@@ -418,7 +420,7 @@ Status StressTest::AssertSame(DB* db, ColumnFamilyHandle* cf,
418
420
  if (snap_state.status != s) {
419
421
  return Status::Corruption(
420
422
  "The snapshot gave inconsistent results for key " +
421
- ToString(Hash(snap_state.key.c_str(), snap_state.key.size(), 0)) +
423
+ std::to_string(Hash(snap_state.key.c_str(), snap_state.key.size(), 0)) +
422
424
  " in cf " + cf->GetName() + ": (" + snap_state.status.ToString() +
423
425
  ") vs. (" + s.ToString() + ")");
424
426
  }
@@ -568,7 +570,7 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
568
570
  fprintf(stdout, "%s Reopening database in read-only\n",
569
571
  clock_->TimeToString(now / 1000000).c_str());
570
572
  // Reopen as read-only, can ignore all options related to updates
571
- Open();
573
+ Open(shared);
572
574
  } else {
573
575
  fprintf(stderr, "Failed to preload db");
574
576
  exit(1);
@@ -674,6 +676,7 @@ void StressTest::OperateDb(ThreadState* thread) {
674
676
  fault_fs_guard->SetThreadLocalReadErrorContext(thread->shared->GetSeed(),
675
677
  FLAGS_read_fault_one_in);
676
678
  }
679
+ #endif // NDEBUG
677
680
  if (FLAGS_write_fault_one_in) {
678
681
  IOStatus error_msg;
679
682
  if (FLAGS_injest_error_severity <= 1 || FLAGS_injest_error_severity > 2) {
@@ -691,7 +694,6 @@ void StressTest::OperateDb(ThreadState* thread) {
691
694
  thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg,
692
695
  /*inject_for_all_file_types=*/false, types);
693
696
  }
694
- #endif // NDEBUG
695
697
  thread->stats.Start();
696
698
  for (int open_cnt = 0; open_cnt <= FLAGS_reopen; ++open_cnt) {
697
699
  if (thread->shared->HasVerificationFailedYet() ||
@@ -1424,8 +1426,10 @@ void StressTest::TestCompactFiles(ThreadState* /* thread */,
1424
1426
  Status StressTest::TestBackupRestore(
1425
1427
  ThreadState* thread, const std::vector<int>& rand_column_families,
1426
1428
  const std::vector<int64_t>& rand_keys) {
1427
- std::string backup_dir = FLAGS_db + "/.backup" + ToString(thread->tid);
1428
- std::string restore_dir = FLAGS_db + "/.restore" + ToString(thread->tid);
1429
+ const std::string backup_dir =
1430
+ FLAGS_db + "/.backup" + std::to_string(thread->tid);
1431
+ const std::string restore_dir =
1432
+ FLAGS_db + "/.restore" + std::to_string(thread->tid);
1429
1433
  BackupEngineOptions backup_opts(backup_dir);
1430
1434
  // For debugging, get info_log from live options
1431
1435
  backup_opts.info_log = db_->GetDBOptions().info_log.get();
@@ -1557,6 +1561,7 @@ Status StressTest::TestBackupRestore(
1557
1561
  // Not yet implemented: opening restored BlobDB or TransactionDB
1558
1562
  if (s.ok() && !FLAGS_use_txn && !FLAGS_use_blob_db) {
1559
1563
  Options restore_options(options_);
1564
+ restore_options.best_efforts_recovery = false;
1560
1565
  restore_options.listeners.clear();
1561
1566
  // Avoid dangling/shared file descriptors, for reliable destroy
1562
1567
  restore_options.sst_file_manager = nullptr;
@@ -1613,11 +1618,17 @@ Status StressTest::TestBackupRestore(
1613
1618
  bool exists = thread->shared->Exists(rand_column_families[i], rand_keys[0]);
1614
1619
  if (get_status.ok()) {
1615
1620
  if (!exists && from_latest && ShouldAcquireMutexOnKey()) {
1616
- s = Status::Corruption("key exists in restore but not in original db");
1621
+ std::ostringstream oss;
1622
+ oss << "0x" << key.ToString(true)
1623
+ << " exists in restore but not in original db";
1624
+ s = Status::Corruption(oss.str());
1617
1625
  }
1618
1626
  } else if (get_status.IsNotFound()) {
1619
1627
  if (exists && from_latest && ShouldAcquireMutexOnKey()) {
1620
- s = Status::Corruption("key exists in original db but not in restore");
1628
+ std::ostringstream oss;
1629
+ oss << "0x" << key.ToString(true)
1630
+ << " exists in original db but not in restore";
1631
+ s = Status::Corruption(oss.str());
1621
1632
  }
1622
1633
  } else {
1623
1634
  s = get_status;
@@ -1717,7 +1728,7 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
1717
1728
  const std::vector<int>& rand_column_families,
1718
1729
  const std::vector<int64_t>& rand_keys) {
1719
1730
  std::string checkpoint_dir =
1720
- FLAGS_db + "/.checkpoint" + ToString(thread->tid);
1731
+ FLAGS_db + "/.checkpoint" + std::to_string(thread->tid);
1721
1732
  Options tmp_opts(options_);
1722
1733
  tmp_opts.listeners.clear();
1723
1734
  tmp_opts.env = db_stress_env;
@@ -1759,6 +1770,7 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
1759
1770
  DB* checkpoint_db = nullptr;
1760
1771
  if (s.ok()) {
1761
1772
  Options options(options_);
1773
+ options.best_efforts_recovery = false;
1762
1774
  options.listeners.clear();
1763
1775
  // Avoid race condition in trash handling after delete checkpoint_db
1764
1776
  options.sst_file_manager.reset();
@@ -1790,13 +1802,18 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
1790
1802
  thread->shared->Exists(rand_column_families[i], rand_keys[0]);
1791
1803
  if (get_status.ok()) {
1792
1804
  if (!exists && ShouldAcquireMutexOnKey()) {
1793
- s = Status::Corruption(
1794
- "key exists in checkpoint but not in original db");
1805
+ std::ostringstream oss;
1806
+ oss << "0x" << key.ToString(true) << " exists in checkpoint "
1807
+ << checkpoint_dir << " but not in original db";
1808
+ s = Status::Corruption(oss.str());
1795
1809
  }
1796
1810
  } else if (get_status.IsNotFound()) {
1797
1811
  if (exists && ShouldAcquireMutexOnKey()) {
1798
- s = Status::Corruption(
1799
- "key exists in original db but not in checkpoint");
1812
+ std::ostringstream oss;
1813
+ oss << "0x" << key.ToString(true)
1814
+ << " exists in original db but not in checkpoint "
1815
+ << checkpoint_dir;
1816
+ s = Status::Corruption(oss.str());
1800
1817
  }
1801
1818
  } else {
1802
1819
  s = get_status;
@@ -2029,11 +2046,11 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
2029
2046
  if (FLAGS_long_running_snapshots) {
2030
2047
  // Hold 10% of snapshots for 10x more
2031
2048
  if (thread->rand.OneIn(10)) {
2032
- assert(hold_for < port::kMaxInt64 / 10);
2049
+ assert(hold_for < std::numeric_limits<uint64_t>::max() / 10);
2033
2050
  hold_for *= 10;
2034
2051
  // Hold 1% of snapshots for 100x more
2035
2052
  if (thread->rand.OneIn(10)) {
2036
- assert(hold_for < port::kMaxInt64 / 10);
2053
+ assert(hold_for < std::numeric_limits<uint64_t>::max() / 10);
2037
2054
  hold_for *= 10;
2038
2055
  }
2039
2056
  }
@@ -2065,8 +2082,9 @@ void StressTest::TestCompactRange(ThreadState* thread, int64_t rand_key,
2065
2082
  const Slice& start_key,
2066
2083
  ColumnFamilyHandle* column_family) {
2067
2084
  int64_t end_key_num;
2068
- if (port::kMaxInt64 - rand_key < FLAGS_compact_range_width) {
2069
- end_key_num = port::kMaxInt64;
2085
+ if (std::numeric_limits<int64_t>::max() - rand_key <
2086
+ FLAGS_compact_range_width) {
2087
+ end_key_num = std::numeric_limits<int64_t>::max();
2070
2088
  } else {
2071
2089
  end_key_num = FLAGS_compact_range_width + rand_key;
2072
2090
  }
@@ -2203,7 +2221,7 @@ void StressTest::PrintEnv() const {
2203
2221
  (unsigned long)FLAGS_ops_per_thread);
2204
2222
  std::string ttl_state("unused");
2205
2223
  if (FLAGS_ttl > 0) {
2206
- ttl_state = ToString(FLAGS_ttl);
2224
+ ttl_state = std::to_string(FLAGS_ttl);
2207
2225
  }
2208
2226
  fprintf(stdout, "Time to live(sec) : %s\n", ttl_state.c_str());
2209
2227
  fprintf(stdout, "Read percentage : %d%%\n", FLAGS_readpercent);
@@ -2298,192 +2316,24 @@ void StressTest::PrintEnv() const {
2298
2316
  static_cast<int>(FLAGS_user_timestamp_size));
2299
2317
  fprintf(stdout, "WAL compression : %s\n",
2300
2318
  FLAGS_wal_compression.c_str());
2319
+ fprintf(stdout, "Try verify sst unique id : %d\n",
2320
+ static_cast<int>(FLAGS_verify_sst_unique_id_in_manifest));
2301
2321
 
2302
2322
  fprintf(stdout, "------------------------------------------------\n");
2303
2323
  }
2304
2324
 
2305
- void StressTest::Open() {
2325
+ void StressTest::Open(SharedState* shared) {
2306
2326
  assert(db_ == nullptr);
2307
2327
  #ifndef ROCKSDB_LITE
2308
2328
  assert(txn_db_ == nullptr);
2309
- #endif
2310
- if (FLAGS_options_file.empty()) {
2311
- BlockBasedTableOptions block_based_options;
2312
- block_based_options.block_cache = cache_;
2313
- block_based_options.cache_index_and_filter_blocks =
2314
- FLAGS_cache_index_and_filter_blocks;
2315
- block_based_options.metadata_cache_options.top_level_index_pinning =
2316
- static_cast<PinningTier>(FLAGS_top_level_index_pinning);
2317
- block_based_options.metadata_cache_options.partition_pinning =
2318
- static_cast<PinningTier>(FLAGS_partition_pinning);
2319
- block_based_options.metadata_cache_options.unpartitioned_pinning =
2320
- static_cast<PinningTier>(FLAGS_unpartitioned_pinning);
2321
- block_based_options.block_cache_compressed = compressed_cache_;
2322
- block_based_options.checksum = checksum_type_e;
2323
- block_based_options.block_size = FLAGS_block_size;
2324
- block_based_options.reserve_table_reader_memory =
2325
- FLAGS_reserve_table_reader_memory;
2326
- block_based_options.format_version =
2327
- static_cast<uint32_t>(FLAGS_format_version);
2328
- block_based_options.index_block_restart_interval =
2329
- static_cast<int32_t>(FLAGS_index_block_restart_interval);
2330
- block_based_options.filter_policy = filter_policy_;
2331
- block_based_options.partition_filters = FLAGS_partition_filters;
2332
- block_based_options.optimize_filters_for_memory =
2333
- FLAGS_optimize_filters_for_memory;
2334
- block_based_options.detect_filter_construct_corruption =
2335
- FLAGS_detect_filter_construct_corruption;
2336
- block_based_options.index_type =
2337
- static_cast<BlockBasedTableOptions::IndexType>(FLAGS_index_type);
2338
- block_based_options.prepopulate_block_cache =
2339
- static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
2340
- FLAGS_prepopulate_block_cache);
2341
- options_.table_factory.reset(
2342
- NewBlockBasedTableFactory(block_based_options));
2343
- options_.db_write_buffer_size = FLAGS_db_write_buffer_size;
2344
- options_.write_buffer_size = FLAGS_write_buffer_size;
2345
- options_.max_write_buffer_number = FLAGS_max_write_buffer_number;
2346
- options_.min_write_buffer_number_to_merge =
2347
- FLAGS_min_write_buffer_number_to_merge;
2348
- options_.max_write_buffer_number_to_maintain =
2349
- FLAGS_max_write_buffer_number_to_maintain;
2350
- options_.max_write_buffer_size_to_maintain =
2351
- FLAGS_max_write_buffer_size_to_maintain;
2352
- options_.memtable_prefix_bloom_size_ratio =
2353
- FLAGS_memtable_prefix_bloom_size_ratio;
2354
- options_.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
2355
- options_.disable_auto_compactions = FLAGS_disable_auto_compactions;
2356
- options_.max_background_compactions = FLAGS_max_background_compactions;
2357
- options_.max_background_flushes = FLAGS_max_background_flushes;
2358
- options_.compaction_style =
2359
- static_cast<ROCKSDB_NAMESPACE::CompactionStyle>(FLAGS_compaction_style);
2360
- if (FLAGS_prefix_size >= 0) {
2361
- options_.prefix_extractor.reset(
2362
- NewFixedPrefixTransform(FLAGS_prefix_size));
2363
- }
2364
- options_.max_open_files = FLAGS_open_files;
2365
- options_.statistics = dbstats;
2366
- options_.env = db_stress_env;
2367
- options_.use_fsync = FLAGS_use_fsync;
2368
- options_.compaction_readahead_size = FLAGS_compaction_readahead_size;
2369
- options_.allow_mmap_reads = FLAGS_mmap_read;
2370
- options_.allow_mmap_writes = FLAGS_mmap_write;
2371
- options_.use_direct_reads = FLAGS_use_direct_reads;
2372
- options_.use_direct_io_for_flush_and_compaction =
2373
- FLAGS_use_direct_io_for_flush_and_compaction;
2374
- options_.recycle_log_file_num =
2375
- static_cast<size_t>(FLAGS_recycle_log_file_num);
2376
- options_.target_file_size_base = FLAGS_target_file_size_base;
2377
- options_.target_file_size_multiplier = FLAGS_target_file_size_multiplier;
2378
- options_.max_bytes_for_level_base = FLAGS_max_bytes_for_level_base;
2379
- options_.max_bytes_for_level_multiplier =
2380
- FLAGS_max_bytes_for_level_multiplier;
2381
- options_.level0_stop_writes_trigger = FLAGS_level0_stop_writes_trigger;
2382
- options_.level0_slowdown_writes_trigger =
2383
- FLAGS_level0_slowdown_writes_trigger;
2384
- options_.level0_file_num_compaction_trigger =
2385
- FLAGS_level0_file_num_compaction_trigger;
2386
- options_.compression = compression_type_e;
2387
- options_.bottommost_compression = bottommost_compression_type_e;
2388
- options_.compression_opts.max_dict_bytes = FLAGS_compression_max_dict_bytes;
2389
- options_.compression_opts.zstd_max_train_bytes =
2390
- FLAGS_compression_zstd_max_train_bytes;
2391
- options_.compression_opts.parallel_threads =
2392
- FLAGS_compression_parallel_threads;
2393
- options_.compression_opts.max_dict_buffer_bytes =
2394
- FLAGS_compression_max_dict_buffer_bytes;
2395
- options_.create_if_missing = true;
2396
- options_.max_manifest_file_size = FLAGS_max_manifest_file_size;
2397
- options_.inplace_update_support = FLAGS_in_place_update;
2398
- options_.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
2399
- options_.allow_concurrent_memtable_write =
2400
- FLAGS_allow_concurrent_memtable_write;
2401
- options_.experimental_mempurge_threshold =
2402
- FLAGS_experimental_mempurge_threshold;
2403
- options_.periodic_compaction_seconds = FLAGS_periodic_compaction_seconds;
2404
- options_.ttl = FLAGS_compaction_ttl;
2405
- options_.enable_pipelined_write = FLAGS_enable_pipelined_write;
2406
- options_.enable_write_thread_adaptive_yield =
2407
- FLAGS_enable_write_thread_adaptive_yield;
2408
- options_.compaction_options_universal.size_ratio =
2409
- FLAGS_universal_size_ratio;
2410
- options_.compaction_options_universal.min_merge_width =
2411
- FLAGS_universal_min_merge_width;
2412
- options_.compaction_options_universal.max_merge_width =
2413
- FLAGS_universal_max_merge_width;
2414
- options_.compaction_options_universal.max_size_amplification_percent =
2415
- FLAGS_universal_max_size_amplification_percent;
2416
- options_.atomic_flush = FLAGS_atomic_flush;
2417
- options_.avoid_unnecessary_blocking_io =
2418
- FLAGS_avoid_unnecessary_blocking_io;
2419
- options_.write_dbid_to_manifest = FLAGS_write_dbid_to_manifest;
2420
- options_.avoid_flush_during_recovery = FLAGS_avoid_flush_during_recovery;
2421
- options_.max_write_batch_group_size_bytes =
2422
- FLAGS_max_write_batch_group_size_bytes;
2423
- options_.level_compaction_dynamic_level_bytes =
2424
- FLAGS_level_compaction_dynamic_level_bytes;
2425
- options_.file_checksum_gen_factory =
2426
- GetFileChecksumImpl(FLAGS_file_checksum_impl);
2427
- options_.track_and_verify_wals_in_manifest = true;
2428
-
2429
- // Integrated BlobDB
2430
- options_.enable_blob_files = FLAGS_enable_blob_files;
2431
- options_.min_blob_size = FLAGS_min_blob_size;
2432
- options_.blob_file_size = FLAGS_blob_file_size;
2433
- options_.blob_compression_type =
2434
- StringToCompressionType(FLAGS_blob_compression_type.c_str());
2435
- options_.enable_blob_garbage_collection =
2436
- FLAGS_enable_blob_garbage_collection;
2437
- options_.blob_garbage_collection_age_cutoff =
2438
- FLAGS_blob_garbage_collection_age_cutoff;
2439
- options_.blob_garbage_collection_force_threshold =
2440
- FLAGS_blob_garbage_collection_force_threshold;
2441
- options_.blob_compaction_readahead_size =
2442
- FLAGS_blob_compaction_readahead_size;
2443
-
2444
- options_.wal_compression =
2445
- StringToCompressionType(FLAGS_wal_compression.c_str());
2446
- } else {
2447
- #ifdef ROCKSDB_LITE
2448
- fprintf(stderr, "--options_file not supported in lite mode\n");
2449
- exit(1);
2450
2329
  #else
2451
- DBOptions db_options;
2452
- std::vector<ColumnFamilyDescriptor> cf_descriptors;
2453
- Status s = LoadOptionsFromFile(FLAGS_options_file, db_stress_env,
2454
- &db_options, &cf_descriptors);
2455
- db_options.env = new DbStressEnvWrapper(db_stress_env);
2456
- if (!s.ok()) {
2457
- fprintf(stderr, "Unable to load options file %s --- %s\n",
2458
- FLAGS_options_file.c_str(), s.ToString().c_str());
2459
- exit(1);
2460
- }
2461
- options_ = Options(db_options, cf_descriptors[0].options);
2462
- #endif // ROCKSDB_LITE
2463
- }
2464
-
2465
- if (FLAGS_rate_limiter_bytes_per_sec > 0) {
2466
- options_.rate_limiter.reset(NewGenericRateLimiter(
2467
- FLAGS_rate_limiter_bytes_per_sec, 1000 /* refill_period_us */,
2468
- 10 /* fairness */,
2469
- FLAGS_rate_limit_bg_reads ? RateLimiter::Mode::kReadsOnly
2470
- : RateLimiter::Mode::kWritesOnly));
2471
- }
2472
- if (FLAGS_sst_file_manager_bytes_per_sec > 0 ||
2473
- FLAGS_sst_file_manager_bytes_per_truncate > 0) {
2474
- Status status;
2475
- options_.sst_file_manager.reset(NewSstFileManager(
2476
- db_stress_env, options_.info_log, "" /* trash_dir */,
2477
- static_cast<int64_t>(FLAGS_sst_file_manager_bytes_per_sec),
2478
- true /* delete_existing_trash */, &status,
2479
- 0.25 /* max_trash_db_ratio */,
2480
- FLAGS_sst_file_manager_bytes_per_truncate));
2481
- if (!status.ok()) {
2482
- fprintf(stderr, "SstFileManager creation failed: %s\n",
2483
- status.ToString().c_str());
2484
- exit(1);
2485
- }
2330
+ (void)shared;
2331
+ #endif
2332
+ if (!InitializeOptionsFromFile(options_)) {
2333
+ InitializeOptionsFromFlags(cache_, compressed_cache_, filter_policy_,
2334
+ options_);
2486
2335
  }
2336
+ InitializeOptionsGeneral(cache_, compressed_cache_, filter_policy_, options_);
2487
2337
 
2488
2338
  if (FLAGS_prefix_size == 0 && FLAGS_rep_factory == kHashSkipList) {
2489
2339
  fprintf(stderr,
@@ -2495,40 +2345,6 @@ void StressTest::Open() {
2495
2345
  "WARNING: prefix_size is non-zero but "
2496
2346
  "memtablerep != prefix_hash\n");
2497
2347
  }
2498
- switch (FLAGS_rep_factory) {
2499
- case kSkipList:
2500
- // no need to do anything
2501
- break;
2502
- #ifndef ROCKSDB_LITE
2503
- case kHashSkipList:
2504
- options_.memtable_factory.reset(NewHashSkipListRepFactory(10000));
2505
- break;
2506
- case kVectorRep:
2507
- options_.memtable_factory.reset(new VectorRepFactory());
2508
- break;
2509
- #else
2510
- default:
2511
- fprintf(stderr,
2512
- "RocksdbLite only supports skip list mem table. Skip "
2513
- "--rep_factory\n");
2514
- #endif // ROCKSDB_LITE
2515
- }
2516
-
2517
- if (FLAGS_use_full_merge_v1) {
2518
- options_.merge_operator = MergeOperators::CreateDeprecatedPutOperator();
2519
- } else {
2520
- options_.merge_operator = MergeOperators::CreatePutOperator();
2521
- }
2522
- if (FLAGS_enable_compaction_filter) {
2523
- options_.compaction_filter_factory =
2524
- std::make_shared<DbStressCompactionFilterFactory>();
2525
- }
2526
- options_.table_properties_collector_factories.emplace_back(
2527
- std::make_shared<DbStressTablePropertiesCollectorFactory>());
2528
-
2529
- options_.best_efforts_recovery = FLAGS_best_efforts_recovery;
2530
- options_.paranoid_file_checks = FLAGS_paranoid_file_checks;
2531
- options_.fail_if_options_file_error = FLAGS_fail_if_options_file_error;
2532
2348
 
2533
2349
  if ((options_.enable_blob_files || options_.enable_blob_garbage_collection ||
2534
2350
  FLAGS_allow_setting_blob_options_dynamically) &&
@@ -2556,10 +2372,6 @@ void StressTest::Open() {
2556
2372
 
2557
2373
  Status s;
2558
2374
 
2559
- if (FLAGS_user_timestamp_size > 0) {
2560
- CheckAndSetOptionsForUserTimestamp();
2561
- }
2562
-
2563
2375
  if (FLAGS_ttl == -1) {
2564
2376
  std::vector<std::string> existing_column_families;
2565
2377
  s = DB::ListColumnFamilies(DBOptions(options_), FLAGS_db,
@@ -2603,19 +2415,20 @@ void StressTest::Open() {
2603
2415
  cf_descriptors.emplace_back(name, ColumnFamilyOptions(options_));
2604
2416
  }
2605
2417
  while (cf_descriptors.size() < (size_t)FLAGS_column_families) {
2606
- std::string name = ToString(new_column_family_name_.load());
2418
+ std::string name = std::to_string(new_column_family_name_.load());
2607
2419
  new_column_family_name_++;
2608
2420
  cf_descriptors.emplace_back(name, ColumnFamilyOptions(options_));
2609
2421
  column_family_names_.push_back(name);
2610
2422
  }
2423
+
2611
2424
  options_.listeners.clear();
2612
2425
  #ifndef ROCKSDB_LITE
2613
2426
  options_.listeners.emplace_back(new DbStressListener(
2614
2427
  FLAGS_db, options_.db_paths, cf_descriptors, db_stress_listener_env));
2615
2428
  #endif // !ROCKSDB_LITE
2616
- options_.create_missing_column_families = true;
2429
+ RegisterAdditionalListeners();
2430
+
2617
2431
  if (!FLAGS_use_txn) {
2618
- #ifndef NDEBUG
2619
2432
  // Determine whether we need to ingest file metadata write failures
2620
2433
  // during DB reopen. If it does, enable it.
2621
2434
  // Only ingest metadata error if it is reopening, as initial open
@@ -2657,7 +2470,6 @@ void StressTest::Open() {
2657
2470
  }
2658
2471
  }
2659
2472
  while (true) {
2660
- #endif // NDEBUG
2661
2473
  #ifndef ROCKSDB_LITE
2662
2474
  // StackableDB-based BlobDB
2663
2475
  if (FLAGS_use_blob_db) {
@@ -2687,7 +2499,6 @@ void StressTest::Open() {
2687
2499
  }
2688
2500
  }
2689
2501
 
2690
- #ifndef NDEBUG
2691
2502
  if (ingest_meta_error || ingest_write_error || ingest_read_error) {
2692
2503
  fault_fs_guard->SetFilesystemDirectWritable(true);
2693
2504
  fault_fs_guard->DisableMetadataWriteErrorInjection();
@@ -2699,7 +2510,7 @@ void StressTest::Open() {
2699
2510
  // wait for all compactions to finish to make sure DB is in
2700
2511
  // clean state before executing queries.
2701
2512
  s = static_cast_with_check<DBImpl>(db_->GetRootDB())
2702
- ->TEST_WaitForCompact(true);
2513
+ ->WaitForCompact(true /* wait_unscheduled */);
2703
2514
  if (!s.ok()) {
2704
2515
  for (auto cf : column_families_) {
2705
2516
  delete cf;
@@ -2732,7 +2543,6 @@ void StressTest::Open() {
2732
2543
  }
2733
2544
  break;
2734
2545
  }
2735
- #endif // NDEBUG
2736
2546
  } else {
2737
2547
  #ifndef ROCKSDB_LITE
2738
2548
  TransactionDBOptions txn_db_options;
@@ -2751,6 +2561,7 @@ void StressTest::Open() {
2751
2561
  static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
2752
2562
  txn_db_options.wp_commit_cache_bits =
2753
2563
  static_cast<size_t>(FLAGS_wp_commit_cache_bits);
2564
+ PrepareTxnDbOptions(shared, txn_db_options);
2754
2565
  s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
2755
2566
  cf_descriptors, &column_families_, &txn_db_);
2756
2567
  if (!s.ok()) {
@@ -2910,7 +2721,7 @@ void StressTest::Reopen(ThreadState* thread) {
2910
2721
  auto now = clock_->NowMicros();
2911
2722
  fprintf(stdout, "%s Reopening database for the %dth time\n",
2912
2723
  clock_->TimeToString(now / 1000000).c_str(), num_times_reopened_);
2913
- Open();
2724
+ Open(thread->shared);
2914
2725
 
2915
2726
  if ((FLAGS_sync_fault_injection || FLAGS_disable_wal) && IsStateTracked()) {
2916
2727
  Status s = thread->shared->SaveAtAndAfter(db_);
@@ -2922,7 +2733,7 @@ void StressTest::Reopen(ThreadState* thread) {
2922
2733
  }
2923
2734
  }
2924
2735
 
2925
- void StressTest::CheckAndSetOptionsForUserTimestamp() {
2736
+ void CheckAndSetOptionsForUserTimestamp(Options& options) {
2926
2737
  assert(FLAGS_user_timestamp_size > 0);
2927
2738
  const Comparator* const cmp = test::BytewiseComparatorWithU64TsWrapper();
2928
2739
  assert(cmp);
@@ -2980,7 +2791,295 @@ void StressTest::CheckAndSetOptionsForUserTimestamp() {
2980
2791
  fprintf(stderr, "Bulk loading may not support timestamp yet.\n");
2981
2792
  exit(1);
2982
2793
  }
2983
- options_.comparator = cmp;
2794
+ options.comparator = cmp;
2984
2795
  }
2796
+
2797
+ bool InitializeOptionsFromFile(Options& options) {
2798
+ #ifndef ROCKSDB_LITE
2799
+ DBOptions db_options;
2800
+ std::vector<ColumnFamilyDescriptor> cf_descriptors;
2801
+ if (!FLAGS_options_file.empty()) {
2802
+ Status s = LoadOptionsFromFile(FLAGS_options_file, db_stress_env,
2803
+ &db_options, &cf_descriptors);
2804
+ if (!s.ok()) {
2805
+ fprintf(stderr, "Unable to load options file %s --- %s\n",
2806
+ FLAGS_options_file.c_str(), s.ToString().c_str());
2807
+ exit(1);
2808
+ }
2809
+ db_options.env = new DbStressEnvWrapper(db_stress_env);
2810
+ options = Options(db_options, cf_descriptors[0].options);
2811
+ return true;
2812
+ }
2813
+ #else
2814
+ (void)options;
2815
+ fprintf(stderr, "--options_file not supported in lite mode\n");
2816
+ exit(1);
2817
+ #endif //! ROCKSDB_LITE
2818
+ return false;
2819
+ }
2820
+
2821
+ void InitializeOptionsFromFlags(
2822
+ const std::shared_ptr<Cache>& cache,
2823
+ const std::shared_ptr<Cache>& block_cache_compressed,
2824
+ const std::shared_ptr<const FilterPolicy>& filter_policy,
2825
+ Options& options) {
2826
+ BlockBasedTableOptions block_based_options;
2827
+ block_based_options.block_cache = cache;
2828
+ block_based_options.cache_index_and_filter_blocks =
2829
+ FLAGS_cache_index_and_filter_blocks;
2830
+ block_based_options.metadata_cache_options.top_level_index_pinning =
2831
+ static_cast<PinningTier>(FLAGS_top_level_index_pinning);
2832
+ block_based_options.metadata_cache_options.partition_pinning =
2833
+ static_cast<PinningTier>(FLAGS_partition_pinning);
2834
+ block_based_options.metadata_cache_options.unpartitioned_pinning =
2835
+ static_cast<PinningTier>(FLAGS_unpartitioned_pinning);
2836
+ block_based_options.block_cache_compressed = block_cache_compressed;
2837
+ block_based_options.checksum = checksum_type_e;
2838
+ block_based_options.block_size = FLAGS_block_size;
2839
+ block_based_options.cache_usage_options.options_overrides.insert(
2840
+ {CacheEntryRole::kCompressionDictionaryBuildingBuffer,
2841
+ {/*.charged = */ FLAGS_charge_compression_dictionary_building_buffer
2842
+ ? CacheEntryRoleOptions::Decision::kEnabled
2843
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2844
+ block_based_options.cache_usage_options.options_overrides.insert(
2845
+ {CacheEntryRole::kFilterConstruction,
2846
+ {/*.charged = */ FLAGS_charge_filter_construction
2847
+ ? CacheEntryRoleOptions::Decision::kEnabled
2848
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2849
+ block_based_options.cache_usage_options.options_overrides.insert(
2850
+ {CacheEntryRole::kBlockBasedTableReader,
2851
+ {/*.charged = */ FLAGS_charge_table_reader
2852
+ ? CacheEntryRoleOptions::Decision::kEnabled
2853
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2854
+ block_based_options.format_version =
2855
+ static_cast<uint32_t>(FLAGS_format_version);
2856
+ block_based_options.index_block_restart_interval =
2857
+ static_cast<int32_t>(FLAGS_index_block_restart_interval);
2858
+ block_based_options.filter_policy = filter_policy;
2859
+ block_based_options.partition_filters = FLAGS_partition_filters;
2860
+ block_based_options.optimize_filters_for_memory =
2861
+ FLAGS_optimize_filters_for_memory;
2862
+ block_based_options.detect_filter_construct_corruption =
2863
+ FLAGS_detect_filter_construct_corruption;
2864
+ block_based_options.index_type =
2865
+ static_cast<BlockBasedTableOptions::IndexType>(FLAGS_index_type);
2866
+ block_based_options.prepopulate_block_cache =
2867
+ static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
2868
+ FLAGS_prepopulate_block_cache);
2869
+ options.table_factory.reset(NewBlockBasedTableFactory(block_based_options));
2870
+ options.db_write_buffer_size = FLAGS_db_write_buffer_size;
2871
+ options.write_buffer_size = FLAGS_write_buffer_size;
2872
+ options.max_write_buffer_number = FLAGS_max_write_buffer_number;
2873
+ options.min_write_buffer_number_to_merge =
2874
+ FLAGS_min_write_buffer_number_to_merge;
2875
+ options.max_write_buffer_number_to_maintain =
2876
+ FLAGS_max_write_buffer_number_to_maintain;
2877
+ options.max_write_buffer_size_to_maintain =
2878
+ FLAGS_max_write_buffer_size_to_maintain;
2879
+ options.memtable_prefix_bloom_size_ratio =
2880
+ FLAGS_memtable_prefix_bloom_size_ratio;
2881
+ options.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
2882
+ options.disable_auto_compactions = FLAGS_disable_auto_compactions;
2883
+ options.max_background_compactions = FLAGS_max_background_compactions;
2884
+ options.max_background_flushes = FLAGS_max_background_flushes;
2885
+ options.compaction_style =
2886
+ static_cast<ROCKSDB_NAMESPACE::CompactionStyle>(FLAGS_compaction_style);
2887
+ if (FLAGS_prefix_size >= 0) {
2888
+ options.prefix_extractor.reset(NewFixedPrefixTransform(FLAGS_prefix_size));
2889
+ }
2890
+ options.max_open_files = FLAGS_open_files;
2891
+ options.statistics = dbstats;
2892
+ options.env = db_stress_env;
2893
+ options.use_fsync = FLAGS_use_fsync;
2894
+ options.compaction_readahead_size = FLAGS_compaction_readahead_size;
2895
+ options.allow_mmap_reads = FLAGS_mmap_read;
2896
+ options.allow_mmap_writes = FLAGS_mmap_write;
2897
+ options.use_direct_reads = FLAGS_use_direct_reads;
2898
+ options.use_direct_io_for_flush_and_compaction =
2899
+ FLAGS_use_direct_io_for_flush_and_compaction;
2900
+ options.recycle_log_file_num =
2901
+ static_cast<size_t>(FLAGS_recycle_log_file_num);
2902
+ options.target_file_size_base = FLAGS_target_file_size_base;
2903
+ options.target_file_size_multiplier = FLAGS_target_file_size_multiplier;
2904
+ options.max_bytes_for_level_base = FLAGS_max_bytes_for_level_base;
2905
+ options.max_bytes_for_level_multiplier = FLAGS_max_bytes_for_level_multiplier;
2906
+ options.level0_stop_writes_trigger = FLAGS_level0_stop_writes_trigger;
2907
+ options.level0_slowdown_writes_trigger = FLAGS_level0_slowdown_writes_trigger;
2908
+ options.level0_file_num_compaction_trigger =
2909
+ FLAGS_level0_file_num_compaction_trigger;
2910
+ options.compression = compression_type_e;
2911
+ options.bottommost_compression = bottommost_compression_type_e;
2912
+ options.compression_opts.max_dict_bytes = FLAGS_compression_max_dict_bytes;
2913
+ options.compression_opts.zstd_max_train_bytes =
2914
+ FLAGS_compression_zstd_max_train_bytes;
2915
+ options.compression_opts.parallel_threads =
2916
+ FLAGS_compression_parallel_threads;
2917
+ options.compression_opts.max_dict_buffer_bytes =
2918
+ FLAGS_compression_max_dict_buffer_bytes;
2919
+ if (ZSTD_FinalizeDictionarySupported()) {
2920
+ options.compression_opts.use_zstd_dict_trainer =
2921
+ FLAGS_compression_use_zstd_dict_trainer;
2922
+ } else if (!FLAGS_compression_use_zstd_dict_trainer) {
2923
+ fprintf(
2924
+ stderr,
2925
+ "WARNING: use_zstd_dict_trainer is false but zstd finalizeDictionary "
2926
+ "cannot be used because ZSTD 1.4.5+ is not linked with the binary."
2927
+ " zstd dictionary trainer will be used.\n");
2928
+ }
2929
+ options.max_manifest_file_size = FLAGS_max_manifest_file_size;
2930
+ options.inplace_update_support = FLAGS_in_place_update;
2931
+ options.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
2932
+ options.allow_concurrent_memtable_write =
2933
+ FLAGS_allow_concurrent_memtable_write;
2934
+ options.experimental_mempurge_threshold =
2935
+ FLAGS_experimental_mempurge_threshold;
2936
+ options.periodic_compaction_seconds = FLAGS_periodic_compaction_seconds;
2937
+ options.ttl = FLAGS_compaction_ttl;
2938
+ options.enable_pipelined_write = FLAGS_enable_pipelined_write;
2939
+ options.enable_write_thread_adaptive_yield =
2940
+ FLAGS_enable_write_thread_adaptive_yield;
2941
+ options.compaction_options_universal.size_ratio = FLAGS_universal_size_ratio;
2942
+ options.compaction_options_universal.min_merge_width =
2943
+ FLAGS_universal_min_merge_width;
2944
+ options.compaction_options_universal.max_merge_width =
2945
+ FLAGS_universal_max_merge_width;
2946
+ options.compaction_options_universal.max_size_amplification_percent =
2947
+ FLAGS_universal_max_size_amplification_percent;
2948
+ options.atomic_flush = FLAGS_atomic_flush;
2949
+ options.avoid_unnecessary_blocking_io = FLAGS_avoid_unnecessary_blocking_io;
2950
+ options.write_dbid_to_manifest = FLAGS_write_dbid_to_manifest;
2951
+ options.avoid_flush_during_recovery = FLAGS_avoid_flush_during_recovery;
2952
+ options.max_write_batch_group_size_bytes =
2953
+ FLAGS_max_write_batch_group_size_bytes;
2954
+ options.level_compaction_dynamic_level_bytes =
2955
+ FLAGS_level_compaction_dynamic_level_bytes;
2956
+ options.track_and_verify_wals_in_manifest = true;
2957
+ options.verify_sst_unique_id_in_manifest =
2958
+ FLAGS_verify_sst_unique_id_in_manifest;
2959
+
2960
+ // Integrated BlobDB
2961
+ options.enable_blob_files = FLAGS_enable_blob_files;
2962
+ options.min_blob_size = FLAGS_min_blob_size;
2963
+ options.blob_file_size = FLAGS_blob_file_size;
2964
+ options.blob_compression_type =
2965
+ StringToCompressionType(FLAGS_blob_compression_type.c_str());
2966
+ options.enable_blob_garbage_collection = FLAGS_enable_blob_garbage_collection;
2967
+ options.blob_garbage_collection_age_cutoff =
2968
+ FLAGS_blob_garbage_collection_age_cutoff;
2969
+ options.blob_garbage_collection_force_threshold =
2970
+ FLAGS_blob_garbage_collection_force_threshold;
2971
+ options.blob_compaction_readahead_size = FLAGS_blob_compaction_readahead_size;
2972
+
2973
+ options.wal_compression =
2974
+ StringToCompressionType(FLAGS_wal_compression.c_str());
2975
+
2976
+ switch (FLAGS_rep_factory) {
2977
+ case kSkipList:
2978
+ // no need to do anything
2979
+ break;
2980
+ #ifndef ROCKSDB_LITE
2981
+ case kHashSkipList:
2982
+ options.memtable_factory.reset(NewHashSkipListRepFactory(10000));
2983
+ break;
2984
+ case kVectorRep:
2985
+ options.memtable_factory.reset(new VectorRepFactory());
2986
+ break;
2987
+ #else
2988
+ default:
2989
+ fprintf(stderr,
2990
+ "RocksdbLite only supports skip list mem table. Skip "
2991
+ "--rep_factory\n");
2992
+ #endif // ROCKSDB_LITE
2993
+ }
2994
+
2995
+ if (FLAGS_use_full_merge_v1) {
2996
+ options.merge_operator = MergeOperators::CreateDeprecatedPutOperator();
2997
+ } else {
2998
+ options.merge_operator = MergeOperators::CreatePutOperator();
2999
+ }
3000
+
3001
+ if (FLAGS_enable_compaction_filter) {
3002
+ options.compaction_filter_factory =
3003
+ std::make_shared<DbStressCompactionFilterFactory>();
3004
+ }
3005
+
3006
+ options.best_efforts_recovery = FLAGS_best_efforts_recovery;
3007
+ options.paranoid_file_checks = FLAGS_paranoid_file_checks;
3008
+ options.fail_if_options_file_error = FLAGS_fail_if_options_file_error;
3009
+
3010
+ if (FLAGS_user_timestamp_size > 0) {
3011
+ CheckAndSetOptionsForUserTimestamp(options);
3012
+ }
3013
+ }
3014
+
3015
+ void InitializeOptionsGeneral(
3016
+ const std::shared_ptr<Cache>& cache,
3017
+ const std::shared_ptr<Cache>& block_cache_compressed,
3018
+ const std::shared_ptr<const FilterPolicy>& filter_policy,
3019
+ Options& options) {
3020
+ options.create_missing_column_families = true;
3021
+ options.create_if_missing = true;
3022
+
3023
+ if (!options.statistics) {
3024
+ options.statistics = dbstats;
3025
+ }
3026
+
3027
+ if (options.env == Options().env) {
3028
+ options.env = db_stress_env;
3029
+ }
3030
+
3031
+ assert(options.table_factory);
3032
+ auto table_options =
3033
+ options.table_factory->GetOptions<BlockBasedTableOptions>();
3034
+ if (table_options) {
3035
+ if (FLAGS_cache_size > 0) {
3036
+ table_options->block_cache = cache;
3037
+ }
3038
+ if (!table_options->block_cache_compressed &&
3039
+ FLAGS_compressed_cache_size > 0) {
3040
+ table_options->block_cache_compressed = block_cache_compressed;
3041
+ }
3042
+ if (!table_options->filter_policy) {
3043
+ table_options->filter_policy = filter_policy;
3044
+ }
3045
+ }
3046
+
3047
+ // TODO: row_cache, thread-pool IO priority, CPU priority.
3048
+
3049
+ if (!options.rate_limiter) {
3050
+ if (FLAGS_rate_limiter_bytes_per_sec > 0) {
3051
+ options.rate_limiter.reset(NewGenericRateLimiter(
3052
+ FLAGS_rate_limiter_bytes_per_sec, 1000 /* refill_period_us */,
3053
+ 10 /* fairness */,
3054
+ FLAGS_rate_limit_bg_reads ? RateLimiter::Mode::kReadsOnly
3055
+ : RateLimiter::Mode::kWritesOnly));
3056
+ }
3057
+ }
3058
+
3059
+ if (!options.file_checksum_gen_factory) {
3060
+ options.file_checksum_gen_factory =
3061
+ GetFileChecksumImpl(FLAGS_file_checksum_impl);
3062
+ }
3063
+
3064
+ if (FLAGS_sst_file_manager_bytes_per_sec > 0 ||
3065
+ FLAGS_sst_file_manager_bytes_per_truncate > 0) {
3066
+ Status status;
3067
+ options.sst_file_manager.reset(NewSstFileManager(
3068
+ db_stress_env, options.info_log, "" /* trash_dir */,
3069
+ static_cast<int64_t>(FLAGS_sst_file_manager_bytes_per_sec),
3070
+ true /* delete_existing_trash */, &status,
3071
+ 0.25 /* max_trash_db_ratio */,
3072
+ FLAGS_sst_file_manager_bytes_per_truncate));
3073
+ if (!status.ok()) {
3074
+ fprintf(stderr, "SstFileManager creation failed: %s\n",
3075
+ status.ToString().c_str());
3076
+ exit(1);
3077
+ }
3078
+ }
3079
+
3080
+ options.table_properties_collector_factories.emplace_back(
3081
+ std::make_shared<DbStressTablePropertiesCollectorFactory>());
3082
+ }
3083
+
2985
3084
  } // namespace ROCKSDB_NAMESPACE
2986
3085
  #endif // GFLAGS