@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
@@ -68,7 +68,7 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
68
68
  "kZSTDNotFinalCompression"},
69
69
  {"bottommost_compression", "kLZ4Compression"},
70
70
  {"bottommost_compression_opts", "5:6:7:8:10:true"},
71
- {"compression_opts", "4:5:6:7:8:true"},
71
+ {"compression_opts", "4:5:6:7:8:2:true:100:false"},
72
72
  {"num_levels", "8"},
73
73
  {"level0_file_num_compaction_trigger", "8"},
74
74
  {"level0_slowdown_writes_trigger", "9"},
@@ -118,6 +118,7 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
118
118
  {"error_if_exists", "false"},
119
119
  {"paranoid_checks", "true"},
120
120
  {"track_and_verify_wals_in_manifest", "true"},
121
+ {"verify_sst_unique_id_in_manifest", "true"},
121
122
  {"max_open_files", "32"},
122
123
  {"max_total_wal_size", "33"},
123
124
  {"use_fsync", "true"},
@@ -190,9 +191,10 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
190
191
  ASSERT_EQ(new_cf_opt.compression_opts.strategy, 6);
191
192
  ASSERT_EQ(new_cf_opt.compression_opts.max_dict_bytes, 7u);
192
193
  ASSERT_EQ(new_cf_opt.compression_opts.zstd_max_train_bytes, 8u);
193
- ASSERT_EQ(new_cf_opt.compression_opts.parallel_threads,
194
- CompressionOptions().parallel_threads);
194
+ ASSERT_EQ(new_cf_opt.compression_opts.parallel_threads, 2u);
195
195
  ASSERT_EQ(new_cf_opt.compression_opts.enabled, true);
196
+ ASSERT_EQ(new_cf_opt.compression_opts.max_dict_buffer_bytes, 100u);
197
+ ASSERT_EQ(new_cf_opt.compression_opts.use_zstd_dict_trainer, false);
196
198
  ASSERT_EQ(new_cf_opt.bottommost_compression, kLZ4Compression);
197
199
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.window_bits, 5);
198
200
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.level, 6);
@@ -202,6 +204,8 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
202
204
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.parallel_threads,
203
205
  CompressionOptions().parallel_threads);
204
206
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.enabled, true);
207
+ ASSERT_EQ(new_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer,
208
+ CompressionOptions().use_zstd_dict_trainer);
205
209
  ASSERT_EQ(new_cf_opt.num_levels, 8);
206
210
  ASSERT_EQ(new_cf_opt.level0_file_num_compaction_trigger, 8);
207
211
  ASSERT_EQ(new_cf_opt.level0_slowdown_writes_trigger, 9);
@@ -278,6 +282,7 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
278
282
  ASSERT_EQ(new_db_opt.error_if_exists, false);
279
283
  ASSERT_EQ(new_db_opt.paranoid_checks, true);
280
284
  ASSERT_EQ(new_db_opt.track_and_verify_wals_in_manifest, true);
285
+ ASSERT_EQ(new_db_opt.verify_sst_unique_id_in_manifest, true);
281
286
  ASSERT_EQ(new_db_opt.max_open_files, 32);
282
287
  ASSERT_EQ(new_db_opt.max_total_wal_size, static_cast<uint64_t>(33));
283
288
  ASSERT_EQ(new_db_opt.use_fsync, true);
@@ -602,6 +607,8 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
602
607
  ASSERT_EQ(base_cf_opt.compression_opts.parallel_threads,
603
608
  dflt.parallel_threads);
604
609
  ASSERT_EQ(base_cf_opt.compression_opts.enabled, dflt.enabled);
610
+ ASSERT_EQ(base_cf_opt.compression_opts.use_zstd_dict_trainer,
611
+ dflt.use_zstd_dict_trainer);
605
612
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.window_bits, 4);
606
613
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.level, 5);
607
614
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.strategy, 6);
@@ -611,10 +618,12 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
611
618
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.parallel_threads,
612
619
  dflt.parallel_threads);
613
620
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.enabled, dflt.enabled);
621
+ ASSERT_EQ(base_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer,
622
+ dflt.use_zstd_dict_trainer);
614
623
 
615
624
  ASSERT_OK(GetColumnFamilyOptionsFromString(
616
625
  config_options, ColumnFamilyOptions(),
617
- "compression_opts=4:5:6:7:8:9:true; "
626
+ "compression_opts=4:5:6:7:8:9:true:10:false; "
618
627
  "bottommost_compression_opts=5:6:7:8:9:false",
619
628
  &base_cf_opt));
620
629
  ASSERT_EQ(base_cf_opt.compression_opts.window_bits, 4);
@@ -624,6 +633,8 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
624
633
  ASSERT_EQ(base_cf_opt.compression_opts.zstd_max_train_bytes, 8u);
625
634
  ASSERT_EQ(base_cf_opt.compression_opts.parallel_threads, 9u);
626
635
  ASSERT_EQ(base_cf_opt.compression_opts.enabled, true);
636
+ ASSERT_EQ(base_cf_opt.compression_opts.max_dict_buffer_bytes, 10u);
637
+ ASSERT_EQ(base_cf_opt.compression_opts.use_zstd_dict_trainer, false);
627
638
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.window_bits, 5);
628
639
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.level, 6);
629
640
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.strategy, 7);
@@ -632,6 +643,8 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
632
643
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.parallel_threads,
633
644
  dflt.parallel_threads);
634
645
  ASSERT_EQ(base_cf_opt.bottommost_compression_opts.enabled, false);
646
+ ASSERT_EQ(base_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer,
647
+ dflt.use_zstd_dict_trainer);
635
648
 
636
649
  ASSERT_OK(
637
650
  GetStringFromColumnFamilyOptions(config_options, base_cf_opt, &opts_str));
@@ -644,6 +657,8 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
644
657
  ASSERT_EQ(new_cf_opt.compression_opts.zstd_max_train_bytes, 8u);
645
658
  ASSERT_EQ(new_cf_opt.compression_opts.parallel_threads, 9u);
646
659
  ASSERT_EQ(new_cf_opt.compression_opts.enabled, true);
660
+ ASSERT_EQ(base_cf_opt.compression_opts.max_dict_buffer_bytes, 10u);
661
+ ASSERT_EQ(base_cf_opt.compression_opts.use_zstd_dict_trainer, false);
647
662
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.window_bits, 5);
648
663
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.level, 6);
649
664
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.strategy, 7);
@@ -652,15 +667,18 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
652
667
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.parallel_threads,
653
668
  dflt.parallel_threads);
654
669
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.enabled, false);
670
+ ASSERT_EQ(base_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer,
671
+ dflt.use_zstd_dict_trainer);
655
672
 
656
673
  // Test as struct values
657
674
  ASSERT_OK(GetColumnFamilyOptionsFromString(
658
675
  config_options, ColumnFamilyOptions(),
659
676
  "compression_opts={window_bits=5; level=6; strategy=7; max_dict_bytes=8;"
660
- "zstd_max_train_bytes=9;parallel_threads=10;enabled=true}; "
677
+ "zstd_max_train_bytes=9;parallel_threads=10;enabled=true;use_zstd_dict_"
678
+ "trainer=false}; "
661
679
  "bottommost_compression_opts={window_bits=4; level=5; strategy=6;"
662
680
  " max_dict_bytes=7;zstd_max_train_bytes=8;parallel_threads=9;"
663
- "enabled=false}; ",
681
+ "enabled=false;use_zstd_dict_trainer=true}; ",
664
682
  &new_cf_opt));
665
683
  ASSERT_EQ(new_cf_opt.compression_opts.window_bits, 5);
666
684
  ASSERT_EQ(new_cf_opt.compression_opts.level, 6);
@@ -669,6 +687,7 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
669
687
  ASSERT_EQ(new_cf_opt.compression_opts.zstd_max_train_bytes, 9u);
670
688
  ASSERT_EQ(new_cf_opt.compression_opts.parallel_threads, 10u);
671
689
  ASSERT_EQ(new_cf_opt.compression_opts.enabled, true);
690
+ ASSERT_EQ(new_cf_opt.compression_opts.use_zstd_dict_trainer, false);
672
691
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.window_bits, 4);
673
692
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.level, 5);
674
693
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.strategy, 6);
@@ -676,6 +695,7 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
676
695
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.zstd_max_train_bytes, 8u);
677
696
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.parallel_threads, 9u);
678
697
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.enabled, false);
698
+ ASSERT_EQ(new_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer, true);
679
699
 
680
700
  ASSERT_OK(GetColumnFamilyOptionsFromString(
681
701
  config_options, base_cf_opt,
@@ -707,6 +727,8 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
707
727
  base_cf_opt.bottommost_compression_opts.parallel_threads);
708
728
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.enabled,
709
729
  base_cf_opt.bottommost_compression_opts.enabled);
730
+ ASSERT_EQ(new_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer,
731
+ base_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer);
710
732
 
711
733
  // Test a few individual struct values
712
734
  ASSERT_OK(GetColumnFamilyOptionsFromString(
@@ -799,6 +821,7 @@ TEST_F(OptionsTest, OldInterfaceTest) {
799
821
  {"error_if_exists", "false"},
800
822
  {"paranoid_checks", "true"},
801
823
  {"track_and_verify_wals_in_manifest", "true"},
824
+ {"verify_sst_unique_id_in_manifest", "true"},
802
825
  {"max_open_files", "32"},
803
826
  };
804
827
  ASSERT_OK(GetDBOptionsFromMap(base_db_opt, db_options_map, &new_db_opt));
@@ -807,6 +830,7 @@ TEST_F(OptionsTest, OldInterfaceTest) {
807
830
  ASSERT_EQ(new_db_opt.error_if_exists, false);
808
831
  ASSERT_EQ(new_db_opt.paranoid_checks, true);
809
832
  ASSERT_EQ(new_db_opt.track_and_verify_wals_in_manifest, true);
833
+ ASSERT_EQ(new_db_opt.verify_sst_unique_id_in_manifest, true);
810
834
  ASSERT_EQ(new_db_opt.max_open_files, 32);
811
835
  db_options_map["unknown_option"] = "1";
812
836
  Status s = GetDBOptionsFromMap(base_db_opt, db_options_map, &new_db_opt);
@@ -854,8 +878,6 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
854
878
  "block_cache=1M;block_cache_compressed=1k;block_size=1024;"
855
879
  "block_size_deviation=8;block_restart_interval=4;"
856
880
  "format_version=5;whole_key_filtering=1;"
857
- "reserve_table_builder_memory=true;"
858
- "reserve_table_reader_memory=true;"
859
881
  "filter_policy=bloomfilter:4.567:false;detect_filter_construct_"
860
882
  "corruption=true;"
861
883
  // A bug caused read_amp_bytes_per_bit to be a large integer in OPTIONS
@@ -877,8 +899,6 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
877
899
  ASSERT_EQ(new_opt.format_version, 5U);
878
900
  ASSERT_EQ(new_opt.whole_key_filtering, true);
879
901
  ASSERT_EQ(new_opt.detect_filter_construct_corruption, true);
880
- ASSERT_EQ(new_opt.reserve_table_builder_memory, true);
881
- ASSERT_EQ(new_opt.reserve_table_reader_memory, true);
882
902
  ASSERT_TRUE(new_opt.filter_policy != nullptr);
883
903
  auto bfp = new_opt.filter_policy->CheckedCast<BloomFilterPolicy>();
884
904
  ASSERT_NE(bfp, nullptr);
@@ -1351,6 +1371,7 @@ TEST_F(OptionsTest, GetOptionsFromStringTest) {
1351
1371
  ASSERT_EQ(new_options.compression_opts.zstd_max_train_bytes, 0u);
1352
1372
  ASSERT_EQ(new_options.compression_opts.parallel_threads, 1u);
1353
1373
  ASSERT_EQ(new_options.compression_opts.enabled, false);
1374
+ ASSERT_EQ(new_options.compression_opts.use_zstd_dict_trainer, true);
1354
1375
  ASSERT_EQ(new_options.bottommost_compression, kDisableCompressionOption);
1355
1376
  ASSERT_EQ(new_options.bottommost_compression_opts.window_bits, 5);
1356
1377
  ASSERT_EQ(new_options.bottommost_compression_opts.level, 6);
@@ -1359,6 +1380,8 @@ TEST_F(OptionsTest, GetOptionsFromStringTest) {
1359
1380
  ASSERT_EQ(new_options.bottommost_compression_opts.zstd_max_train_bytes, 0u);
1360
1381
  ASSERT_EQ(new_options.bottommost_compression_opts.parallel_threads, 1u);
1361
1382
  ASSERT_EQ(new_options.bottommost_compression_opts.enabled, false);
1383
+ ASSERT_EQ(new_options.bottommost_compression_opts.use_zstd_dict_trainer,
1384
+ true);
1362
1385
  ASSERT_EQ(new_options.write_buffer_size, 10U);
1363
1386
  ASSERT_EQ(new_options.max_write_buffer_number, 16);
1364
1387
  const auto new_bbto =
@@ -2263,7 +2286,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2263
2286
  "kZSTDNotFinalCompression"},
2264
2287
  {"bottommost_compression", "kLZ4Compression"},
2265
2288
  {"bottommost_compression_opts", "5:6:7:8:9:true"},
2266
- {"compression_opts", "4:5:6:7:8:true"},
2289
+ {"compression_opts", "4:5:6:7:8:9:true:10:false"},
2267
2290
  {"num_levels", "8"},
2268
2291
  {"level0_file_num_compaction_trigger", "8"},
2269
2292
  {"level0_slowdown_writes_trigger", "9"},
@@ -2316,6 +2339,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2316
2339
  {"error_if_exists", "false"},
2317
2340
  {"paranoid_checks", "true"},
2318
2341
  {"track_and_verify_wals_in_manifest", "true"},
2342
+ {"verify_sst_unique_id_in_manifest", "true"},
2319
2343
  {"max_open_files", "32"},
2320
2344
  {"max_total_wal_size", "33"},
2321
2345
  {"use_fsync", "true"},
@@ -2380,9 +2404,10 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2380
2404
  ASSERT_EQ(new_cf_opt.compression_opts.strategy, 6);
2381
2405
  ASSERT_EQ(new_cf_opt.compression_opts.max_dict_bytes, 7u);
2382
2406
  ASSERT_EQ(new_cf_opt.compression_opts.zstd_max_train_bytes, 8u);
2383
- ASSERT_EQ(new_cf_opt.compression_opts.parallel_threads,
2384
- CompressionOptions().parallel_threads);
2407
+ ASSERT_EQ(new_cf_opt.compression_opts.parallel_threads, 9u);
2385
2408
  ASSERT_EQ(new_cf_opt.compression_opts.enabled, true);
2409
+ ASSERT_EQ(new_cf_opt.compression_opts.max_dict_buffer_bytes, 10u);
2410
+ ASSERT_EQ(new_cf_opt.compression_opts.use_zstd_dict_trainer, false);
2386
2411
  ASSERT_EQ(new_cf_opt.bottommost_compression, kLZ4Compression);
2387
2412
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.window_bits, 5);
2388
2413
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.level, 6);
@@ -2392,6 +2417,10 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2392
2417
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.parallel_threads,
2393
2418
  CompressionOptions().parallel_threads);
2394
2419
  ASSERT_EQ(new_cf_opt.bottommost_compression_opts.enabled, true);
2420
+ ASSERT_EQ(new_cf_opt.bottommost_compression_opts.max_dict_buffer_bytes,
2421
+ CompressionOptions().max_dict_buffer_bytes);
2422
+ ASSERT_EQ(new_cf_opt.bottommost_compression_opts.use_zstd_dict_trainer,
2423
+ CompressionOptions().use_zstd_dict_trainer);
2395
2424
  ASSERT_EQ(new_cf_opt.num_levels, 8);
2396
2425
  ASSERT_EQ(new_cf_opt.level0_file_num_compaction_trigger, 8);
2397
2426
  ASSERT_EQ(new_cf_opt.level0_slowdown_writes_trigger, 9);
@@ -3054,6 +3083,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromStringTest) {
3054
3083
  ASSERT_EQ(new_options.compression_opts.zstd_max_train_bytes, 0u);
3055
3084
  ASSERT_EQ(new_options.compression_opts.parallel_threads, 1u);
3056
3085
  ASSERT_EQ(new_options.compression_opts.enabled, false);
3086
+ ASSERT_EQ(new_options.compression_opts.use_zstd_dict_trainer, true);
3057
3087
  ASSERT_EQ(new_options.bottommost_compression, kDisableCompressionOption);
3058
3088
  ASSERT_EQ(new_options.bottommost_compression_opts.window_bits, 5);
3059
3089
  ASSERT_EQ(new_options.bottommost_compression_opts.level, 6);
@@ -3062,6 +3092,8 @@ TEST_F(OptionsOldApiTest, GetOptionsFromStringTest) {
3062
3092
  ASSERT_EQ(new_options.bottommost_compression_opts.zstd_max_train_bytes, 0u);
3063
3093
  ASSERT_EQ(new_options.bottommost_compression_opts.parallel_threads, 1u);
3064
3094
  ASSERT_EQ(new_options.bottommost_compression_opts.enabled, false);
3095
+ ASSERT_EQ(new_options.bottommost_compression_opts.use_zstd_dict_trainer,
3096
+ true);
3065
3097
  ASSERT_EQ(new_options.write_buffer_size, 10U);
3066
3098
  ASSERT_EQ(new_options.max_write_buffer_number, 16);
3067
3099
 
@@ -3346,31 +3378,31 @@ TEST_F(OptionsParserTest, IgnoreUnknownOptions) {
3346
3378
  if (case_id == 0) {
3347
3379
  // same version
3348
3380
  should_ignore = false;
3349
- version_string =
3350
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR) + ".0";
3381
+ version_string = std::to_string(ROCKSDB_MAJOR) + "." +
3382
+ std::to_string(ROCKSDB_MINOR) + ".0";
3351
3383
  } else if (case_id == 1) {
3352
3384
  // higher minor version
3353
3385
  should_ignore = true;
3354
- version_string =
3355
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR + 1) + ".0";
3386
+ version_string = std::to_string(ROCKSDB_MAJOR) + "." +
3387
+ std::to_string(ROCKSDB_MINOR + 1) + ".0";
3356
3388
  } else if (case_id == 2) {
3357
3389
  // higher major version.
3358
3390
  should_ignore = true;
3359
- version_string = ToString(ROCKSDB_MAJOR + 1) + ".0.0";
3391
+ version_string = std::to_string(ROCKSDB_MAJOR + 1) + ".0.0";
3360
3392
  } else if (case_id == 3) {
3361
3393
  // lower minor version
3362
3394
  #if ROCKSDB_MINOR == 0
3363
3395
  continue;
3364
3396
  #else
3365
- version_string =
3366
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR - 1) + ".0";
3397
+ version_string = std::to_string(ROCKSDB_MAJOR) + "." +
3398
+ std::to_string(ROCKSDB_MINOR - 1) + ".0";
3367
3399
  should_ignore = false;
3368
3400
  #endif
3369
3401
  } else {
3370
3402
  // lower major version
3371
3403
  should_ignore = false;
3372
- version_string =
3373
- ToString(ROCKSDB_MAJOR - 1) + "." + ToString(ROCKSDB_MINOR) + ".0";
3404
+ version_string = std::to_string(ROCKSDB_MAJOR - 1) + "." +
3405
+ std::to_string(ROCKSDB_MINOR) + ".0";
3374
3406
  }
3375
3407
 
3376
3408
  std::string options_file_content =
@@ -4082,9 +4114,10 @@ TEST_F(OptionsParserTest, IntegerParsing) {
4082
4114
  ASSERT_EQ(ParseUint32("4294967295"), 4294967295U);
4083
4115
  ASSERT_EQ(ParseSizeT("18446744073709551615"), 18446744073709551615U);
4084
4116
  ASSERT_EQ(ParseInt64("9223372036854775807"), 9223372036854775807);
4085
- ASSERT_EQ(ParseInt64("-9223372036854775808"), port::kMinInt64);
4117
+ ASSERT_EQ(ParseInt64("-9223372036854775808"),
4118
+ std::numeric_limits<int64_t>::min());
4086
4119
  ASSERT_EQ(ParseInt32("2147483647"), 2147483647);
4087
- ASSERT_EQ(ParseInt32("-2147483648"), port::kMinInt32);
4120
+ ASSERT_EQ(ParseInt32("-2147483648"), std::numeric_limits<int32_t>::min());
4088
4121
  ASSERT_EQ(ParseInt("-32767"), -32767);
4089
4122
  ASSERT_EQ(ParseDouble("-1.234567"), -1.234567);
4090
4123
  }
@@ -4265,19 +4298,20 @@ TEST_F(OptionTypeInfoTest, TestInvalidArgs) {
4265
4298
  }
4266
4299
 
4267
4300
  TEST_F(OptionTypeInfoTest, TestParseFunc) {
4268
- OptionTypeInfo opt_info(
4269
- 0, OptionType::kUnknown, OptionVerificationType::kNormal,
4270
- OptionTypeFlags::kNone,
4271
- [](const ConfigOptions& /*opts*/, const std::string& name,
4272
- const std::string& value, void* addr) {
4273
- auto ptr = static_cast<std::string*>(addr);
4274
- if (name == "Oops") {
4275
- return Status::InvalidArgument(value);
4276
- } else {
4277
- *ptr = value + " " + name;
4278
- return Status::OK();
4279
- }
4280
- });
4301
+ OptionTypeInfo opt_info(0, OptionType::kUnknown,
4302
+ OptionVerificationType::kNormal,
4303
+ OptionTypeFlags::kNone);
4304
+ opt_info.SetParseFunc([](const ConfigOptions& /*opts*/,
4305
+ const std::string& name, const std::string& value,
4306
+ void* addr) {
4307
+ auto ptr = static_cast<std::string*>(addr);
4308
+ if (name == "Oops") {
4309
+ return Status::InvalidArgument(value);
4310
+ } else {
4311
+ *ptr = value + " " + name;
4312
+ return Status::OK();
4313
+ }
4314
+ });
4281
4315
  ConfigOptions config_options;
4282
4316
  std::string base;
4283
4317
  ASSERT_OK(opt_info.Parse(config_options, "World", "Hello", &base));
@@ -4286,19 +4320,19 @@ TEST_F(OptionTypeInfoTest, TestParseFunc) {
4286
4320
  }
4287
4321
 
4288
4322
  TEST_F(OptionTypeInfoTest, TestSerializeFunc) {
4289
- OptionTypeInfo opt_info(
4290
- 0, OptionType::kString, OptionVerificationType::kNormal,
4291
- OptionTypeFlags::kNone, nullptr,
4292
- [](const ConfigOptions& /*opts*/, const std::string& name,
4293
- const void* /*addr*/, std::string* value) {
4294
- if (name == "Oops") {
4295
- return Status::InvalidArgument(name);
4296
- } else {
4297
- *value = name;
4298
- return Status::OK();
4299
- }
4300
- },
4301
- nullptr);
4323
+ OptionTypeInfo opt_info(0, OptionType::kString,
4324
+ OptionVerificationType::kNormal,
4325
+ OptionTypeFlags::kNone);
4326
+ opt_info.SetSerializeFunc([](const ConfigOptions& /*opts*/,
4327
+ const std::string& name, const void* /*addr*/,
4328
+ std::string* value) {
4329
+ if (name == "Oops") {
4330
+ return Status::InvalidArgument(name);
4331
+ } else {
4332
+ *value = name;
4333
+ return Status::OK();
4334
+ }
4335
+ });
4302
4336
  ConfigOptions config_options;
4303
4337
  std::string base;
4304
4338
  std::string value;
@@ -4308,24 +4342,24 @@ TEST_F(OptionTypeInfoTest, TestSerializeFunc) {
4308
4342
  }
4309
4343
 
4310
4344
  TEST_F(OptionTypeInfoTest, TestEqualsFunc) {
4311
- OptionTypeInfo opt_info(
4312
- 0, OptionType::kInt, OptionVerificationType::kNormal,
4313
- OptionTypeFlags::kNone, nullptr, nullptr,
4314
- [](const ConfigOptions& /*opts*/, const std::string& name,
4315
- const void* addr1, const void* addr2, std::string* mismatch) {
4316
- auto i1 = *(static_cast<const int*>(addr1));
4317
- auto i2 = *(static_cast<const int*>(addr2));
4318
- if (name == "LT") {
4319
- return i1 < i2;
4320
- } else if (name == "GT") {
4321
- return i1 > i2;
4322
- } else if (name == "EQ") {
4323
- return i1 == i2;
4324
- } else {
4325
- *mismatch = name + "???";
4326
- return false;
4327
- }
4328
- });
4345
+ OptionTypeInfo opt_info(0, OptionType::kInt, OptionVerificationType::kNormal,
4346
+ OptionTypeFlags::kNone);
4347
+ opt_info.SetEqualsFunc([](const ConfigOptions& /*opts*/,
4348
+ const std::string& name, const void* addr1,
4349
+ const void* addr2, std::string* mismatch) {
4350
+ auto i1 = *(static_cast<const int*>(addr1));
4351
+ auto i2 = *(static_cast<const int*>(addr2));
4352
+ if (name == "LT") {
4353
+ return i1 < i2;
4354
+ } else if (name == "GT") {
4355
+ return i1 > i2;
4356
+ } else if (name == "EQ") {
4357
+ return i1 == i2;
4358
+ } else {
4359
+ *mismatch = name + "???";
4360
+ return false;
4361
+ }
4362
+ });
4329
4363
 
4330
4364
  ConfigOptions config_options;
4331
4365
  int int1 = 100;
@@ -4341,6 +4375,64 @@ TEST_F(OptionTypeInfoTest, TestEqualsFunc) {
4341
4375
  ASSERT_EQ(mismatch, "NO???");
4342
4376
  }
4343
4377
 
4378
+ TEST_F(OptionTypeInfoTest, TestPrepareFunc) {
4379
+ OptionTypeInfo opt_info(0, OptionType::kInt, OptionVerificationType::kNormal,
4380
+ OptionTypeFlags::kNone);
4381
+ opt_info.SetPrepareFunc(
4382
+ [](const ConfigOptions& /*opts*/, const std::string& name, void* addr) {
4383
+ auto i1 = static_cast<int*>(addr);
4384
+ if (name == "x2") {
4385
+ *i1 *= 2;
4386
+ } else if (name == "/2") {
4387
+ *i1 /= 2;
4388
+ } else {
4389
+ return Status::InvalidArgument("Bad Argument", name);
4390
+ }
4391
+ return Status::OK();
4392
+ });
4393
+ ConfigOptions config_options;
4394
+ int int1 = 100;
4395
+ ASSERT_OK(opt_info.Prepare(config_options, "x2", &int1));
4396
+ ASSERT_EQ(int1, 200);
4397
+ ASSERT_OK(opt_info.Prepare(config_options, "/2", &int1));
4398
+ ASSERT_EQ(int1, 100);
4399
+ ASSERT_NOK(opt_info.Prepare(config_options, "??", &int1));
4400
+ ASSERT_EQ(int1, 100);
4401
+ }
4402
+ TEST_F(OptionTypeInfoTest, TestValidateFunc) {
4403
+ OptionTypeInfo opt_info(0, OptionType::kSizeT,
4404
+ OptionVerificationType::kNormal,
4405
+ OptionTypeFlags::kNone);
4406
+ opt_info.SetValidateFunc([](const DBOptions& db_opts,
4407
+ const ColumnFamilyOptions& cf_opts,
4408
+ const std::string& name, const void* addr) {
4409
+ const auto sz = static_cast<const size_t*>(addr);
4410
+ bool is_valid = false;
4411
+ if (name == "keep_log_file_num") {
4412
+ is_valid = (*sz == db_opts.keep_log_file_num);
4413
+ } else if (name == "write_buffer_size") {
4414
+ is_valid = (*sz == cf_opts.write_buffer_size);
4415
+ }
4416
+ if (is_valid) {
4417
+ return Status::OK();
4418
+ } else {
4419
+ return Status::InvalidArgument("Mismatched value", name);
4420
+ }
4421
+ });
4422
+ ConfigOptions config_options;
4423
+ DBOptions db_options;
4424
+ ColumnFamilyOptions cf_options;
4425
+
4426
+ ASSERT_OK(opt_info.Validate(db_options, cf_options, "keep_log_file_num",
4427
+ &db_options.keep_log_file_num));
4428
+ ASSERT_OK(opt_info.Validate(db_options, cf_options, "write_buffer_size",
4429
+ &cf_options.write_buffer_size));
4430
+ ASSERT_NOK(opt_info.Validate(db_options, cf_options, "keep_log_file_num",
4431
+ &cf_options.write_buffer_size));
4432
+ ASSERT_NOK(opt_info.Validate(db_options, cf_options, "write_buffer_size",
4433
+ &db_options.keep_log_file_num));
4434
+ }
4435
+
4344
4436
  TEST_F(OptionTypeInfoTest, TestOptionFlags) {
4345
4437
  OptionTypeInfo opt_none(0, OptionType::kString,
4346
4438
  OptionVerificationType::kNormal,
@@ -4543,6 +4635,68 @@ TEST_F(OptionTypeInfoTest, TestStruct) {
4543
4635
  ASSERT_EQ(e1.b.s, "66");
4544
4636
  }
4545
4637
 
4638
+ TEST_F(OptionTypeInfoTest, TestArrayType) {
4639
+ OptionTypeInfo array_info = OptionTypeInfo::Array<std::string, 4>(
4640
+ 0, OptionVerificationType::kNormal, OptionTypeFlags::kNone,
4641
+ {0, OptionType::kString});
4642
+ std::array<std::string, 4> array1, array2;
4643
+ std::string mismatch;
4644
+
4645
+ ConfigOptions config_options;
4646
+ TestParseAndCompareOption(config_options, array_info, "v", "a:b:c:d", &array1,
4647
+ &array2);
4648
+
4649
+ ASSERT_EQ(array1.size(), 4);
4650
+ ASSERT_EQ(array1[0], "a");
4651
+ ASSERT_EQ(array1[1], "b");
4652
+ ASSERT_EQ(array1[2], "c");
4653
+ ASSERT_EQ(array1[3], "d");
4654
+ array1[3] = "e";
4655
+ ASSERT_FALSE(
4656
+ array_info.AreEqual(config_options, "v", &array1, &array2, &mismatch));
4657
+ ASSERT_EQ(mismatch, "v");
4658
+
4659
+ // Test vectors with inner brackets
4660
+ TestParseAndCompareOption(config_options, array_info, "v", "a:{b}:c:d",
4661
+ &array1, &array2);
4662
+ ASSERT_EQ(array1.size(), 4);
4663
+ ASSERT_EQ(array1[0], "a");
4664
+ ASSERT_EQ(array1[1], "b");
4665
+ ASSERT_EQ(array1[2], "c");
4666
+ ASSERT_EQ(array1[3], "d");
4667
+
4668
+ std::array<std::string, 3> array3, array4;
4669
+ OptionTypeInfo bar_info = OptionTypeInfo::Array<std::string, 3>(
4670
+ 0, OptionVerificationType::kNormal, OptionTypeFlags::kNone,
4671
+ {0, OptionType::kString}, '|');
4672
+ TestParseAndCompareOption(config_options, bar_info, "v", "x|y|z", &array3,
4673
+ &array4);
4674
+
4675
+ // Test arrays with inner array
4676
+ TestParseAndCompareOption(config_options, bar_info, "v",
4677
+ "a|{b1|b2}|{c1|c2|{d1|d2}}", &array3, &array4,
4678
+ false);
4679
+ ASSERT_EQ(array3.size(), 3);
4680
+ ASSERT_EQ(array3[0], "a");
4681
+ ASSERT_EQ(array3[1], "b1|b2");
4682
+ ASSERT_EQ(array3[2], "c1|c2|{d1|d2}");
4683
+
4684
+ TestParseAndCompareOption(config_options, bar_info, "v",
4685
+ "{a1|a2}|{b1|{c1|c2}}|d1", &array3, &array4, true);
4686
+ ASSERT_EQ(array3.size(), 3);
4687
+ ASSERT_EQ(array3[0], "a1|a2");
4688
+ ASSERT_EQ(array3[1], "b1|{c1|c2}");
4689
+ ASSERT_EQ(array3[2], "d1");
4690
+
4691
+ // Test invalid input: less element than requested
4692
+ auto s = bar_info.Parse(config_options, "opt_name1", "a1|a2", &array3);
4693
+ ASSERT_TRUE(s.IsInvalidArgument());
4694
+
4695
+ // Test invalid input: more element than requested
4696
+ s = bar_info.Parse(config_options, "opt_name2", "a1|b|c1|d3", &array3);
4697
+ ASSERT_TRUE(s.IsInvalidArgument());
4698
+ }
4699
+
4546
4700
  TEST_F(OptionTypeInfoTest, TestVectorType) {
4547
4701
  OptionTypeInfo vec_info = OptionTypeInfo::Vector<std::string>(
4548
4702
  0, OptionVerificationType::kNormal, OptionTypeFlags::kNone,
@@ -25,11 +25,6 @@
25
25
 
26
26
  #define ROCKSDB_NOEXCEPT noexcept
27
27
 
28
- // thread_local is part of C++11 and later (TODO: clean up this define)
29
- #ifndef __thread
30
- #define __thread thread_local
31
- #endif
32
-
33
28
  #undef PLATFORM_IS_LITTLE_ENDIAN
34
29
  #if defined(OS_MACOSX)
35
30
  #include <machine/endian.h>
@@ -95,16 +90,6 @@ namespace ROCKSDB_NAMESPACE {
95
90
  extern const bool kDefaultToAdaptiveMutex;
96
91
 
97
92
  namespace port {
98
-
99
- // For use at db/file_indexer.h kLevelMaxIndex
100
- const uint32_t kMaxUint32 = std::numeric_limits<uint32_t>::max();
101
- const int kMaxInt32 = std::numeric_limits<int32_t>::max();
102
- const int kMinInt32 = std::numeric_limits<int32_t>::min();
103
- const uint64_t kMaxUint64 = std::numeric_limits<uint64_t>::max();
104
- const int64_t kMaxInt64 = std::numeric_limits<int64_t>::max();
105
- const int64_t kMinInt64 = std::numeric_limits<int64_t>::min();
106
- const size_t kMaxSizet = std::numeric_limits<size_t>::max();
107
-
108
93
  constexpr bool kLittleEndian = PLATFORM_IS_LITTLE_ENDIAN;
109
94
  #undef PLATFORM_IS_LITTLE_ENDIAN
110
95
 
@@ -28,6 +28,7 @@
28
28
  #include "monitoring/iostats_context_imp.h"
29
29
  #include "monitoring/thread_status_updater.h"
30
30
  #include "monitoring/thread_status_util.h"
31
+ #include "port/lang.h"
31
32
  #include "port/port.h"
32
33
  #include "port/port_dirent.h"
33
34
  #include "port/win/io_win.h"
@@ -192,8 +193,8 @@ WinFileSystem::WinFileSystem(const std::shared_ptr<SystemClock>& clock)
192
193
  }
193
194
 
194
195
  const std::shared_ptr<WinFileSystem>& WinFileSystem::Default() {
195
- static std::shared_ptr<WinFileSystem> fs =
196
- std::make_shared<WinFileSystem>(WinClock::Default());
196
+ STATIC_AVOID_DESTRUCTION(std::shared_ptr<WinFileSystem>, fs)
197
+ (std::make_shared<WinFileSystem>(WinClock::Default()));
197
198
  return fs;
198
199
  }
199
200
 
@@ -1410,8 +1411,8 @@ std::shared_ptr<FileSystem> FileSystem::Default() {
1410
1411
  }
1411
1412
 
1412
1413
  const std::shared_ptr<SystemClock>& SystemClock::Default() {
1413
- static std::shared_ptr<SystemClock> clock =
1414
- std::make_shared<port::WinClock>();
1414
+ STATIC_AVOID_DESTRUCTION(std::shared_ptr<SystemClock>, clock)
1415
+ (std::make_shared<port::WinClock>());
1415
1416
  return clock;
1416
1417
  }
1417
1418
  } // namespace ROCKSDB_NAMESPACE
@@ -80,8 +80,8 @@ class WinClock : public SystemClock {
80
80
  virtual ~WinClock() {}
81
81
 
82
82
  static const char* kClassName() { return "WindowsClock"; }
83
- const char* Name() const override { return kClassName(); }
84
- const char* NickName() const override { return kDefaultName(); }
83
+ const char* Name() const override { return kDefaultName(); }
84
+ const char* NickName() const override { return kClassName(); }
85
85
 
86
86
  uint64_t NowMicros() override;
87
87
 
@@ -60,11 +60,6 @@ using ssize_t = SSIZE_T;
60
60
  #ifdef _MSC_VER
61
61
  #define __attribute__(A)
62
62
 
63
- // thread_local is part of C++11 and later (TODO: clean up this define)
64
- #ifndef __thread
65
- #define __thread thread_local
66
- #endif
67
-
68
63
  #endif
69
64
 
70
65
  namespace ROCKSDB_NAMESPACE {
@@ -82,37 +77,11 @@ namespace port {
82
77
  #define snprintf _snprintf
83
78
 
84
79
  #define ROCKSDB_NOEXCEPT
85
- // std::numeric_limits<size_t>::max() is not constexpr just yet
86
- // therefore, use the same limits
87
-
88
- // For use at db/file_indexer.h kLevelMaxIndex
89
- const uint32_t kMaxUint32 = UINT32_MAX;
90
- const int kMaxInt32 = INT32_MAX;
91
- const int kMinInt32 = INT32_MIN;
92
- const int64_t kMaxInt64 = INT64_MAX;
93
- const int64_t kMinInt64 = INT64_MIN;
94
- const uint64_t kMaxUint64 = UINT64_MAX;
95
-
96
- #ifdef _WIN64
97
- const size_t kMaxSizet = UINT64_MAX;
98
- #else
99
- const size_t kMaxSizet = UINT_MAX;
100
- #endif
101
80
 
102
81
  #else // VS >= 2015 or MinGW
103
82
 
104
83
  #define ROCKSDB_NOEXCEPT noexcept
105
84
 
106
- // For use at db/file_indexer.h kLevelMaxIndex
107
- const uint32_t kMaxUint32 = std::numeric_limits<uint32_t>::max();
108
- const int kMaxInt32 = std::numeric_limits<int>::max();
109
- const int kMinInt32 = std::numeric_limits<int>::min();
110
- const uint64_t kMaxUint64 = std::numeric_limits<uint64_t>::max();
111
- const int64_t kMaxInt64 = std::numeric_limits<int64_t>::max();
112
- const int64_t kMinInt64 = std::numeric_limits<int64_t>::min();
113
-
114
- const size_t kMaxSizet = std::numeric_limits<size_t>::max();
115
-
116
85
  #endif //_MSC_VER
117
86
 
118
87
  // "Windows is designed to run on little-endian computer architectures."