@nxtedition/rocksdb 9.0.0 → 10.0.0

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 (307) hide show
  1. package/binding.cc +244 -177
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -9
  3. package/deps/rocksdb/rocksdb/Makefile +15 -6
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +17 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +16 -4
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2024 -14
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +202 -7
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
  19. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +314 -25
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +29 -4
  22. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -3
  24. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  27. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  28. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +25 -11
  29. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  30. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -1
  32. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  34. package/deps/rocksdb/rocksdb/db/builder.cc +3 -3
  35. package/deps/rocksdb/rocksdb/db/c.cc +64 -0
  36. package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
  37. package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
  38. package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
  39. package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  53. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
  54. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
  55. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
  58. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
  71. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  72. package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
  73. package/deps/rocksdb/rocksdb/db/db_iter.h +10 -2
  74. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  75. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  76. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  77. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +187 -1
  78. package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
  79. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
  80. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  82. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  83. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  84. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -1
  85. package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
  86. package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
  87. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
  88. package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
  89. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
  90. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
  91. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  93. package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
  94. package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
  96. package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
  97. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
  98. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
  99. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
  100. package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
  101. package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
  103. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  105. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  106. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  107. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  108. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +3 -0
  109. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  110. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  112. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  113. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  114. package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
  115. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
  116. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  117. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  118. package/deps/rocksdb/rocksdb/db/table_cache.cc +32 -19
  119. package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
  121. package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
  122. package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
  123. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  124. package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
  125. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  126. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  127. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  128. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  129. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  130. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  131. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +44 -20
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +15 -10
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -1
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +14 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
  150. package/deps/rocksdb/rocksdb/env/env.cc +5 -0
  151. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
  152. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
  153. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
  154. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
  155. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
  157. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
  158. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
  160. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
  162. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
  163. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
  164. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
  165. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  166. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  167. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +4 -0
  168. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  169. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  170. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  173. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +79 -8
  174. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  176. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  177. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +14 -3
  178. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +0 -2
  186. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  188. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  189. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  190. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  191. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  192. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
  193. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
  194. package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
  195. package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
  196. package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
  197. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  198. package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
  199. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  200. package/deps/rocksdb/rocksdb/port/README +10 -0
  201. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  202. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  203. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  204. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -0
  205. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  206. package/deps/rocksdb/rocksdb/src.mk +7 -1
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  208. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
  209. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
  210. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
  211. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
  212. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
  213. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  214. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +14 -9
  215. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  217. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -12
  218. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
  219. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
  220. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  221. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  222. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  223. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
  225. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
  226. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  228. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
  229. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  230. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
  231. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  232. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  233. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  234. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  235. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +12 -0
  236. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
  237. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
  239. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  240. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  241. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  242. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  243. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  246. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
  247. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
  248. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  249. package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
  250. package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
  251. package/deps/rocksdb/rocksdb/util/compression.h +9 -3
  252. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  253. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  254. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  255. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  256. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  257. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  258. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  259. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  260. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  261. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  262. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -0
  263. package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
  264. package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
  265. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
  266. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  267. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  268. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
  269. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  270. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
  271. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  272. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
  273. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  274. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +9 -0
  275. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  276. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  277. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
  278. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  279. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
  280. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
  281. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  282. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
  283. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
  284. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
  285. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
  286. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
  287. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
  288. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  289. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  290. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +105 -8
  291. package/deps/rocksdb/rocksdb.gyp +4 -2
  292. package/index.js +38 -55
  293. package/package.json +4 -4
  294. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  295. package/util.h +7 -1
  296. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  297. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  298. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  299. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  300. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  301. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  302. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  303. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  304. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  305. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
  306. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  307. package/prebuilds/linux-x64/node.napi.node +0 -0
package/binding.cc CHANGED
@@ -40,8 +40,6 @@ struct Database;
40
40
  struct Iterator;
41
41
 
42
42
  struct ColumnFamily {
43
- napi_ref ref;
44
- napi_value val;
45
43
  rocksdb::ColumnFamilyHandle* handle;
46
44
  rocksdb::ColumnFamilyDescriptor descriptor;
47
45
  };
@@ -52,9 +50,12 @@ struct Closable {
52
50
  };
53
51
 
54
52
  struct Database final {
53
+ Database(std::string location) : location(std::move(location)) {}
55
54
  ~Database() { assert(!db); }
56
55
 
57
56
  rocksdb::Status Close() {
57
+ std::lock_guard<std::mutex> lock(mutex);
58
+
58
59
  if (!db) {
59
60
  return rocksdb::Status::OK();
60
61
  }
@@ -64,17 +65,35 @@ struct Database final {
64
65
  }
65
66
  closables.clear();
66
67
 
67
- for (auto& [id, column] : columns) {
68
- db->DestroyColumnFamilyHandle(column.handle);
69
- }
70
- columns.clear();
71
-
72
68
  db->FlushWAL(true);
73
69
 
74
- auto db2 = std::move(db);
75
- return db2->Close();
70
+ for (auto& [id, column] : columns) {
71
+ db->DestroyColumnFamilyHandle(column.handle);
72
+ }
73
+ columns.clear();
74
+
75
+ auto db2 = std::move(db);
76
+ return db2->Close();
76
77
  }
77
78
 
79
+ void Ref() {
80
+ std::lock_guard<std::mutex> lock(mutex);
81
+
82
+ refs++;
83
+ }
84
+
85
+ void Unref() {
86
+ std::lock_guard<std::mutex> lock(mutex);
87
+
88
+ if (--refs == 0) {
89
+ Close();
90
+ delete this;
91
+ }
92
+ }
93
+
94
+ int refs = 0;
95
+ std::mutex mutex;
96
+ std::string location;
78
97
  std::unique_ptr<rocksdb::DB> db;
79
98
  std::set<Closable*> closables;
80
99
  std::map<int32_t, ColumnFamily> columns;
@@ -449,32 +468,74 @@ struct Iterator final : public BaseIterator {
449
468
  napi_ref ref_ = nullptr;
450
469
  };
451
470
 
452
- static void env_cleanup_hook(void* arg) {
453
- auto database = reinterpret_cast<Database*>(arg);
454
- if (database) {
455
- database->Close();
456
- }
457
- }
458
-
459
471
  static void FinalizeDatabase(napi_env env, void* data, void* hint) {
460
472
  if (data) {
461
- auto database = reinterpret_cast<Database*>(data);
462
- database->Close();
463
- napi_remove_env_cleanup_hook(env, env_cleanup_hook, database);
464
- for (auto& [id, column] : database->columns) {
465
- napi_delete_reference(env, column.ref);
466
- }
467
- delete database;
473
+ auto database = reinterpret_cast<Database*>(data);
474
+
475
+ std::lock_guard<std::mutex> lock(database->mutex);
476
+
477
+ database->Unref();
468
478
  }
469
479
  }
470
480
 
471
481
  NAPI_METHOD(db_init) {
472
- auto database = new Database();
473
- napi_add_env_cleanup_hook(env, env_cleanup_hook, database);
482
+ NAPI_ARGV(1);
483
+
484
+ Database* database = nullptr;
485
+
486
+ napi_valuetype type;
487
+ NAPI_STATUS_THROWS(napi_typeof(env, argv[0], &type));
488
+
489
+ if (type == napi_string) {
490
+ std::string location;
491
+ size_t length = 0;
492
+ NAPI_STATUS_THROWS(napi_get_value_string_utf8(env, argv[0], nullptr, 0, &length));
493
+ location.resize(length, '\0');
494
+ NAPI_STATUS_THROWS(napi_get_value_string_utf8(env, argv[0], &location[0], length + 1, &length));
495
+
496
+ database = new Database(location);
497
+ } else if (type == napi_bigint) {
498
+ int64_t value;
499
+ bool lossless;
500
+ NAPI_STATUS_THROWS(napi_get_value_bigint_int64(env, argv[0], &value, &lossless));
501
+
502
+ database = reinterpret_cast<Database*>(value);
503
+ } else {
504
+ NAPI_STATUS_THROWS(napi_invalid_arg);
505
+ }
474
506
 
475
507
  napi_value result;
476
508
  NAPI_STATUS_THROWS(napi_create_external(env, database, FinalizeDatabase, nullptr, &result));
477
509
 
510
+ {
511
+ std::lock_guard<std::mutex> lock(database->mutex);
512
+ database->Ref();
513
+ }
514
+
515
+ return result;
516
+ }
517
+
518
+ NAPI_METHOD(db_get_handle) {
519
+ NAPI_ARGV(1);
520
+
521
+ Database* database;
522
+ NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
523
+
524
+ napi_value result;
525
+ NAPI_STATUS_THROWS(napi_create_bigint_int64(env, reinterpret_cast<intptr_t>(database), &result));
526
+
527
+ return result;
528
+ }
529
+
530
+ NAPI_METHOD(db_get_location) {
531
+ NAPI_ARGV(1);
532
+
533
+ Database* database;
534
+ NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
535
+
536
+ napi_value result;
537
+ NAPI_STATUS_THROWS(Convert(env, &database->location, Encoding::String, result));
538
+
478
539
  return result;
479
540
  }
480
541
 
@@ -710,141 +771,164 @@ NAPI_METHOD(db_get_identity) {
710
771
  }
711
772
 
712
773
  NAPI_METHOD(db_open) {
713
- NAPI_ARGV(4);
774
+ NAPI_ARGV(3);
714
775
 
715
776
  Database* database;
716
777
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
717
778
 
718
- std::string location;
719
- NAPI_STATUS_THROWS(GetValue(env, argv[1], location));
720
-
721
- rocksdb::Options dbOptions;
722
-
723
- const auto options = argv[2];
724
-
725
- int parallelism = std::max<int>(1, std::thread::hardware_concurrency() / 2);
726
- NAPI_STATUS_THROWS(GetProperty(env, options, "parallelism", parallelism));
727
- dbOptions.IncreaseParallelism(parallelism);
728
-
729
- uint32_t walTTL = 0;
730
- NAPI_STATUS_THROWS(GetProperty(env, options, "walTTL", walTTL));
731
- dbOptions.WAL_ttl_seconds = walTTL / 1e3;
732
-
733
- uint32_t walSizeLimit = 0;
734
- NAPI_STATUS_THROWS(GetProperty(env, options, "walSizeLimit", walSizeLimit));
735
- dbOptions.WAL_size_limit_MB = walSizeLimit / 1e6;
736
-
737
- uint32_t maxTotalWalSize = 0;
738
- NAPI_STATUS_THROWS(GetProperty(env, options, "walTotalSizeLimit", walSizeLimit));
739
- dbOptions.max_total_wal_size = maxTotalWalSize / 1e6;
740
-
741
- bool walCompression = false;
742
- NAPI_STATUS_THROWS(GetProperty(env, options, "walCompression", walCompression));
743
- dbOptions.wal_compression =
744
- walCompression ? rocksdb::CompressionType::kZSTD : rocksdb::CompressionType::kNoCompression;
745
-
746
- dbOptions.avoid_unnecessary_blocking_io = true;
747
- dbOptions.write_dbid_to_manifest = true;
748
- dbOptions.use_adaptive_mutex = true; // We don't have soo many threads in the libuv thread pool...
749
- dbOptions.enable_pipelined_write = true; // We only write in the main thread...
750
- dbOptions.create_missing_column_families = true;
751
- dbOptions.fail_if_options_file_error = true;
752
-
753
- NAPI_STATUS_THROWS(GetProperty(env, options, "createIfMissing", dbOptions.create_if_missing));
754
- NAPI_STATUS_THROWS(GetProperty(env, options, "errorIfExists", dbOptions.error_if_exists));
755
- NAPI_STATUS_THROWS(GetProperty(env, options, "unorderedWrite", dbOptions.unordered_write));
756
- NAPI_STATUS_THROWS(GetProperty(env, options, "pipelinedWrite", dbOptions.enable_pipelined_write));
757
-
758
- // TODO (feat): dbOptions.listeners
759
-
760
- std::string infoLogLevel;
761
- NAPI_STATUS_THROWS(GetProperty(env, options, "infoLogLevel", infoLogLevel));
762
- if (infoLogLevel.size() > 0) {
763
- rocksdb::InfoLogLevel lvl = {};
764
-
765
- if (infoLogLevel == "debug")
766
- lvl = rocksdb::InfoLogLevel::DEBUG_LEVEL;
767
- else if (infoLogLevel == "info")
768
- lvl = rocksdb::InfoLogLevel::INFO_LEVEL;
769
- else if (infoLogLevel == "warn")
770
- lvl = rocksdb::InfoLogLevel::WARN_LEVEL;
771
- else if (infoLogLevel == "error")
772
- lvl = rocksdb::InfoLogLevel::ERROR_LEVEL;
773
- else if (infoLogLevel == "fatal")
774
- lvl = rocksdb::InfoLogLevel::FATAL_LEVEL;
775
- else if (infoLogLevel == "header")
776
- lvl = rocksdb::InfoLogLevel::HEADER_LEVEL;
777
- else
778
- napi_throw_error(env, nullptr, "invalid log level");
779
-
780
- dbOptions.info_log_level = lvl;
781
- } else {
782
- // In some places RocksDB checks this option to see if it should prepare
783
- // debug information (ahead of logging), so set it to the highest level.
784
- dbOptions.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
785
- dbOptions.info_log.reset(new NullLogger());
786
- }
787
-
788
- NAPI_STATUS_THROWS(InitOptions(env, dbOptions, options));
789
-
790
- std::vector<rocksdb::ColumnFamilyDescriptor> descriptors;
791
-
792
- bool hasColumns;
793
- NAPI_STATUS_THROWS(napi_has_named_property(env, options, "columns", &hasColumns));
794
-
795
- if (hasColumns) {
796
- napi_value columns;
797
- NAPI_STATUS_THROWS(napi_get_named_property(env, options, "columns", &columns));
798
-
799
- napi_value keys;
800
- NAPI_STATUS_THROWS(napi_get_property_names(env, columns, &keys));
801
-
802
- uint32_t len;
803
- NAPI_STATUS_THROWS(napi_get_array_length(env, keys, &len));
804
-
805
- descriptors.resize(len);
806
- for (uint32_t n = 0; n < len; ++n) {
807
- napi_value key;
808
- NAPI_STATUS_THROWS(napi_get_element(env, keys, n, &key));
809
-
810
- napi_value column;
811
- NAPI_STATUS_THROWS(napi_get_property(env, columns, key, &column));
812
-
813
- NAPI_STATUS_THROWS(InitOptions(env, descriptors[n].options, column));
814
-
815
- NAPI_STATUS_THROWS(GetValue(env, key, descriptors[n].name));
816
- }
817
- }
818
-
819
- auto callback = argv[3];
820
-
821
- runAsync<std::vector<rocksdb::ColumnFamilyHandle*>>(
822
- "leveldown.open", env, callback,
823
- [=](auto& handles) {
824
- rocksdb::DB* db = nullptr;
825
- const auto status = descriptors.empty() ? rocksdb::DB::Open(dbOptions, location, &db)
826
- : rocksdb::DB::Open(dbOptions, location, descriptors, &handles, &db);
827
- database->db.reset(db);
828
- return status;
829
- },
830
- [=](auto& handles, auto env, auto& argv) {
831
- argv.resize(2);
832
-
833
- const auto size = handles.size();
834
- NAPI_STATUS_RETURN(napi_create_object(env, &argv[1]));
835
-
836
- for (size_t n = 0; n < size; ++n) {
837
- ColumnFamily column;
838
- column.handle = handles[n];
839
- column.descriptor = descriptors[n];
840
- NAPI_STATUS_RETURN(napi_create_external(env, column.handle, nullptr, nullptr, &column.val));
841
- NAPI_STATUS_RETURN(napi_create_reference(env, column.val, 1, &column.ref));
842
- NAPI_STATUS_RETURN(napi_set_named_property(env, argv[1], descriptors[n].name.c_str(), column.val));
843
- database->columns[column.handle->GetID()] = column;
844
- }
845
-
846
- return napi_ok;
847
- });
779
+ std::lock_guard<std::mutex> lock(database->mutex);
780
+
781
+ if (database->db) {
782
+ napi_value columns;
783
+ NAPI_STATUS_THROWS(napi_create_object(env, &columns));
784
+ for (auto& [id, column] : database->columns) {
785
+ napi_value val;
786
+ NAPI_STATUS_THROWS(napi_create_external(env, column.handle, nullptr, nullptr, &val));
787
+ NAPI_STATUS_THROWS(napi_set_named_property(env, columns, column.descriptor.name.c_str(), val));
788
+ }
789
+ return columns;
790
+ } else {
791
+ rocksdb::Options dbOptions;
792
+
793
+ const auto options = argv[1];
794
+
795
+ int parallelism = std::max<int>(1, std::thread::hardware_concurrency() / 2);
796
+ NAPI_STATUS_THROWS(GetProperty(env, options, "parallelism", parallelism));
797
+ dbOptions.IncreaseParallelism(parallelism);
798
+
799
+ uint32_t walTTL = 0;
800
+ NAPI_STATUS_THROWS(GetProperty(env, options, "walTTL", walTTL));
801
+ dbOptions.WAL_ttl_seconds = walTTL / 1e3;
802
+
803
+ uint32_t walSizeLimit = 0;
804
+ NAPI_STATUS_THROWS(GetProperty(env, options, "walSizeLimit", walSizeLimit));
805
+ dbOptions.WAL_size_limit_MB = walSizeLimit / 1e6;
806
+
807
+ uint32_t maxTotalWalSize = 0;
808
+ NAPI_STATUS_THROWS(GetProperty(env, options, "walTotalSizeLimit", walSizeLimit));
809
+ dbOptions.max_total_wal_size = maxTotalWalSize / 1e6;
810
+
811
+ bool walCompression = false;
812
+ NAPI_STATUS_THROWS(GetProperty(env, options, "walCompression", walCompression));
813
+ dbOptions.wal_compression =
814
+ walCompression ? rocksdb::CompressionType::kZSTD : rocksdb::CompressionType::kNoCompression;
815
+
816
+ dbOptions.avoid_unnecessary_blocking_io = true;
817
+ dbOptions.write_dbid_to_manifest = true;
818
+ dbOptions.enable_pipelined_write = true; // We only write in the main thread...
819
+ dbOptions.create_missing_column_families = true;
820
+ dbOptions.fail_if_options_file_error = true;
821
+
822
+ NAPI_STATUS_THROWS(GetProperty(env, options, "createIfMissing", dbOptions.create_if_missing));
823
+ NAPI_STATUS_THROWS(GetProperty(env, options, "errorIfExists", dbOptions.error_if_exists));
824
+ NAPI_STATUS_THROWS(GetProperty(env, options, "pipelinedWrite", dbOptions.enable_pipelined_write));
825
+
826
+ // TODO (feat): dbOptions.listeners
827
+
828
+ std::string infoLogLevel;
829
+ NAPI_STATUS_THROWS(GetProperty(env, options, "infoLogLevel", infoLogLevel));
830
+ if (infoLogLevel.size() > 0) {
831
+ rocksdb::InfoLogLevel lvl = {};
832
+
833
+ if (infoLogLevel == "debug")
834
+ lvl = rocksdb::InfoLogLevel::DEBUG_LEVEL;
835
+ else if (infoLogLevel == "info")
836
+ lvl = rocksdb::InfoLogLevel::INFO_LEVEL;
837
+ else if (infoLogLevel == "warn")
838
+ lvl = rocksdb::InfoLogLevel::WARN_LEVEL;
839
+ else if (infoLogLevel == "error")
840
+ lvl = rocksdb::InfoLogLevel::ERROR_LEVEL;
841
+ else if (infoLogLevel == "fatal")
842
+ lvl = rocksdb::InfoLogLevel::FATAL_LEVEL;
843
+ else if (infoLogLevel == "header")
844
+ lvl = rocksdb::InfoLogLevel::HEADER_LEVEL;
845
+ else
846
+ napi_throw_error(env, nullptr, "invalid log level");
847
+
848
+ dbOptions.info_log_level = lvl;
849
+ } else {
850
+ // In some places RocksDB checks this option to see if it should prepare
851
+ // debug information (ahead of logging), so set it to the highest level.
852
+ dbOptions.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
853
+ dbOptions.info_log.reset(new NullLogger());
854
+ }
855
+
856
+ NAPI_STATUS_THROWS(InitOptions(env, dbOptions, options));
857
+
858
+ std::vector<rocksdb::ColumnFamilyDescriptor> descriptors;
859
+
860
+ bool hasColumns;
861
+ NAPI_STATUS_THROWS(napi_has_named_property(env, options, "columns", &hasColumns));
862
+
863
+ if (hasColumns) {
864
+ napi_value columns;
865
+ NAPI_STATUS_THROWS(napi_get_named_property(env, options, "columns", &columns));
866
+
867
+ napi_value keys;
868
+ NAPI_STATUS_THROWS(napi_get_property_names(env, columns, &keys));
869
+
870
+ uint32_t len;
871
+ NAPI_STATUS_THROWS(napi_get_array_length(env, keys, &len));
872
+
873
+ descriptors.resize(len);
874
+ for (uint32_t n = 0; n < len; ++n) {
875
+ napi_value key;
876
+ NAPI_STATUS_THROWS(napi_get_element(env, keys, n, &key));
877
+
878
+ napi_value column;
879
+ NAPI_STATUS_THROWS(napi_get_property(env, columns, key, &column));
880
+
881
+ NAPI_STATUS_THROWS(InitOptions(env, descriptors[n].options, column));
882
+
883
+ NAPI_STATUS_THROWS(GetValue(env, key, descriptors[n].name));
884
+ }
885
+ }
886
+
887
+ auto callback = argv[2];
888
+
889
+ runAsync<std::vector<rocksdb::ColumnFamilyHandle*>>(
890
+ "leveldown.open", env, callback,
891
+ [=](auto& handles) {
892
+ assert(!database->db);
893
+
894
+ rocksdb::DB* db = nullptr;
895
+
896
+ // TODO (fix): There is a race condition here... Check if we are already opening the database.
897
+
898
+ const auto status = descriptors.empty()
899
+ ? rocksdb::DB::Open(dbOptions, database->location, &db)
900
+ : rocksdb::DB::Open(dbOptions, database->location, descriptors, &handles, &db);
901
+
902
+ {
903
+ std::lock_guard<std::mutex> lock(database->mutex);
904
+ database->db.reset(db);
905
+ }
906
+
907
+ return status;
908
+ },
909
+ [=](auto& handles, auto env, auto& argv) {
910
+ argv.resize(2);
911
+
912
+ NAPI_STATUS_RETURN(napi_create_object(env, &argv[1]));
913
+
914
+ for (size_t n = 0; n < handles.size(); ++n) {
915
+ ColumnFamily column;
916
+ column.handle = handles[n];
917
+ column.descriptor = descriptors[n];
918
+ database->columns[column.handle->GetID()] = column;
919
+ }
920
+
921
+ napi_value columns;
922
+ NAPI_STATUS_RETURN(napi_create_object(env, &columns));
923
+ for (auto& [id, column] : database->columns) {
924
+ napi_value val;
925
+ NAPI_STATUS_RETURN(napi_create_external(env, column.handle, nullptr, nullptr, &val));
926
+ NAPI_STATUS_RETURN(napi_set_named_property(env, columns, column.descriptor.name.c_str(), val));
927
+ }
928
+
929
+ return napi_ok;
930
+ });
931
+ }
848
932
 
849
933
  return 0;
850
934
  }
@@ -859,6 +943,8 @@ NAPI_METHOD(db_close) {
859
943
  Database* database;
860
944
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
861
945
 
946
+ std::lock_guard<std::mutex> lock(database->mutex);
947
+
862
948
  auto callback = argv[1];
863
949
 
864
950
  struct State {};
@@ -1563,36 +1649,17 @@ NAPI_METHOD(batch_iterate) {
1563
1649
  return result;
1564
1650
  }
1565
1651
 
1566
- NAPI_METHOD(db_flush_wal) {
1567
- NAPI_ARGV(3);
1568
-
1569
- Database* database;
1570
- NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
1571
-
1572
- auto options = argv[1];
1573
-
1574
- bool sync = false;
1575
- NAPI_STATUS_THROWS(GetProperty(env, options, "sync", sync));
1576
-
1577
- auto callback = argv[2];
1578
-
1579
- runAsync<bool>(
1580
- "leveldown.flushWal", env, callback, [=](auto& state) { return database->db->FlushWAL(sync); },
1581
- [=](auto& state, auto env, auto& argv) { return napi_ok; });
1582
-
1583
- return 0;
1584
- }
1585
-
1586
1652
  NAPI_INIT() {
1587
1653
  NAPI_EXPORT_FUNCTION(db_init);
1588
1654
  NAPI_EXPORT_FUNCTION(db_open);
1589
1655
  NAPI_EXPORT_FUNCTION(db_get_identity);
1656
+ NAPI_EXPORT_FUNCTION(db_get_handle);
1657
+ NAPI_EXPORT_FUNCTION(db_get_location);
1590
1658
  NAPI_EXPORT_FUNCTION(db_close);
1591
1659
  NAPI_EXPORT_FUNCTION(db_get_many);
1592
1660
  NAPI_EXPORT_FUNCTION(db_clear);
1593
1661
  NAPI_EXPORT_FUNCTION(db_get_property);
1594
1662
  NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
1595
- NAPI_EXPORT_FUNCTION(db_flush_wal);
1596
1663
  NAPI_EXPORT_FUNCTION(db_get_merge_operands);
1597
1664
 
1598
1665
  NAPI_EXPORT_FUNCTION(iterator_init);
@@ -254,7 +254,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
254
254
  endif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
255
255
 
256
256
  set(PORTABLE 0 CACHE STRING "Minimum CPU arch to support, or 0 = current CPU, 1 = baseline CPU")
257
- if(PORTABLE STREQUAL 1)
257
+ if(PORTABLE MATCHES "1|ON|YES|TRUE|Y")
258
258
  # Usually nothing to do; compiler default is typically the most general
259
259
  if(NOT MSVC)
260
260
  if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x")
@@ -264,14 +264,7 @@ if(PORTABLE STREQUAL 1)
264
264
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=loongarch64")
265
265
  endif()
266
266
  endif()
267
- elseif(PORTABLE MATCHES [^0]+)
268
- # Name of a CPU arch spec or feature set to require
269
- if(MSVC)
270
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:${PORTABLE}")
271
- else()
272
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${PORTABLE}")
273
- endif()
274
- else()
267
+ elseif(PORTABLE MATCHES "0|OFF|NO|FALSE|N")
275
268
  if(MSVC)
276
269
  # NOTE: No auto-detection of current CPU, but instead assume some useful
277
270
  # level of optimization is supported
@@ -285,6 +278,13 @@ else()
285
278
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
286
279
  endif()
287
280
  endif()
281
+ else()
282
+ # Name of a CPU arch spec or feature set to require
283
+ if(MSVC)
284
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:${PORTABLE}")
285
+ else()
286
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${PORTABLE}")
287
+ endif()
288
288
  endif()
289
289
 
290
290
  include(CheckCXXSourceCompiles)
@@ -632,6 +632,7 @@ set(SOURCES
632
632
  cache/secondary_cache.cc
633
633
  cache/secondary_cache_adapter.cc
634
634
  cache/sharded_cache.cc
635
+ cache/tiered_secondary_cache.cc
635
636
  db/arena_wrapped_db_iter.cc
636
637
  db/blob/blob_contents.cc
637
638
  db/blob/blob_fetcher.cc
@@ -714,6 +715,7 @@ set(SOURCES
714
715
  db/wal_manager.cc
715
716
  db/wide/wide_column_serialization.cc
716
717
  db/wide/wide_columns.cc
718
+ db/wide/wide_columns_helper.cc
717
719
  db/write_batch.cc
718
720
  db/write_batch_base.cc
719
721
  db/write_controller.cc
@@ -1262,6 +1264,7 @@ if(WITH_TESTS)
1262
1264
  cache/cache_test.cc
1263
1265
  cache/compressed_secondary_cache_test.cc
1264
1266
  cache/lru_cache_test.cc
1267
+ cache/tiered_secondary_cache_test.cc
1265
1268
  db/blob/blob_counting_iterator_test.cc
1266
1269
  db/blob/blob_file_addition_test.cc
1267
1270
  db/blob/blob_file_builder_test.cc
@@ -1357,6 +1360,7 @@ if(WITH_TESTS)
1357
1360
  db/wal_edit_test.cc
1358
1361
  db/wide/db_wide_basic_test.cc
1359
1362
  db/wide/wide_column_serialization_test.cc
1363
+ db/wide/wide_columns_helper_test.cc
1360
1364
  db/write_batch_test.cc
1361
1365
  db/write_callback_test.cc
1362
1366
  db/write_controller_test.cc
@@ -1885,6 +1885,9 @@ compressed_secondary_cache_test: $(OBJ_DIR)/cache/compressed_secondary_cache_tes
1885
1885
  lru_cache_test: $(OBJ_DIR)/cache/lru_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1886
1886
  $(AM_LINK)
1887
1887
 
1888
+ tiered_secondary_cache_test: $(OBJ_DIR)/cache/tiered_secondary_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1889
+ $(AM_LINK)
1890
+
1888
1891
  range_del_aggregator_test: $(OBJ_DIR)/db/range_del_aggregator_test.o $(TEST_LIBRARY) $(LIBRARY)
1889
1892
  $(AM_LINK)
1890
1893
 
@@ -1984,6 +1987,9 @@ cache_reservation_manager_test: $(OBJ_DIR)/cache/cache_reservation_manager_test.
1984
1987
  wide_column_serialization_test: $(OBJ_DIR)/db/wide/wide_column_serialization_test.o $(TEST_LIBRARY) $(LIBRARY)
1985
1988
  $(AM_LINK)
1986
1989
 
1990
+ wide_columns_helper_test: $(OBJ_DIR)/db/wide/wide_columns_helper_test.o $(TEST_LIBRARY) $(LIBRARY)
1991
+ $(AM_LINK)
1992
+
1987
1993
  #-------------------------------------------------
1988
1994
  # make install related stuff
1989
1995
  PREFIX ?= /usr/local
@@ -2088,8 +2094,8 @@ ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-javadoc.jar
2088
2094
  ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-sources.jar
2089
2095
  SHA256_CMD = sha256sum
2090
2096
 
2091
- ZLIB_VER ?= 1.2.13
2092
- ZLIB_SHA256 ?= b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30
2097
+ ZLIB_VER ?= 1.3
2098
+ ZLIB_SHA256 ?= ff0ba4c292013dbc27530b3a81e1f9a813cd39de01ca5e0f8bf355702efa593e
2093
2099
  ZLIB_DOWNLOAD_BASE ?= http://zlib.net
2094
2100
  BZIP2_VER ?= 1.0.8
2095
2101
  BZIP2_SHA256 ?= ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
@@ -2097,11 +2103,11 @@ BZIP2_DOWNLOAD_BASE ?= http://sourceware.org/pub/bzip2
2097
2103
  SNAPPY_VER ?= 1.1.8
2098
2104
  SNAPPY_SHA256 ?= 16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f
2099
2105
  SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/archive
2100
- LZ4_VER ?= 1.9.3
2101
- LZ4_SHA256 ?= 030644df4611007ff7dc962d981f390361e6c97a34e5cbc393ddfbe019ffe2c1
2106
+ LZ4_VER ?= 1.9.4
2107
+ LZ4_SHA256 ?= 0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b
2102
2108
  LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
2103
- ZSTD_VER ?= 1.4.9
2104
- ZSTD_SHA256 ?= acf714d98e3db7b876e5b540cbf6dee298f60eb3c0723104f6d3f065cd60d6a8
2109
+ ZSTD_VER ?= 1.5.5
2110
+ ZSTD_SHA256 ?= 98e9c3d949d1b924e28e01eccb7deed865eefebf25c2f21c702e5cd5b63b85e1
2105
2111
  ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
2106
2112
  CURL_SSL_OPTS ?= --tlsv1
2107
2113
 
@@ -2413,6 +2419,9 @@ jtest_run:
2413
2419
  jtest: rocksdbjava
2414
2420
  cd java;$(MAKE) sample test
2415
2421
 
2422
+ jpmd: rocksdbjava rocksdbjavageneratepom
2423
+ cd java;$(MAKE) pmd
2424
+
2416
2425
  jdb_bench:
2417
2426
  cd java;$(MAKE) db_bench;
2418
2427
 
@@ -0,0 +1,29 @@
1
+ ## RocksDB: A Persistent Key-Value Store for Flash and RAM Storage
2
+
3
+ [![CircleCI Status](https://circleci.com/gh/facebook/rocksdb.svg?style=svg)](https://circleci.com/gh/facebook/rocksdb)
4
+
5
+ RocksDB is developed and maintained by Facebook Database Engineering Team.
6
+ It is built on earlier work on [LevelDB](https://github.com/google/leveldb) by Sanjay Ghemawat (sanjay@google.com)
7
+ and Jeff Dean (jeff@google.com)
8
+
9
+ This code is a library that forms the core building block for a fast
10
+ key-value server, especially suited for storing data on flash drives.
11
+ It has a Log-Structured-Merge-Database (LSM) design with flexible tradeoffs
12
+ between Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF)
13
+ and Space-Amplification-Factor (SAF). It has multi-threaded compactions,
14
+ making it especially suitable for storing multiple terabytes of data in a
15
+ single database.
16
+
17
+ Start with example usage here: https://github.com/facebook/rocksdb/tree/main/examples
18
+
19
+ See the [github wiki](https://github.com/facebook/rocksdb/wiki) for more explanation.
20
+
21
+ The public interface is in `include/`. Callers should not include or
22
+ rely on the details of any other header files in this package. Those
23
+ internal APIs may be changed without warning.
24
+
25
+ Questions and discussions are welcome on the [RocksDB Developers Public](https://www.facebook.com/groups/rocksdb.dev/) Facebook group and [email list](https://groups.google.com/g/rocksdb) on Google Groups.
26
+
27
+ ## License
28
+
29
+ RocksDB is dual-licensed under both the GPLv2 (found in the COPYING file in the root directory) and Apache 2.0 License (found in the LICENSE.Apache file in the root directory). You may select, at your option, one of the above-listed licenses.