@nxtedition/rocksdb 8.2.8 → 9.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 (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -53,8 +53,11 @@
53
53
  #include <zdict.h>
54
54
  #endif // ZSTD_VERSION_NUMBER >= 10103
55
55
  // v1.4.0+
56
+ // ZSTD_Compress2(), ZSTD_compressStream2() and frame parameters all belong to
57
+ // advanced APIs and require v1.4.0+.
58
+ // https://github.com/facebook/zstd/blob/eb9f881eb810f2242f1ef36b3f3e7014eecb8fa6/lib/zstd.h#L297C40-L297C45
56
59
  #if ZSTD_VERSION_NUMBER >= 10400
57
- #define ZSTD_STREAMING
60
+ #define ZSTD_ADVANCED
58
61
  #endif // ZSTD_VERSION_NUMBER >= 10400
59
62
  namespace ROCKSDB_NAMESPACE {
60
63
  // Need this for the context allocation override
@@ -180,6 +183,9 @@ struct CompressionDict {
180
183
  if (level == CompressionOptions::kDefaultCompressionLevel) {
181
184
  // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
182
185
  // https://github.com/facebook/zstd/issues/1148
186
+ // TODO(cbi): ZSTD_CLEVEL_DEFAULT is exposed after
187
+ // https://github.com/facebook/zstd/pull/1174. Use ZSTD_CLEVEL_DEFAULT
188
+ // instead of hardcoding 3.
183
189
  level = 3;
184
190
  }
185
191
  // Should be safe (but slower) if below call fails as we'll use the
@@ -363,14 +369,43 @@ class CompressionContext {
363
369
  private:
364
370
  #if defined(ZSTD) && (ZSTD_VERSION_NUMBER >= 500)
365
371
  ZSTD_CCtx* zstd_ctx_ = nullptr;
366
- void CreateNativeContext(CompressionType type) {
367
- if (type == kZSTD || type == kZSTDNotFinalCompression) {
372
+
373
+ ZSTD_CCtx* CreateZSTDContext() {
368
374
  #ifdef ROCKSDB_ZSTD_CUSTOM_MEM
369
- zstd_ctx_ =
370
- ZSTD_createCCtx_advanced(port::GetJeZstdAllocationOverrides());
375
+ return ZSTD_createCCtx_advanced(port::GetJeZstdAllocationOverrides());
371
376
  #else // ROCKSDB_ZSTD_CUSTOM_MEM
372
- zstd_ctx_ = ZSTD_createCCtx();
377
+ return ZSTD_createCCtx();
373
378
  #endif // ROCKSDB_ZSTD_CUSTOM_MEM
379
+ }
380
+
381
+ void CreateNativeContext(CompressionType type, int level, bool checksum) {
382
+ if (type == kZSTD || type == kZSTDNotFinalCompression) {
383
+ zstd_ctx_ = CreateZSTDContext();
384
+ #ifdef ZSTD_ADVANCED
385
+ if (level == CompressionOptions::kDefaultCompressionLevel) {
386
+ // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
387
+ // https://github.com/facebook/zstd/issues/1148
388
+ level = 3;
389
+ }
390
+ size_t err =
391
+ ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_compressionLevel, level);
392
+ if (ZSTD_isError(err)) {
393
+ assert(false);
394
+ ZSTD_freeCCtx(zstd_ctx_);
395
+ zstd_ctx_ = CreateZSTDContext();
396
+ }
397
+ if (checksum) {
398
+ err = ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_checksumFlag, 1);
399
+ if (ZSTD_isError(err)) {
400
+ assert(false);
401
+ ZSTD_freeCCtx(zstd_ctx_);
402
+ zstd_ctx_ = CreateZSTDContext();
403
+ }
404
+ }
405
+ #else
406
+ (void)level;
407
+ (void)checksum;
408
+ #endif
374
409
  }
375
410
  }
376
411
  void DestroyNativeContext() {
@@ -388,12 +423,14 @@ class CompressionContext {
388
423
 
389
424
  #else // ZSTD && (ZSTD_VERSION_NUMBER >= 500)
390
425
  private:
391
- void CreateNativeContext(CompressionType /* type */) {}
426
+ void CreateNativeContext(CompressionType /* type */, int /* level */,
427
+ bool /* checksum */) {}
392
428
  void DestroyNativeContext() {}
393
429
  #endif // ZSTD && (ZSTD_VERSION_NUMBER >= 500)
394
430
  public:
395
- explicit CompressionContext(CompressionType type) {
396
- CreateNativeContext(type);
431
+ explicit CompressionContext(CompressionType type,
432
+ const CompressionOptions& options) {
433
+ CreateNativeContext(type, options.level, options.checksum);
397
434
  }
398
435
  ~CompressionContext() { DestroyNativeContext(); }
399
436
  CompressionContext(const CompressionContext&) = delete;
@@ -525,7 +562,7 @@ inline bool ZSTDNotFinal_Supported() {
525
562
  }
526
563
 
527
564
  inline bool ZSTD_Streaming_Supported() {
528
- #if defined(ZSTD) && defined(ZSTD_STREAMING)
565
+ #if defined(ZSTD_ADVANCED)
529
566
  return true;
530
567
  #else
531
568
  return false;
@@ -1343,30 +1380,44 @@ inline bool ZSTD_Compress(const CompressionInfo& info, const char* input,
1343
1380
  size_t compressBound = ZSTD_compressBound(length);
1344
1381
  output->resize(static_cast<size_t>(output_header_len + compressBound));
1345
1382
  size_t outlen = 0;
1346
- int level;
1347
- if (info.options().level == CompressionOptions::kDefaultCompressionLevel) {
1348
- // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
1349
- // https://github.com/facebook/zstd/issues/1148
1350
- level = 3;
1351
- } else {
1352
- level = info.options().level;
1353
- }
1354
1383
  #if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
1355
1384
  ZSTD_CCtx* context = info.context().ZSTDPreallocCtx();
1356
1385
  assert(context != nullptr);
1386
+ #ifdef ZSTD_ADVANCED
1387
+ if (info.dict().GetDigestedZstdCDict() != nullptr) {
1388
+ ZSTD_CCtx_refCDict(context, info.dict().GetDigestedZstdCDict());
1389
+ } else {
1390
+ ZSTD_CCtx_loadDictionary(context, info.dict().GetRawDict().data(),
1391
+ info.dict().GetRawDict().size());
1392
+ }
1393
+
1394
+ // Compression level is set in `contex` during CreateNativeContext()
1395
+ outlen = ZSTD_compress2(context, &(*output)[output_header_len], compressBound,
1396
+ input, length);
1397
+ #else // ZSTD_ADVANCED
1357
1398
  #if ZSTD_VERSION_NUMBER >= 700 // v0.7.0+
1358
1399
  if (info.dict().GetDigestedZstdCDict() != nullptr) {
1359
1400
  outlen = ZSTD_compress_usingCDict(context, &(*output)[output_header_len],
1360
1401
  compressBound, input, length,
1361
1402
  info.dict().GetDigestedZstdCDict());
1362
1403
  }
1363
- #endif // ZSTD_VERSION_NUMBER >= 700
1404
+ #endif // ZSTD_VERSION_NUMBER >= 700
1405
+ // TODO (cbi): error handling for compression.
1364
1406
  if (outlen == 0) {
1407
+ int level;
1408
+ if (info.options().level == CompressionOptions::kDefaultCompressionLevel) {
1409
+ // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
1410
+ // https://github.com/facebook/zstd/issues/1148
1411
+ level = 3;
1412
+ } else {
1413
+ level = info.options().level;
1414
+ }
1365
1415
  outlen = ZSTD_compress_usingDict(context, &(*output)[output_header_len],
1366
1416
  compressBound, input, length,
1367
1417
  info.dict().GetRawDict().data(),
1368
1418
  info.dict().GetRawDict().size(), level);
1369
1419
  }
1420
+ #endif // ZSTD_ADVANCED
1370
1421
  #else // up to v0.4.x
1371
1422
  outlen = ZSTD_compress(&(*output)[output_header_len], compressBound, input,
1372
1423
  length, level);
@@ -1387,17 +1438,28 @@ inline bool ZSTD_Compress(const CompressionInfo& info, const char* input,
1387
1438
 
1388
1439
  // @param compression_dict Data for presetting the compression library's
1389
1440
  // dictionary.
1441
+ // @param error_message If not null, will be set if decompression fails.
1442
+ //
1443
+ // Returns nullptr if decompression fails.
1390
1444
  inline CacheAllocationPtr ZSTD_Uncompress(
1391
1445
  const UncompressionInfo& info, const char* input_data, size_t input_length,
1392
- size_t* uncompressed_size, MemoryAllocator* allocator = nullptr) {
1446
+ size_t* uncompressed_size, MemoryAllocator* allocator = nullptr,
1447
+ const char** error_message = nullptr) {
1393
1448
  #ifdef ZSTD
1449
+ static const char* const kErrorDecodeOutputSize =
1450
+ "Cannot decode output size.";
1451
+ static const char* const kErrorOutputLenMismatch =
1452
+ "Decompressed size does not match header.";
1394
1453
  uint32_t output_len = 0;
1395
1454
  if (!compression::GetDecompressedSizeInfo(&input_data, &input_length,
1396
1455
  &output_len)) {
1456
+ if (error_message) {
1457
+ *error_message = kErrorDecodeOutputSize;
1458
+ }
1397
1459
  return nullptr;
1398
1460
  }
1399
1461
 
1400
- auto output = AllocateBlock(output_len, allocator);
1462
+ CacheAllocationPtr output = AllocateBlock(output_len, allocator);
1401
1463
  size_t actual_output_length = 0;
1402
1464
  #if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
1403
1465
  ZSTD_DCtx* context = info.context().GetZSTDContext();
@@ -1407,19 +1469,31 @@ inline CacheAllocationPtr ZSTD_Uncompress(
1407
1469
  actual_output_length = ZSTD_decompress_usingDDict(
1408
1470
  context, output.get(), output_len, input_data, input_length,
1409
1471
  info.dict().GetDigestedZstdDDict());
1410
- }
1472
+ } else {
1411
1473
  #endif // ROCKSDB_ZSTD_DDICT
1412
- if (actual_output_length == 0) {
1413
1474
  actual_output_length = ZSTD_decompress_usingDict(
1414
1475
  context, output.get(), output_len, input_data, input_length,
1415
1476
  info.dict().GetRawDict().data(), info.dict().GetRawDict().size());
1477
+ #ifdef ROCKSDB_ZSTD_DDICT
1416
1478
  }
1479
+ #endif // ROCKSDB_ZSTD_DDICT
1417
1480
  #else // up to v0.4.x
1418
1481
  (void)info;
1419
1482
  actual_output_length =
1420
1483
  ZSTD_decompress(output.get(), output_len, input_data, input_length);
1421
1484
  #endif // ZSTD_VERSION_NUMBER >= 500
1422
- assert(actual_output_length == output_len);
1485
+ if (ZSTD_isError(actual_output_length)) {
1486
+ if (error_message) {
1487
+ *error_message = ZSTD_getErrorName(actual_output_length);
1488
+ }
1489
+ return nullptr;
1490
+ } else if (actual_output_length != output_len) {
1491
+ if (error_message) {
1492
+ *error_message = kErrorOutputLenMismatch;
1493
+ }
1494
+ return nullptr;
1495
+ }
1496
+
1423
1497
  *uncompressed_size = actual_output_length;
1424
1498
  return output;
1425
1499
  #else // ZSTD
@@ -1428,6 +1502,7 @@ inline CacheAllocationPtr ZSTD_Uncompress(
1428
1502
  (void)input_length;
1429
1503
  (void)uncompressed_size;
1430
1504
  (void)allocator;
1505
+ (void)error_message;
1431
1506
  return nullptr;
1432
1507
  #endif
1433
1508
  }
@@ -1530,6 +1605,7 @@ inline std::string ZSTD_FinalizeDictionary(
1530
1605
  return dict_data;
1531
1606
  }
1532
1607
  #else // up to v1.4.4
1608
+ assert(false);
1533
1609
  (void)samples;
1534
1610
  (void)sample_lens;
1535
1611
  (void)max_dict_bytes;
@@ -1589,7 +1665,8 @@ inline bool CompressData(const Slice& raw,
1589
1665
  inline CacheAllocationPtr UncompressData(
1590
1666
  const UncompressionInfo& uncompression_info, const char* data, size_t n,
1591
1667
  size_t* uncompressed_size, uint32_t compress_format_version,
1592
- MemoryAllocator* allocator = nullptr) {
1668
+ MemoryAllocator* allocator = nullptr,
1669
+ const char** error_message = nullptr) {
1593
1670
  switch (uncompression_info.type()) {
1594
1671
  case kSnappyCompression:
1595
1672
  return Snappy_Uncompress(data, n, uncompressed_size, allocator);
@@ -1609,8 +1686,9 @@ inline CacheAllocationPtr UncompressData(
1609
1686
  return CacheAllocationPtr(XPRESS_Uncompress(data, n, uncompressed_size));
1610
1687
  case kZSTD:
1611
1688
  case kZSTDNotFinalCompression:
1689
+ // TODO(cbi): error message handling for other compression algorithms.
1612
1690
  return ZSTD_Uncompress(uncompression_info, data, n, uncompressed_size,
1613
- allocator);
1691
+ allocator, error_message);
1614
1692
  default:
1615
1693
  return CacheAllocationPtr();
1616
1694
  }
@@ -1743,7 +1821,7 @@ class ZSTDStreamingCompress final : public StreamingCompress {
1743
1821
  size_t max_output_len)
1744
1822
  : StreamingCompress(kZSTD, opts, compress_format_version,
1745
1823
  max_output_len) {
1746
- #ifdef ZSTD_STREAMING
1824
+ #ifdef ZSTD_ADVANCED
1747
1825
  cctx_ = ZSTD_createCCtx();
1748
1826
  // Each compressed frame will have a checksum
1749
1827
  ZSTD_CCtx_setParameter(cctx_, ZSTD_c_checksumFlag, 1);
@@ -1752,14 +1830,14 @@ class ZSTDStreamingCompress final : public StreamingCompress {
1752
1830
  #endif
1753
1831
  }
1754
1832
  ~ZSTDStreamingCompress() override {
1755
- #ifdef ZSTD_STREAMING
1833
+ #ifdef ZSTD_ADVANCED
1756
1834
  ZSTD_freeCCtx(cctx_);
1757
1835
  #endif
1758
1836
  }
1759
1837
  int Compress(const char* input, size_t input_size, char* output,
1760
1838
  size_t* output_pos) override;
1761
1839
  void Reset() override;
1762
- #ifdef ZSTD_STREAMING
1840
+ #ifdef ZSTD_ADVANCED
1763
1841
  ZSTD_CCtx* cctx_;
1764
1842
  ZSTD_inBuffer input_buffer_;
1765
1843
  #endif
@@ -1770,14 +1848,14 @@ class ZSTDStreamingUncompress final : public StreamingUncompress {
1770
1848
  explicit ZSTDStreamingUncompress(uint32_t compress_format_version,
1771
1849
  size_t max_output_len)
1772
1850
  : StreamingUncompress(kZSTD, compress_format_version, max_output_len) {
1773
- #ifdef ZSTD_STREAMING
1851
+ #ifdef ZSTD_ADVANCED
1774
1852
  dctx_ = ZSTD_createDCtx();
1775
1853
  assert(dctx_ != nullptr);
1776
1854
  input_buffer_ = {/*src=*/nullptr, /*size=*/0, /*pos=*/0};
1777
1855
  #endif
1778
1856
  }
1779
1857
  ~ZSTDStreamingUncompress() override {
1780
- #ifdef ZSTD_STREAMING
1858
+ #ifdef ZSTD_ADVANCED
1781
1859
  ZSTD_freeDCtx(dctx_);
1782
1860
  #endif
1783
1861
  }
@@ -1786,7 +1864,7 @@ class ZSTDStreamingUncompress final : public StreamingUncompress {
1786
1864
  void Reset() override;
1787
1865
 
1788
1866
  private:
1789
- #ifdef ZSTD_STREAMING
1867
+ #ifdef ZSTD_ADVANCED
1790
1868
  ZSTD_DCtx* dctx_;
1791
1869
  ZSTD_inBuffer input_buffer_;
1792
1870
  #endif
@@ -13,6 +13,7 @@
13
13
 
14
14
  #include "port/likely.h"
15
15
  #include "port/port.h"
16
+ #include "util/math.h"
16
17
  #include "util/random.h"
17
18
 
18
19
  namespace ROCKSDB_NAMESPACE {
@@ -70,7 +71,7 @@ std::pair<T*, size_t> CoreLocalArray<T>::AccessElementAndIndex() const {
70
71
  // cpu id unavailable, just pick randomly
71
72
  core_idx = Random::GetTLSInstance()->Uniform(1 << size_shift_);
72
73
  } else {
73
- core_idx = static_cast<size_t>(cpuid & ((1 << size_shift_) - 1));
74
+ core_idx = static_cast<size_t>(BottomNBits(cpuid, size_shift_));
74
75
  }
75
76
  return {AccessAtCore(core_idx), core_idx};
76
77
  }
@@ -126,7 +126,7 @@ inline void DynamicBloom::MayContain(int num_keys, Slice* keys,
126
126
  std::array<size_t, MultiGetContext::MAX_BATCH_SIZE> byte_offsets;
127
127
  for (int i = 0; i < num_keys; ++i) {
128
128
  hashes[i] = BloomHash(keys[i]);
129
- size_t a = FastRange32(kLen, hashes[i]);
129
+ size_t a = FastRange32(hashes[i], kLen);
130
130
  PREFETCH(data_ + a, 0, 3);
131
131
  byte_offsets[i] = a;
132
132
  }
@@ -142,7 +142,7 @@ inline void DynamicBloom::MayContain(int num_keys, Slice* keys,
142
142
  #pragma warning(disable : 4189)
143
143
  #endif
144
144
  inline void DynamicBloom::Prefetch(uint32_t h32) {
145
- size_t a = FastRange32(kLen, h32);
145
+ size_t a = FastRange32(h32, kLen);
146
146
  PREFETCH(data_ + a, 0, 3);
147
147
  }
148
148
  #if defined(_MSC_VER)
@@ -171,7 +171,7 @@ inline void DynamicBloom::Prefetch(uint32_t h32) {
171
171
  // because of false positives.)
172
172
 
173
173
  inline bool DynamicBloom::MayContainHash(uint32_t h32) const {
174
- size_t a = FastRange32(kLen, h32);
174
+ size_t a = FastRange32(h32, kLen);
175
175
  PREFETCH(data_ + a, 0, 3);
176
176
  return DoubleProbe(h32, a);
177
177
  }
@@ -195,7 +195,7 @@ inline bool DynamicBloom::DoubleProbe(uint32_t h32, size_t byte_offset) const {
195
195
 
196
196
  template <typename OrFunc>
197
197
  inline void DynamicBloom::AddHash(uint32_t h32, const OrFunc& or_func) {
198
- size_t a = FastRange32(kLen, h32);
198
+ size_t a = FastRange32(h32, kLen);
199
199
  PREFETCH(data_ + a, 0, 3);
200
200
  // Expand/remix with 64-bit golden ratio
201
201
  uint64_t h = 0x9e3779b97f4a7c13ULL * h32;
@@ -11,6 +11,9 @@
11
11
  #include <sys/types.h>
12
12
  #include <sys/wait.h>
13
13
  #endif
14
+ #ifdef __OpenBSD__
15
+ #include <sys/wait.h>
16
+ #endif
14
17
  #include <vector>
15
18
 
16
19
  #include "test_util/testharness.h"
@@ -128,10 +128,14 @@ inline uint32_t Upper32of64(uint64_t v) {
128
128
  }
129
129
  inline uint32_t Lower32of64(uint64_t v) { return static_cast<uint32_t>(v); }
130
130
 
131
- // std::hash compatible interface.
132
- // TODO: consider rename to SliceHasher32
133
- struct SliceHasher {
131
+ // std::hash-like interface.
132
+ struct SliceHasher32 {
134
133
  uint32_t operator()(const Slice& s) const { return GetSliceHash(s); }
135
134
  };
135
+ struct SliceNPHasher64 {
136
+ uint64_t operator()(const Slice& s, uint64_t seed = 0) const {
137
+ return GetSliceNPHash64(s, seed);
138
+ }
139
+ };
136
140
 
137
141
  } // namespace ROCKSDB_NAMESPACE
@@ -565,6 +565,8 @@ size_t FastRange64(uint64_t hash, size_t range) {
565
565
  // Tests for math.h / math128.h (not worth a separate test binary)
566
566
  using ROCKSDB_NAMESPACE::BitParity;
567
567
  using ROCKSDB_NAMESPACE::BitsSetToOne;
568
+ using ROCKSDB_NAMESPACE::BitwiseAnd;
569
+ using ROCKSDB_NAMESPACE::BottomNBits;
568
570
  using ROCKSDB_NAMESPACE::ConstexprFloorLog2;
569
571
  using ROCKSDB_NAMESPACE::CountTrailingZeroBits;
570
572
  using ROCKSDB_NAMESPACE::DecodeFixed128;
@@ -580,6 +582,19 @@ using ROCKSDB_NAMESPACE::Upper64of128;
580
582
 
581
583
  int blah(int x) { return DownwardInvolution(x); }
582
584
 
585
+ template <typename T1, typename T2>
586
+ static void test_BitwiseAnd(T1 v1, T2 v2) {
587
+ auto a = BitwiseAnd(v1, v2);
588
+ // Essentially repeating the implementation :-/
589
+ if constexpr (sizeof(T1) < sizeof(T2)) {
590
+ static_assert(std::is_same_v<decltype(a), T1>);
591
+ EXPECT_EQ(a, static_cast<T1>(v1 & v2));
592
+ } else {
593
+ static_assert(std::is_same_v<decltype(a), T2>);
594
+ EXPECT_EQ(a, static_cast<T2>(v1 & v2));
595
+ }
596
+ }
597
+
583
598
  template <typename T>
584
599
  static void test_BitOps() {
585
600
  // This complex code is to generalize to 128-bit values. Otherwise
@@ -598,6 +613,22 @@ static void test_BitOps() {
598
613
  // If we could directly use arithmetic:
599
614
  // T vm1 = static_cast<T>(v - 1);
600
615
 
616
+ // BottomNBits
617
+ {
618
+ // An essentially full length value
619
+ T x = everyOtherBit;
620
+ if (i > 2) {
621
+ // Make it slightly irregular
622
+ x = x ^ (T{1} << (i / 2));
623
+ }
624
+ auto a = BottomNBits(x, i);
625
+ auto b = BottomNBits(~x, i);
626
+ EXPECT_EQ(x | a, x);
627
+ EXPECT_EQ(a | b, vm1);
628
+ EXPECT_EQ(a & b, T{0});
629
+ EXPECT_EQ(BottomNBits(x ^ a, i), T{0});
630
+ }
631
+
601
632
  // FloorLog2
602
633
  if (v > 0) {
603
634
  EXPECT_EQ(FloorLog2(v), i);
@@ -707,9 +738,22 @@ static void test_BitOps() {
707
738
  }
708
739
  }
709
740
 
741
+ // BitwiseAnd
742
+ {
743
+ test_BitwiseAnd(vm1, static_cast<char>(0x99));
744
+ test_BitwiseAnd(v, static_cast<char>(0x99));
745
+ test_BitwiseAnd(char{0x66}, vm1);
746
+ test_BitwiseAnd(char{0x66}, v);
747
+ test_BitwiseAnd(v, int16_t{0x6699});
748
+ test_BitwiseAnd(v, uint16_t{0x9966});
749
+ test_BitwiseAnd(int64_t{0x1234234534564567}, v);
750
+ test_BitwiseAnd(uint64_t{0x9876876576545432}, v);
751
+ }
752
+
710
753
  vm1 = (vm1 << 1) | 1;
711
754
  }
712
755
 
756
+ // ConstexprFloorLog2
713
757
  EXPECT_EQ(ConstexprFloorLog2(T{1}), 0);
714
758
  EXPECT_EQ(ConstexprFloorLog2(T{2}), 1);
715
759
  EXPECT_EQ(ConstexprFloorLog2(T{3}), 1);
@@ -9,6 +9,9 @@
9
9
  #ifdef _MSC_VER
10
10
  #include <intrin.h>
11
11
  #endif
12
+ #ifdef __BMI2__
13
+ #include <immintrin.h>
14
+ #endif
12
15
 
13
16
  #include <cstdint>
14
17
  #include <type_traits>
@@ -20,11 +23,33 @@ ASSERT_FEATURE_COMPAT_HEADER();
20
23
 
21
24
  namespace ROCKSDB_NAMESPACE {
22
25
 
26
+ // Fast implementation of extracting the bottom n bits of an integer.
27
+ // To ensure fast implementation, undefined if n bits is full width or more.
28
+ template <typename T>
29
+ inline T BottomNBits(T v, int nbits) {
30
+ static_assert(std::is_integral_v<T>, "non-integral type");
31
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
32
+ assert(nbits >= 0);
33
+ assert(nbits < int{8 * sizeof(T)});
34
+ #ifdef __BMI2__
35
+ if constexpr (sizeof(T) <= 4) {
36
+ return static_cast<T>(_bzhi_u32(static_cast<uint32_t>(v), nbits));
37
+ }
38
+ if constexpr (sizeof(T) <= 8) {
39
+ return static_cast<T>(_bzhi_u64(static_cast<uint64_t>(v), nbits));
40
+ }
41
+ #endif
42
+ // Newer compilers compile this down to bzhi on x86, but some older
43
+ // ones don't, thus the need for the intrinsic above.
44
+ return static_cast<T>(v & ((T{1} << nbits) - 1));
45
+ }
46
+
23
47
  // Fast implementation of floor(log2(v)). Undefined for 0 or negative
24
48
  // numbers (in case of signed type).
25
49
  template <typename T>
26
50
  inline int FloorLog2(T v) {
27
- static_assert(std::is_integral<T>::value, "non-integral type");
51
+ static_assert(std::is_integral_v<T>, "non-integral type");
52
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
28
53
  assert(v > 0);
29
54
  #ifdef _MSC_VER
30
55
  static_assert(sizeof(T) <= sizeof(uint64_t), "type too big");
@@ -63,6 +88,8 @@ inline int FloorLog2(T v) {
63
88
  // Constexpr version of FloorLog2
64
89
  template <typename T>
65
90
  constexpr int ConstexprFloorLog2(T v) {
91
+ // NOTE: not checking is_integral so that this works with Unsigned128
92
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
66
93
  int rv = 0;
67
94
  while (v > T{1}) {
68
95
  ++rv;
@@ -74,7 +101,8 @@ constexpr int ConstexprFloorLog2(T v) {
74
101
  // Number of low-order zero bits before the first 1 bit. Undefined for 0.
75
102
  template <typename T>
76
103
  inline int CountTrailingZeroBits(T v) {
77
- static_assert(std::is_integral<T>::value, "non-integral type");
104
+ static_assert(std::is_integral_v<T>, "non-integral type");
105
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
78
106
  assert(v != 0);
79
107
  #ifdef _MSC_VER
80
108
  static_assert(sizeof(T) <= sizeof(uint64_t), "type too big");
@@ -115,6 +143,9 @@ namespace detail {
115
143
 
116
144
  template <typename T>
117
145
  int BitsSetToOneFallback(T v) {
146
+ static_assert(std::is_integral_v<T>, "non-integral type");
147
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
148
+
118
149
  const int kBits = static_cast<int>(sizeof(T)) * 8;
119
150
  static_assert((kBits & (kBits - 1)) == 0, "must be power of two bits");
120
151
  // we static_cast these bit patterns in order to truncate them to the correct
@@ -140,7 +171,9 @@ int BitsSetToOneFallback(T v) {
140
171
  // Number of bits set to 1. Also known as "population count".
141
172
  template <typename T>
142
173
  inline int BitsSetToOne(T v) {
143
- static_assert(std::is_integral<T>::value, "non-integral type");
174
+ static_assert(std::is_integral_v<T>, "non-integral type");
175
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
176
+
144
177
  #ifdef _MSC_VER
145
178
  static_assert(sizeof(T) <= sizeof(uint64_t), "type too big");
146
179
  if (sizeof(T) < sizeof(uint32_t)) {
@@ -192,7 +225,9 @@ inline int BitsSetToOne(T v) {
192
225
 
193
226
  template <typename T>
194
227
  inline int BitParity(T v) {
195
- static_assert(std::is_integral<T>::value, "non-integral type");
228
+ static_assert(std::is_integral_v<T>, "non-integral type");
229
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
230
+
196
231
  #ifdef _MSC_VER
197
232
  // bit parity == oddness of popcount
198
233
  return BitsSetToOne(v) & 1;
@@ -214,7 +249,8 @@ inline int BitParity(T v) {
214
249
  // encode/decode big endian.
215
250
  template <typename T>
216
251
  inline T EndianSwapValue(T v) {
217
- static_assert(std::is_integral<T>::value, "non-integral type");
252
+ static_assert(std::is_integral_v<T>, "non-integral type");
253
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
218
254
 
219
255
  #ifdef _MSC_VER
220
256
  if (sizeof(T) == 2) {
@@ -244,6 +280,9 @@ inline T EndianSwapValue(T v) {
244
280
  // Reverses the order of bits in an integral value
245
281
  template <typename T>
246
282
  inline T ReverseBits(T v) {
283
+ static_assert(std::is_integral_v<T>, "non-integral type");
284
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
285
+
247
286
  T r = EndianSwapValue(v);
248
287
  const T kHighestByte = T{1} << ((sizeof(T) - 1) * 8);
249
288
  const T kEveryByte = kHighestByte | (kHighestByte / 255);
@@ -277,7 +316,8 @@ inline T ReverseBits(T v) {
277
316
  // is that all square sub-matrices that include the top row are invertible.
278
317
  template <typename T>
279
318
  inline T DownwardInvolution(T v) {
280
- static_assert(std::is_integral<T>::value, "non-integral type");
319
+ static_assert(std::is_integral_v<T>, "non-integral type");
320
+ static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
281
321
  static_assert(sizeof(T) <= 8, "only supported up to 64 bits");
282
322
 
283
323
  uint64_t r = static_cast<uint64_t>(v);
@@ -296,4 +336,16 @@ inline T DownwardInvolution(T v) {
296
336
  return static_cast<T>(r);
297
337
  }
298
338
 
339
+ // Bitwise-And with typing that allows you to avoid writing an explicit cast
340
+ // to the smaller type, or the type of the right parameter if same size.
341
+ template <typename A, typename B>
342
+ inline std::conditional_t<sizeof(A) < sizeof(B), A, B> BitwiseAnd(A a, B b) {
343
+ static_assert(std::is_integral_v<A>, "non-integral type");
344
+ static_assert(std::is_integral_v<B>, "non-integral type");
345
+ static_assert(!std::is_reference_v<A>, "use std::remove_reference_t");
346
+ static_assert(!std::is_reference_v<B>, "use std::remove_reference_t");
347
+ using Smaller = std::conditional_t<sizeof(A) < sizeof(B), A, B>;
348
+ return static_cast<Smaller>(a & b);
349
+ }
350
+
299
351
  } // namespace ROCKSDB_NAMESPACE
@@ -41,13 +41,13 @@ struct Unsigned128 {
41
41
  hi = upper;
42
42
  }
43
43
 
44
- explicit operator uint64_t() { return lo; }
45
-
46
- explicit operator uint32_t() { return static_cast<uint32_t>(lo); }
47
-
48
- explicit operator uint16_t() { return static_cast<uint16_t>(lo); }
49
-
50
- explicit operator uint8_t() { return static_cast<uint8_t>(lo); }
44
+ // Convert to any integer 64 bits or less.
45
+ template <typename T,
46
+ typename = std::enable_if_t<std::is_integral_v<T> &&
47
+ sizeof(T) <= sizeof(uint64_t)> >
48
+ explicit operator T() {
49
+ return static_cast<T>(lo);
50
+ }
51
51
  };
52
52
 
53
53
  inline Unsigned128 operator<<(const Unsigned128& lhs, unsigned shift) {
@@ -190,6 +190,16 @@ inline Unsigned128 Multiply64to128(uint64_t a, uint64_t b) {
190
190
  #endif
191
191
  }
192
192
 
193
+ template <>
194
+ inline Unsigned128 BottomNBits(Unsigned128 v, int nbits) {
195
+ if (nbits < 64) {
196
+ return BottomNBits(Lower64of128(v), nbits);
197
+ } else {
198
+ return (Unsigned128{BottomNBits(Upper64of128(v), nbits - 64)} << 64) |
199
+ Lower64of128(v);
200
+ }
201
+ }
202
+
193
203
  template <>
194
204
  inline int FloorLog2(Unsigned128 v) {
195
205
  if (Upper64of128(v) == 0) {
@@ -236,6 +246,18 @@ inline Unsigned128 DownwardInvolution(Unsigned128 v) {
236
246
  DownwardInvolution(Upper64of128(v) ^ Lower64of128(v));
237
247
  }
238
248
 
249
+ template <typename A>
250
+ inline std::remove_reference_t<A> BitwiseAnd(A a, Unsigned128 b) {
251
+ static_assert(sizeof(A) <= sizeof(Unsigned128));
252
+ return static_cast<A>(a & b);
253
+ }
254
+
255
+ template <typename B>
256
+ inline std::remove_reference_t<B> BitwiseAnd(Unsigned128 a, B b) {
257
+ static_assert(sizeof(B) <= sizeof(Unsigned128));
258
+ return static_cast<B>(a & b);
259
+ }
260
+
239
261
  template <typename T>
240
262
  struct IsUnsignedUpTo128
241
263
  : std::integral_constant<bool, std::is_unsigned<T>::value ||