@nxtedition/rocksdb 6.0.0-alpha.0 → 6.0.2

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 (311) hide show
  1. package/BUILDING.md +10 -0
  2. package/binding.cc +14 -17
  3. package/binding.gyp +2 -2
  4. package/deps/rocksdb/build_version.cc +4 -10
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +17 -3
  6. package/deps/rocksdb/rocksdb/Makefile +57 -86
  7. package/deps/rocksdb/rocksdb/TARGETS +4 -0
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  10. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  13. package/deps/rocksdb/rocksdb/common.mk +30 -0
  14. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  15. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  16. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  17. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  18. package/deps/rocksdb/rocksdb/db/builder.cc +11 -4
  19. package/deps/rocksdb/rocksdb/db/c.cc +45 -0
  20. package/deps/rocksdb/rocksdb/db/c_test.c +25 -2
  21. package/deps/rocksdb/rocksdb/db/column_family.cc +4 -3
  22. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  23. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +25 -10
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +6 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +69 -14
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +21 -21
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +135 -32
  37. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  38. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  39. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  40. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
  42. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  43. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  44. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  45. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  46. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  48. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +9 -8
  49. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +1 -1
  50. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -4
  51. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +9 -3
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +6 -3
  55. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  56. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  57. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  58. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  59. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  60. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  61. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  62. package/deps/rocksdb/rocksdb/db/db_options_test.cc +12 -12
  63. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  64. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  65. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +15 -14
  66. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +6 -6
  67. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  68. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  69. package/deps/rocksdb/rocksdb/db/db_test.cc +44 -42
  70. package/deps/rocksdb/rocksdb/db/db_test2.cc +23 -19
  71. package/deps/rocksdb/rocksdb/db/db_test_util.cc +95 -17
  72. package/deps/rocksdb/rocksdb/db/db_test_util.h +48 -0
  73. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  74. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  75. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +4 -4
  76. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  77. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  78. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  79. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  80. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +34 -12
  81. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +3 -0
  82. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  83. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  84. package/deps/rocksdb/rocksdb/db/flush_job.cc +18 -4
  85. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  86. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  87. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  88. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -0
  89. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  90. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  91. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  92. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  93. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  94. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  95. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  96. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  97. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  98. package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/repair_test.cc +5 -5
  100. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  101. package/deps/rocksdb/rocksdb/db/table_cache.cc +2 -4
  102. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  103. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -5
  104. package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -2
  105. package/deps/rocksdb/rocksdb/db/version_set.cc +2 -2
  106. package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
  107. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  108. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  109. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  111. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  112. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  113. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  114. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +7 -6
  115. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  116. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  117. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +31 -6
  118. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  119. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  120. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  121. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +359 -275
  122. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  123. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  124. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  125. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  126. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  127. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  128. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  129. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  130. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  131. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  132. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  133. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  134. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  135. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  136. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  137. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +1 -1
  138. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  139. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  140. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  141. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +69 -45
  142. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +3 -1
  143. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +35 -0
  144. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  145. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  146. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  147. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  148. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  149. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  150. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  151. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  152. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +28 -3
  153. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  154. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  155. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  156. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  157. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -103
  160. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  162. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  163. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  164. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  165. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  166. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  167. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  168. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  169. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  170. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  171. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  172. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  173. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  174. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +2 -8
  175. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  176. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  177. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  178. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  179. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  180. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  181. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  182. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  183. package/deps/rocksdb/rocksdb/options/cf_options.cc +34 -38
  184. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  185. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  186. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  187. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  188. package/deps/rocksdb/rocksdb/options/db_options.cc +38 -17
  189. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  190. package/deps/rocksdb/rocksdb/options/options_helper.cc +82 -39
  191. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  192. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -3
  193. package/deps/rocksdb/rocksdb/options/options_test.cc +115 -59
  194. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  195. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  196. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  197. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  198. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  199. package/deps/rocksdb/rocksdb/src.mk +2 -0
  200. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  201. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  202. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  203. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  204. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +14 -4
  205. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  206. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +1 -1
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +85 -41
  208. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +42 -72
  209. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +7 -5
  210. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  211. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  212. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  213. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  214. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  215. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  217. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +6 -3
  219. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  220. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -5
  221. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  222. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  223. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  224. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  225. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  226. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  227. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  228. package/deps/rocksdb/rocksdb/table/multiget_context.h +14 -11
  229. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  230. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  231. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  232. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  233. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  234. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  235. package/deps/rocksdb/rocksdb/table/unique_id.cc +57 -25
  236. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +34 -4
  237. package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -1
  238. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  239. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  240. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  241. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  242. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  243. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +254 -98
  244. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  246. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  247. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  248. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  249. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  250. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +17 -3
  251. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  252. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  253. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  254. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  255. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  256. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  257. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  258. package/deps/rocksdb/rocksdb/util/compression.h +7 -7
  259. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  260. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  261. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  262. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  263. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  264. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  265. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  266. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  267. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  268. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  269. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  270. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  271. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  272. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  273. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  274. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  275. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  276. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  277. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  278. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  279. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  280. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  281. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  282. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  283. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  284. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  285. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  286. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  287. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  288. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  289. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  290. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  291. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  292. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  293. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  294. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  295. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  296. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  297. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  298. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  299. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  300. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  301. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  302. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  303. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  304. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  305. package/deps/rocksdb/rocksdb.gyp +40 -31
  306. package/package.json +2 -2
  307. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  308. package/prebuilds/linux-x64/node.napi.node +0 -0
  309. package/deps/rocksdb/rocksdb/python.mk +0 -9
  310. package/prebuilds/darwin-x64/node.napi.node +0 -0
  311. package/prebuilds/linux-arm64/node.napi.node +0 -0
@@ -439,22 +439,36 @@ static std::unordered_map<std::string, OptionTypeInfo>
439
439
  static_cast<int64_t>(ParseUint64(value))));
440
440
  return Status::OK();
441
441
  }}},
442
- {"env",
443
- {offsetof(struct ImmutableDBOptions, env), OptionType::kUnknown,
444
- OptionVerificationType::kNormal,
445
- (OptionTypeFlags::kDontSerialize | OptionTypeFlags::kCompareNever),
446
- // Parse the input value as an Env
447
- [](const ConfigOptions& opts, const std::string& /*name*/,
448
- const std::string& value, void* addr) {
449
- auto old_env = static_cast<Env**>(addr); // Get the old value
450
- Env* new_env = *old_env; // Set new to old
451
- Status s = Env::CreateFromString(opts, value,
452
- &new_env); // Update new value
453
- if (s.ok()) { // It worked
454
- *old_env = new_env; // Update the old one
455
- }
456
- return s;
457
- }}},
442
+ {"env", //**TODO: Should this be kCustomizable?
443
+ OptionTypeInfo(
444
+ offsetof(struct ImmutableDBOptions, env), OptionType::kUnknown,
445
+ OptionVerificationType::kNormal,
446
+ (OptionTypeFlags::kDontSerialize | OptionTypeFlags::kCompareNever))
447
+ .SetParseFunc([](const ConfigOptions& opts,
448
+ const std::string& /*name*/,
449
+ const std::string& value, void* addr) {
450
+ // Parse the input value as an Env
451
+ auto old_env = static_cast<Env**>(addr); // Get the old value
452
+ Env* new_env = *old_env; // Set new to old
453
+ Status s = Env::CreateFromString(opts, value,
454
+ &new_env); // Update new value
455
+ if (s.ok()) { // It worked
456
+ *old_env = new_env; // Update the old one
457
+ }
458
+ return s;
459
+ })
460
+ .SetPrepareFunc([](const ConfigOptions& opts,
461
+ const std::string& /*name*/, void* addr) {
462
+ auto env = static_cast<Env**>(addr);
463
+ return (*env)->PrepareOptions(opts);
464
+ })
465
+ .SetValidateFunc([](const DBOptions& db_opts,
466
+ const ColumnFamilyOptions& cf_opts,
467
+ const std::string& /*name*/,
468
+ const void* addr) {
469
+ const auto env = static_cast<const Env* const*>(addr);
470
+ return (*env)->ValidateOptions(db_opts, cf_opts);
471
+ })},
458
472
  {"allow_data_in_errors",
459
473
  {offsetof(struct ImmutableDBOptions, allow_data_in_errors),
460
474
  OptionType::kBoolean, OptionVerificationType::kNormal,
@@ -538,6 +552,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
538
552
  OptionTypeInfo::Enum<CacheTier>(
539
553
  offsetof(struct ImmutableDBOptions, lowest_used_cache_tier),
540
554
  &cache_tier_string_map, OptionTypeFlags::kNone)},
555
+ {"enforce_single_del_contracts",
556
+ {offsetof(struct ImmutableDBOptions, enforce_single_del_contracts),
557
+ OptionType::kBoolean, OptionVerificationType::kNormal,
558
+ OptionTypeFlags::kNone}},
541
559
  };
542
560
 
543
561
  const std::string OptionsHelper::kDBOptionsName = "DBOptions";
@@ -736,7 +754,8 @@ ImmutableDBOptions::ImmutableDBOptions(const DBOptions& options)
736
754
  db_host_id(options.db_host_id),
737
755
  checksum_handoff_file_types(options.checksum_handoff_file_types),
738
756
  lowest_used_cache_tier(options.lowest_used_cache_tier),
739
- compaction_service(options.compaction_service) {
757
+ compaction_service(options.compaction_service),
758
+ enforce_single_del_contracts(options.enforce_single_del_contracts) {
740
759
  fs = env->GetFileSystem();
741
760
  clock = env->GetSystemClock().get();
742
761
  logger = info_log.get();
@@ -907,6 +926,8 @@ void ImmutableDBOptions::Dump(Logger* log) const {
907
926
  allow_data_in_errors);
908
927
  ROCKS_LOG_HEADER(log, " Options.db_host_id: %s",
909
928
  db_host_id.c_str());
929
+ ROCKS_LOG_HEADER(log, " Options.enforce_single_del_contracts: %s",
930
+ enforce_single_del_contracts ? "true" : "false");
910
931
  }
911
932
 
912
933
  bool ImmutableDBOptions::IsWalDirSameAsDBPath() const {
@@ -105,6 +105,7 @@ struct ImmutableDBOptions {
105
105
  Statistics* stats;
106
106
  Logger* logger;
107
107
  std::shared_ptr<CompactionService> compaction_service;
108
+ bool enforce_single_del_contracts;
108
109
 
109
110
  bool IsWalDirSameAsDBPath() const;
110
111
  bool IsWalDirSameAsDBPath(const std::string& path) const;
@@ -463,43 +463,43 @@ bool SerializeSingleOptionHelper(const void* opt_address,
463
463
  *value = *(static_cast<const bool*>(opt_address)) ? "true" : "false";
464
464
  break;
465
465
  case OptionType::kInt:
466
- *value = ToString(*(static_cast<const int*>(opt_address)));
466
+ *value = std::to_string(*(static_cast<const int*>(opt_address)));
467
467
  break;
468
468
  case OptionType::kInt32T:
469
- *value = ToString(*(static_cast<const int32_t*>(opt_address)));
469
+ *value = std::to_string(*(static_cast<const int32_t*>(opt_address)));
470
470
  break;
471
471
  case OptionType::kInt64T:
472
472
  {
473
473
  int64_t v;
474
474
  GetUnaligned(static_cast<const int64_t*>(opt_address), &v);
475
- *value = ToString(v);
475
+ *value = std::to_string(v);
476
476
  }
477
477
  break;
478
478
  case OptionType::kUInt:
479
- *value = ToString(*(static_cast<const unsigned int*>(opt_address)));
479
+ *value = std::to_string(*(static_cast<const unsigned int*>(opt_address)));
480
480
  break;
481
481
  case OptionType::kUInt8T:
482
- *value = ToString(*(static_cast<const uint8_t*>(opt_address)));
482
+ *value = std::to_string(*(static_cast<const uint8_t*>(opt_address)));
483
483
  break;
484
484
  case OptionType::kUInt32T:
485
- *value = ToString(*(static_cast<const uint32_t*>(opt_address)));
485
+ *value = std::to_string(*(static_cast<const uint32_t*>(opt_address)));
486
486
  break;
487
487
  case OptionType::kUInt64T:
488
488
  {
489
489
  uint64_t v;
490
490
  GetUnaligned(static_cast<const uint64_t*>(opt_address), &v);
491
- *value = ToString(v);
491
+ *value = std::to_string(v);
492
492
  }
493
493
  break;
494
494
  case OptionType::kSizeT:
495
495
  {
496
496
  size_t v;
497
497
  GetUnaligned(static_cast<const size_t*>(opt_address), &v);
498
- *value = ToString(v);
498
+ *value = std::to_string(v);
499
499
  }
500
500
  break;
501
501
  case OptionType::kDouble:
502
- *value = ToString(*(static_cast<const double*>(opt_address)));
502
+ *value = std::to_string(*(static_cast<const double*>(opt_address)));
503
503
  break;
504
504
  case OptionType::kString:
505
505
  *value =
@@ -898,18 +898,18 @@ Status OptionTypeInfo::Parse(const ConfigOptions& config_options,
898
898
  return Status::OK();
899
899
  }
900
900
  try {
901
- void* opt_addr = static_cast<char*>(opt_ptr) + offset_;
902
901
  const std::string& opt_value = config_options.input_strings_escaped
903
902
  ? UnescapeOptionString(value)
904
903
  : value;
905
904
 
906
- if (opt_addr == nullptr) {
905
+ if (opt_ptr == nullptr) {
907
906
  return Status::NotFound("Could not find option", opt_name);
908
907
  } else if (parse_func_ != nullptr) {
909
908
  ConfigOptions copy = config_options;
910
909
  copy.invoke_prepare_options = false;
910
+ void* opt_addr = GetOffset(opt_ptr);
911
911
  return parse_func_(copy, opt_name, opt_value, opt_addr);
912
- } else if (ParseOptionHelper(opt_addr, type_, opt_value)) {
912
+ } else if (ParseOptionHelper(GetOffset(opt_ptr), type_, opt_value)) {
913
913
  return Status::OK();
914
914
  } else if (IsConfigurable()) {
915
915
  // The option is <config>.<name>
@@ -1021,12 +1021,12 @@ Status OptionTypeInfo::Serialize(const ConfigOptions& config_options,
1021
1021
  std::string* opt_value) const {
1022
1022
  // If the option is no longer used in rocksdb and marked as deprecated,
1023
1023
  // we skip it in the serialization.
1024
- const void* opt_addr = static_cast<const char*>(opt_ptr) + offset_;
1025
- if (opt_addr == nullptr || IsDeprecated()) {
1024
+ if (opt_ptr == nullptr || IsDeprecated()) {
1026
1025
  return Status::OK();
1027
1026
  } else if (IsEnabled(OptionTypeFlags::kDontSerialize)) {
1028
1027
  return Status::NotSupported("Cannot serialize option: ", opt_name);
1029
1028
  } else if (serialize_func_ != nullptr) {
1029
+ const void* opt_addr = GetOffset(opt_ptr);
1030
1030
  return serialize_func_(config_options, opt_name, opt_addr, opt_value);
1031
1031
  } else if (IsCustomizable()) {
1032
1032
  const Customizable* custom = AsRawPointer<Customizable>(opt_ptr);
@@ -1074,7 +1074,8 @@ Status OptionTypeInfo::Serialize(const ConfigOptions& config_options,
1074
1074
  return Status::OK();
1075
1075
  } else if (config_options.mutable_options_only && !IsMutable()) {
1076
1076
  return Status::OK();
1077
- } else if (SerializeSingleOptionHelper(opt_addr, type_, opt_value)) {
1077
+ } else if (SerializeSingleOptionHelper(GetOffset(opt_ptr), type_,
1078
+ opt_value)) {
1078
1079
  return Status::OK();
1079
1080
  } else {
1080
1081
  return Status::InvalidArgument("Cannot serialize option: ", opt_name);
@@ -1223,39 +1224,43 @@ bool OptionTypeInfo::AreEqual(const ConfigOptions& config_options,
1223
1224
  if (!config_options.IsCheckEnabled(level)) {
1224
1225
  return true; // If the sanity level is not being checked, skip it
1225
1226
  }
1226
- const void* this_addr = static_cast<const char*>(this_ptr) + offset_;
1227
- const void* that_addr = static_cast<const char*>(that_ptr) + offset_;
1228
- if (this_addr == nullptr || that_addr == nullptr) {
1229
- if (this_addr == that_addr) {
1227
+ if (this_ptr == nullptr || that_ptr == nullptr) {
1228
+ if (this_ptr == that_ptr) {
1230
1229
  return true;
1231
1230
  }
1232
1231
  } else if (equals_func_ != nullptr) {
1232
+ const void* this_addr = GetOffset(this_ptr);
1233
+ const void* that_addr = GetOffset(that_ptr);
1233
1234
  if (equals_func_(config_options, opt_name, this_addr, that_addr,
1234
1235
  mismatch)) {
1235
1236
  return true;
1236
1237
  }
1237
- } else if (AreOptionsEqual(type_, this_addr, that_addr)) {
1238
- return true;
1239
- } else if (IsConfigurable()) {
1240
- const auto* this_config = AsRawPointer<Configurable>(this_ptr);
1241
- const auto* that_config = AsRawPointer<Configurable>(that_ptr);
1242
- if (this_config == that_config) {
1238
+ } else {
1239
+ const void* this_addr = GetOffset(this_ptr);
1240
+ const void* that_addr = GetOffset(that_ptr);
1241
+ if (AreOptionsEqual(type_, this_addr, that_addr)) {
1243
1242
  return true;
1244
- } else if (this_config != nullptr && that_config != nullptr) {
1245
- std::string bad_name;
1246
- bool matches;
1247
- if (level < config_options.sanity_level) {
1248
- ConfigOptions copy = config_options;
1249
- copy.sanity_level = level;
1250
- matches = this_config->AreEquivalent(copy, that_config, &bad_name);
1251
- } else {
1252
- matches =
1253
- this_config->AreEquivalent(config_options, that_config, &bad_name);
1254
- }
1255
- if (!matches) {
1256
- *mismatch = opt_name + "." + bad_name;
1243
+ } else if (IsConfigurable()) {
1244
+ const auto* this_config = AsRawPointer<Configurable>(this_ptr);
1245
+ const auto* that_config = AsRawPointer<Configurable>(that_ptr);
1246
+ if (this_config == that_config) {
1247
+ return true;
1248
+ } else if (this_config != nullptr && that_config != nullptr) {
1249
+ std::string bad_name;
1250
+ bool matches;
1251
+ if (level < config_options.sanity_level) {
1252
+ ConfigOptions copy = config_options;
1253
+ copy.sanity_level = level;
1254
+ matches = this_config->AreEquivalent(copy, that_config, &bad_name);
1255
+ } else {
1256
+ matches = this_config->AreEquivalent(config_options, that_config,
1257
+ &bad_name);
1258
+ }
1259
+ if (!matches) {
1260
+ *mismatch = opt_name + "." + bad_name;
1261
+ }
1262
+ return matches;
1257
1263
  }
1258
- return matches;
1259
1264
  }
1260
1265
  }
1261
1266
  if (mismatch->empty()) {
@@ -1379,6 +1384,44 @@ bool OptionTypeInfo::AreEqualByName(const ConfigOptions& config_options,
1379
1384
  return (this_value == that_value);
1380
1385
  }
1381
1386
 
1387
+ Status OptionTypeInfo::Prepare(const ConfigOptions& config_options,
1388
+ const std::string& name, void* opt_ptr) const {
1389
+ if (ShouldPrepare()) {
1390
+ if (prepare_func_ != nullptr) {
1391
+ void* opt_addr = GetOffset(opt_ptr);
1392
+ return prepare_func_(config_options, name, opt_addr);
1393
+ } else if (IsConfigurable()) {
1394
+ Configurable* config = AsRawPointer<Configurable>(opt_ptr);
1395
+ if (config != nullptr) {
1396
+ return config->PrepareOptions(config_options);
1397
+ } else if (!CanBeNull()) {
1398
+ return Status::NotFound("Missing configurable object", name);
1399
+ }
1400
+ }
1401
+ }
1402
+ return Status::OK();
1403
+ }
1404
+
1405
+ Status OptionTypeInfo::Validate(const DBOptions& db_opts,
1406
+ const ColumnFamilyOptions& cf_opts,
1407
+ const std::string& name,
1408
+ const void* opt_ptr) const {
1409
+ if (ShouldValidate()) {
1410
+ if (validate_func_ != nullptr) {
1411
+ const void* opt_addr = GetOffset(opt_ptr);
1412
+ return validate_func_(db_opts, cf_opts, name, opt_addr);
1413
+ } else if (IsConfigurable()) {
1414
+ const Configurable* config = AsRawPointer<Configurable>(opt_ptr);
1415
+ if (config != nullptr) {
1416
+ return config->ValidateOptions(db_opts, cf_opts);
1417
+ } else if (!CanBeNull()) {
1418
+ return Status::NotFound("Missing configurable object", name);
1419
+ }
1420
+ }
1421
+ }
1422
+ return Status::OK();
1423
+ }
1424
+
1382
1425
  const OptionTypeInfo* OptionTypeInfo::Find(
1383
1426
  const std::string& opt_name,
1384
1427
  const std::unordered_map<std::string, OptionTypeInfo>& opt_map,
@@ -79,16 +79,16 @@ Status PersistRocksDBOptions(const ConfigOptions& config_options_in,
79
79
 
80
80
  std::string options_file_content;
81
81
 
82
- s = writable->Append(option_file_header + "[" +
83
- opt_section_titles[kOptionSectionVersion] +
84
- "]\n"
85
- " rocksdb_version=" +
86
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR) +
87
- "." + ToString(ROCKSDB_PATCH) + "\n");
82
+ s = writable->Append(
83
+ option_file_header + "[" + opt_section_titles[kOptionSectionVersion] +
84
+ "]\n"
85
+ " rocksdb_version=" +
86
+ std::to_string(ROCKSDB_MAJOR) + "." + std::to_string(ROCKSDB_MINOR) +
87
+ "." + std::to_string(ROCKSDB_PATCH) + "\n");
88
88
  if (s.ok()) {
89
89
  s = writable->Append(
90
- " options_file_version=" + ToString(ROCKSDB_OPTION_FILE_MAJOR) + "." +
91
- ToString(ROCKSDB_OPTION_FILE_MINOR) + "\n");
90
+ " options_file_version=" + std::to_string(ROCKSDB_OPTION_FILE_MAJOR) +
91
+ "." + std::to_string(ROCKSDB_OPTION_FILE_MINOR) + "\n");
92
92
  }
93
93
  if (s.ok()) {
94
94
  s = writable->Append("\n[" + opt_section_titles[kOptionSectionDBOptions] +
@@ -216,7 +216,7 @@ Status RocksDBOptionsParser::InvalidArgument(const int line_num,
216
216
  const std::string& message) {
217
217
  return Status::InvalidArgument(
218
218
  "[RocksDBOptionsParser Error] ",
219
- message + " (at line " + ToString(line_num) + ")");
219
+ message + " (at line " + std::to_string(line_num) + ")");
220
220
  }
221
221
 
222
222
  Status RocksDBOptionsParser::ParseStatement(std::string* name,
@@ -590,7 +590,7 @@ Status RocksDBOptionsParser::VerifyRocksDBOptionsFromFile(
590
590
  return Status::InvalidArgument(
591
591
  "[RocksDBOptionParser Error] The persisted options and the db"
592
592
  "instance does not have the same name for column family ",
593
- ToString(i));
593
+ std::to_string(i));
594
594
  }
595
595
  }
596
596
 
@@ -34,6 +34,7 @@ namespace ROCKSDB_NAMESPACE {
34
34
  #ifndef ROCKSDB_LITE
35
35
  #if defined OS_LINUX || defined OS_WIN
36
36
  #ifndef __clang__
37
+ #ifndef ROCKSDB_UBSAN_RUN
37
38
 
38
39
  class OptionsSettableTest : public testing::Test {
39
40
  public:
@@ -116,7 +117,8 @@ bool CompareBytes(char* start_ptr1, char* start_ptr2, size_t total_size,
116
117
  // kBbtoExcluded, and maybe add customized verification for it.
117
118
  TEST_F(OptionsSettableTest, BlockBasedTableOptionsAllFieldsSettable) {
118
119
  // Items in the form of <offset, size>. Need to be in ascending order
119
- // and not overlapping. Need to updated if new pointer-option is added.
120
+ // and not overlapping. Need to update if new option to be excluded is added
121
+ // (e.g, pointer-type)
120
122
  const OffsetGap kBbtoExcluded = {
121
123
  {offsetof(struct BlockBasedTableOptions, flush_block_policy_factory),
122
124
  sizeof(std::shared_ptr<FlushBlockPolicyFactory>)},
@@ -126,6 +128,8 @@ TEST_F(OptionsSettableTest, BlockBasedTableOptionsAllFieldsSettable) {
126
128
  sizeof(std::shared_ptr<PersistentCache>)},
127
129
  {offsetof(struct BlockBasedTableOptions, block_cache_compressed),
128
130
  sizeof(std::shared_ptr<Cache>)},
131
+ {offsetof(struct BlockBasedTableOptions, cache_usage_options),
132
+ sizeof(CacheUsageOptions)},
129
133
  {offsetof(struct BlockBasedTableOptions, filter_policy),
130
134
  sizeof(std::shared_ptr<const FilterPolicy>)},
131
135
  };
@@ -188,8 +192,6 @@ TEST_F(OptionsSettableTest, BlockBasedTableOptionsAllFieldsSettable) {
188
192
  "index_block_restart_interval=4;"
189
193
  "filter_policy=bloomfilter:4:true;whole_key_filtering=1;detect_filter_"
190
194
  "construct_corruption=false;"
191
- "reserve_table_builder_memory=false;"
192
- "reserve_table_reader_memory=false;"
193
195
  "format_version=1;"
194
196
  "verify_compression=true;read_amp_bytes_per_bit=0;"
195
197
  "enable_index_compression=false;"
@@ -581,6 +583,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
581
583
  delete[] mcfo2_ptr;
582
584
  delete[] cfo_clean_ptr;
583
585
  }
586
+ #endif // !ROCKSDB_UBSAN_RUN
584
587
  #endif // !__clang__
585
588
  #endif // OS_LINUX || OS_WIN
586
589
  #endif // !ROCKSDB_LITE
@@ -854,8 +854,6 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
854
854
  "block_cache=1M;block_cache_compressed=1k;block_size=1024;"
855
855
  "block_size_deviation=8;block_restart_interval=4;"
856
856
  "format_version=5;whole_key_filtering=1;"
857
- "reserve_table_builder_memory=true;"
858
- "reserve_table_reader_memory=true;"
859
857
  "filter_policy=bloomfilter:4.567:false;detect_filter_construct_"
860
858
  "corruption=true;"
861
859
  // A bug caused read_amp_bytes_per_bit to be a large integer in OPTIONS
@@ -877,8 +875,6 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
877
875
  ASSERT_EQ(new_opt.format_version, 5U);
878
876
  ASSERT_EQ(new_opt.whole_key_filtering, true);
879
877
  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
878
  ASSERT_TRUE(new_opt.filter_policy != nullptr);
883
879
  auto bfp = new_opt.filter_policy->CheckedCast<BloomFilterPolicy>();
884
880
  ASSERT_NE(bfp, nullptr);
@@ -3346,31 +3342,31 @@ TEST_F(OptionsParserTest, IgnoreUnknownOptions) {
3346
3342
  if (case_id == 0) {
3347
3343
  // same version
3348
3344
  should_ignore = false;
3349
- version_string =
3350
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR) + ".0";
3345
+ version_string = std::to_string(ROCKSDB_MAJOR) + "." +
3346
+ std::to_string(ROCKSDB_MINOR) + ".0";
3351
3347
  } else if (case_id == 1) {
3352
3348
  // higher minor version
3353
3349
  should_ignore = true;
3354
- version_string =
3355
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR + 1) + ".0";
3350
+ version_string = std::to_string(ROCKSDB_MAJOR) + "." +
3351
+ std::to_string(ROCKSDB_MINOR + 1) + ".0";
3356
3352
  } else if (case_id == 2) {
3357
3353
  // higher major version.
3358
3354
  should_ignore = true;
3359
- version_string = ToString(ROCKSDB_MAJOR + 1) + ".0.0";
3355
+ version_string = std::to_string(ROCKSDB_MAJOR + 1) + ".0.0";
3360
3356
  } else if (case_id == 3) {
3361
3357
  // lower minor version
3362
3358
  #if ROCKSDB_MINOR == 0
3363
3359
  continue;
3364
3360
  #else
3365
- version_string =
3366
- ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR - 1) + ".0";
3361
+ version_string = std::to_string(ROCKSDB_MAJOR) + "." +
3362
+ std::to_string(ROCKSDB_MINOR - 1) + ".0";
3367
3363
  should_ignore = false;
3368
3364
  #endif
3369
3365
  } else {
3370
3366
  // lower major version
3371
3367
  should_ignore = false;
3372
- version_string =
3373
- ToString(ROCKSDB_MAJOR - 1) + "." + ToString(ROCKSDB_MINOR) + ".0";
3368
+ version_string = std::to_string(ROCKSDB_MAJOR - 1) + "." +
3369
+ std::to_string(ROCKSDB_MINOR) + ".0";
3374
3370
  }
3375
3371
 
3376
3372
  std::string options_file_content =
@@ -4082,9 +4078,10 @@ TEST_F(OptionsParserTest, IntegerParsing) {
4082
4078
  ASSERT_EQ(ParseUint32("4294967295"), 4294967295U);
4083
4079
  ASSERT_EQ(ParseSizeT("18446744073709551615"), 18446744073709551615U);
4084
4080
  ASSERT_EQ(ParseInt64("9223372036854775807"), 9223372036854775807);
4085
- ASSERT_EQ(ParseInt64("-9223372036854775808"), port::kMinInt64);
4081
+ ASSERT_EQ(ParseInt64("-9223372036854775808"),
4082
+ std::numeric_limits<int64_t>::min());
4086
4083
  ASSERT_EQ(ParseInt32("2147483647"), 2147483647);
4087
- ASSERT_EQ(ParseInt32("-2147483648"), port::kMinInt32);
4084
+ ASSERT_EQ(ParseInt32("-2147483648"), std::numeric_limits<int32_t>::min());
4088
4085
  ASSERT_EQ(ParseInt("-32767"), -32767);
4089
4086
  ASSERT_EQ(ParseDouble("-1.234567"), -1.234567);
4090
4087
  }
@@ -4265,19 +4262,20 @@ TEST_F(OptionTypeInfoTest, TestInvalidArgs) {
4265
4262
  }
4266
4263
 
4267
4264
  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
- });
4265
+ OptionTypeInfo opt_info(0, OptionType::kUnknown,
4266
+ OptionVerificationType::kNormal,
4267
+ OptionTypeFlags::kNone);
4268
+ opt_info.SetParseFunc([](const ConfigOptions& /*opts*/,
4269
+ const std::string& name, const std::string& value,
4270
+ void* addr) {
4271
+ auto ptr = static_cast<std::string*>(addr);
4272
+ if (name == "Oops") {
4273
+ return Status::InvalidArgument(value);
4274
+ } else {
4275
+ *ptr = value + " " + name;
4276
+ return Status::OK();
4277
+ }
4278
+ });
4281
4279
  ConfigOptions config_options;
4282
4280
  std::string base;
4283
4281
  ASSERT_OK(opt_info.Parse(config_options, "World", "Hello", &base));
@@ -4286,19 +4284,19 @@ TEST_F(OptionTypeInfoTest, TestParseFunc) {
4286
4284
  }
4287
4285
 
4288
4286
  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);
4287
+ OptionTypeInfo opt_info(0, OptionType::kString,
4288
+ OptionVerificationType::kNormal,
4289
+ OptionTypeFlags::kNone);
4290
+ opt_info.SetSerializeFunc([](const ConfigOptions& /*opts*/,
4291
+ const std::string& name, const void* /*addr*/,
4292
+ std::string* value) {
4293
+ if (name == "Oops") {
4294
+ return Status::InvalidArgument(name);
4295
+ } else {
4296
+ *value = name;
4297
+ return Status::OK();
4298
+ }
4299
+ });
4302
4300
  ConfigOptions config_options;
4303
4301
  std::string base;
4304
4302
  std::string value;
@@ -4308,24 +4306,24 @@ TEST_F(OptionTypeInfoTest, TestSerializeFunc) {
4308
4306
  }
4309
4307
 
4310
4308
  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
- });
4309
+ OptionTypeInfo opt_info(0, OptionType::kInt, OptionVerificationType::kNormal,
4310
+ OptionTypeFlags::kNone);
4311
+ opt_info.SetEqualsFunc([](const ConfigOptions& /*opts*/,
4312
+ const std::string& name, const void* addr1,
4313
+ const void* addr2, std::string* mismatch) {
4314
+ auto i1 = *(static_cast<const int*>(addr1));
4315
+ auto i2 = *(static_cast<const int*>(addr2));
4316
+ if (name == "LT") {
4317
+ return i1 < i2;
4318
+ } else if (name == "GT") {
4319
+ return i1 > i2;
4320
+ } else if (name == "EQ") {
4321
+ return i1 == i2;
4322
+ } else {
4323
+ *mismatch = name + "???";
4324
+ return false;
4325
+ }
4326
+ });
4329
4327
 
4330
4328
  ConfigOptions config_options;
4331
4329
  int int1 = 100;
@@ -4341,6 +4339,64 @@ TEST_F(OptionTypeInfoTest, TestEqualsFunc) {
4341
4339
  ASSERT_EQ(mismatch, "NO???");
4342
4340
  }
4343
4341
 
4342
+ TEST_F(OptionTypeInfoTest, TestPrepareFunc) {
4343
+ OptionTypeInfo opt_info(0, OptionType::kInt, OptionVerificationType::kNormal,
4344
+ OptionTypeFlags::kNone);
4345
+ opt_info.SetPrepareFunc(
4346
+ [](const ConfigOptions& /*opts*/, const std::string& name, void* addr) {
4347
+ auto i1 = static_cast<int*>(addr);
4348
+ if (name == "x2") {
4349
+ *i1 *= 2;
4350
+ } else if (name == "/2") {
4351
+ *i1 /= 2;
4352
+ } else {
4353
+ return Status::InvalidArgument("Bad Argument", name);
4354
+ }
4355
+ return Status::OK();
4356
+ });
4357
+ ConfigOptions config_options;
4358
+ int int1 = 100;
4359
+ ASSERT_OK(opt_info.Prepare(config_options, "x2", &int1));
4360
+ ASSERT_EQ(int1, 200);
4361
+ ASSERT_OK(opt_info.Prepare(config_options, "/2", &int1));
4362
+ ASSERT_EQ(int1, 100);
4363
+ ASSERT_NOK(opt_info.Prepare(config_options, "??", &int1));
4364
+ ASSERT_EQ(int1, 100);
4365
+ }
4366
+ TEST_F(OptionTypeInfoTest, TestValidateFunc) {
4367
+ OptionTypeInfo opt_info(0, OptionType::kSizeT,
4368
+ OptionVerificationType::kNormal,
4369
+ OptionTypeFlags::kNone);
4370
+ opt_info.SetValidateFunc([](const DBOptions& db_opts,
4371
+ const ColumnFamilyOptions& cf_opts,
4372
+ const std::string& name, const void* addr) {
4373
+ const auto sz = static_cast<const size_t*>(addr);
4374
+ bool is_valid = false;
4375
+ if (name == "keep_log_file_num") {
4376
+ is_valid = (*sz == db_opts.keep_log_file_num);
4377
+ } else if (name == "write_buffer_size") {
4378
+ is_valid = (*sz == cf_opts.write_buffer_size);
4379
+ }
4380
+ if (is_valid) {
4381
+ return Status::OK();
4382
+ } else {
4383
+ return Status::InvalidArgument("Mismatched value", name);
4384
+ }
4385
+ });
4386
+ ConfigOptions config_options;
4387
+ DBOptions db_options;
4388
+ ColumnFamilyOptions cf_options;
4389
+
4390
+ ASSERT_OK(opt_info.Validate(db_options, cf_options, "keep_log_file_num",
4391
+ &db_options.keep_log_file_num));
4392
+ ASSERT_OK(opt_info.Validate(db_options, cf_options, "write_buffer_size",
4393
+ &cf_options.write_buffer_size));
4394
+ ASSERT_NOK(opt_info.Validate(db_options, cf_options, "keep_log_file_num",
4395
+ &cf_options.write_buffer_size));
4396
+ ASSERT_NOK(opt_info.Validate(db_options, cf_options, "write_buffer_size",
4397
+ &db_options.keep_log_file_num));
4398
+ }
4399
+
4344
4400
  TEST_F(OptionTypeInfoTest, TestOptionFlags) {
4345
4401
  OptionTypeInfo opt_none(0, OptionType::kString,
4346
4402
  OptionVerificationType::kNormal,