@nxtedition/rocksdb 8.2.0 → 8.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/binding.cc +3 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
  3. package/deps/rocksdb/rocksdb/Makefile +10 -5
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -345
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
  15. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
  17. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
  25. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
  30. package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
  31. package/deps/rocksdb/rocksdb/db/builder.h +2 -2
  32. package/deps/rocksdb/rocksdb/db/c.cc +76 -5
  33. package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
  34. package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
  51. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  52. package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
  55. package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
  58. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
  71. package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
  72. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
  73. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
  76. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
  77. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
  78. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
  79. package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
  80. package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
  81. package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
  82. package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
  83. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
  84. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
  85. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
  86. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
  87. package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
  88. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
  90. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
  93. package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
  94. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
  95. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
  96. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
  97. package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
  98. package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
  99. package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
  100. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
  101. package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
  103. package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
  104. package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
  105. package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
  106. package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
  107. package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
  108. package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
  109. package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
  110. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
  111. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
  113. package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
  114. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
  115. package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
  116. package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
  117. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  118. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
  119. package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
  120. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  121. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
  122. package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
  123. package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
  124. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
  125. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
  128. package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
  131. package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
  145. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
  146. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
  150. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
  151. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
  152. package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
  153. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  154. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
  155. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
  156. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
  157. package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
  158. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  159. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
  160. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
  161. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
  162. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
  163. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
  164. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
  165. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
  166. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
  167. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
  168. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
  169. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
  171. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
  173. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
  174. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
  175. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
  176. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
  177. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
  178. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
  186. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
  188. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
  189. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
  192. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
  193. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  194. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
  195. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
  196. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
  197. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
  198. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
  199. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
  200. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
  201. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  202. package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
  203. package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
  204. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
  205. package/deps/rocksdb/rocksdb/options/options.cc +12 -53
  206. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  207. package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
  208. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
  209. package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
  210. package/deps/rocksdb/rocksdb/port/lang.h +27 -0
  211. package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
  212. package/deps/rocksdb/rocksdb/src.mk +2 -0
  213. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
  214. package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
  215. package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
  216. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
  217. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
  219. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
  220. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
  221. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
  222. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
  223. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
  224. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
  225. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
  226. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
  228. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
  229. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
  230. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
  232. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
  233. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
  234. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
  236. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
  237. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
  239. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
  240. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
  241. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
  242. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
  243. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
  244. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
  245. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
  247. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
  248. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
  249. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
  250. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
  251. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  252. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  253. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
  254. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
  255. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
  256. package/deps/rocksdb/rocksdb/table/format.cc +4 -4
  257. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  258. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
  259. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
  260. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  261. package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
  262. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
  264. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
  266. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
  267. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
  268. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
  269. package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
  270. package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
  271. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
  272. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
  275. package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
  277. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
  278. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
  279. package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
  280. package/deps/rocksdb/rocksdb/util/compression.h +1 -1
  281. package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
  282. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
  283. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
  284. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
  286. package/deps/rocksdb/rocksdb/util/math.h +12 -7
  287. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
  288. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
  289. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
  290. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
  291. package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
  292. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
  293. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  294. package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
  295. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
  296. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
  297. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
  298. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
  299. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  300. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
  301. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
  302. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
  303. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
  304. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
  305. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
  306. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
  307. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
  308. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
  309. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
  310. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
  311. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
  312. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
  313. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
  314. package/package.json +1 -1
  315. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  316. package/prebuilds/linux-x64/node.napi.node +0 -0
  317. /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
  318. /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
  319. /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
  320. /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
  321. /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
@@ -33,6 +33,7 @@
33
33
  #include <iostream>
34
34
  #include <memory>
35
35
  #include <mutex>
36
+ #include <optional>
36
37
  #include <queue>
37
38
  #include <thread>
38
39
  #include <unordered_map>
@@ -41,7 +42,7 @@
41
42
  #include "db/malloc_stats.h"
42
43
  #include "db/version_set.h"
43
44
  #include "monitoring/histogram.h"
44
- #include "monitoring/statistics.h"
45
+ #include "monitoring/statistics_impl.h"
45
46
  #include "options/cf_options.h"
46
47
  #include "port/port.h"
47
48
  #include "port/stack_trace.h"
@@ -287,7 +288,7 @@ DEFINE_int32(bloom_locality, 0, "Control bloom filter probes locality");
287
288
  DEFINE_int64(seed, 0,
288
289
  "Seed base for random number generators. "
289
290
  "When 0 it is derived from the current time.");
290
- static int64_t seed_base;
291
+ static std::optional<int64_t> seed_base;
291
292
 
292
293
  DEFINE_int32(threads, 1, "Number of concurrent threads to run.");
293
294
 
@@ -548,7 +549,7 @@ DEFINE_bool(universal_allow_trivial_move, false,
548
549
  DEFINE_bool(universal_incremental, false,
549
550
  "Enable incremental compactions in universal compaction.");
550
551
 
551
- DEFINE_int64(cache_size, 8 << 20, // 8MB
552
+ DEFINE_int64(cache_size, 32 << 20, // 32MB
552
553
  "Number of bytes to use as a cache of uncompressed data");
553
554
 
554
555
  DEFINE_int32(cache_numshardbits, -1,
@@ -569,7 +570,7 @@ DEFINE_string(cache_type, "lru_cache", "Type of block cache.");
569
570
  DEFINE_bool(use_compressed_secondary_cache, false,
570
571
  "Use the CompressedSecondaryCache as the secondary cache.");
571
572
 
572
- DEFINE_int64(compressed_secondary_cache_size, 8 << 20, // 8MB
573
+ DEFINE_int64(compressed_secondary_cache_size, 32 << 20, // 32MB
573
574
  "Number of bytes to use as a cache of data");
574
575
 
575
576
  DEFINE_int32(compressed_secondary_cache_numshardbits, 6,
@@ -1725,6 +1726,10 @@ DEFINE_uint32(
1725
1726
  "This options determines the size of such checksums. "
1726
1727
  "Supported values: 0, 1, 2, 4, 8.");
1727
1728
 
1729
+ DEFINE_uint32(block_protection_bytes_per_key, 0,
1730
+ "Enable block per key-value checksum protection. "
1731
+ "Supported values: 0, 1, 2, 4, 8.");
1732
+
1728
1733
  DEFINE_bool(build_info, false,
1729
1734
  "Print the build info via GetRocksBuildInfoAsString");
1730
1735
 
@@ -2602,7 +2607,7 @@ struct ThreadState {
2602
2607
  SharedState* shared;
2603
2608
 
2604
2609
  explicit ThreadState(int index, int my_seed)
2605
- : tid(index), rand(seed_base + my_seed) {}
2610
+ : tid(index), rand(*seed_base + my_seed) {}
2606
2611
  };
2607
2612
 
2608
2613
  class Duration {
@@ -2998,6 +3003,11 @@ class Benchmark {
2998
3003
  return allocator;
2999
3004
  }
3000
3005
 
3006
+ static int32_t GetCacheHashSeed() {
3007
+ // For a fixed Cache seed, need a non-negative int32
3008
+ return static_cast<int32_t>(*seed_base) & 0x7fffffff;
3009
+ }
3010
+
3001
3011
  static std::shared_ptr<Cache> NewCache(int64_t capacity) {
3002
3012
  if (capacity <= 0) {
3003
3013
  return nullptr;
@@ -3006,17 +3016,19 @@ class Benchmark {
3006
3016
  fprintf(stderr, "Old clock cache implementation has been removed.\n");
3007
3017
  exit(1);
3008
3018
  } else if (FLAGS_cache_type == "hyper_clock_cache") {
3009
- return HyperClockCacheOptions(static_cast<size_t>(capacity),
3010
- FLAGS_block_size /*estimated_entry_charge*/,
3011
- FLAGS_cache_numshardbits)
3012
- .MakeSharedCache();
3019
+ HyperClockCacheOptions hcco{
3020
+ static_cast<size_t>(capacity),
3021
+ static_cast<size_t>(FLAGS_block_size) /*estimated_entry_charge*/,
3022
+ FLAGS_cache_numshardbits};
3023
+ hcco.hash_seed = GetCacheHashSeed();
3024
+ return hcco.MakeSharedCache();
3013
3025
  } else if (FLAGS_cache_type == "lru_cache") {
3014
3026
  LRUCacheOptions opts(
3015
3027
  static_cast<size_t>(capacity), FLAGS_cache_numshardbits,
3016
3028
  false /*strict_capacity_limit*/, FLAGS_cache_high_pri_pool_ratio,
3017
3029
  GetCacheAllocator(), kDefaultToAdaptiveMutex,
3018
3030
  kDefaultCacheMetadataChargePolicy, FLAGS_cache_low_pri_pool_ratio);
3019
-
3031
+ opts.hash_seed = GetCacheHashSeed();
3020
3032
  if (!FLAGS_secondary_cache_uri.empty()) {
3021
3033
  Status s = SecondaryCache::CreateFromString(
3022
3034
  ConfigOptions(), FLAGS_secondary_cache_uri, &secondary_cache);
@@ -3047,7 +3059,7 @@ class Benchmark {
3047
3059
  NewCompressedSecondaryCache(secondary_cache_opts);
3048
3060
  }
3049
3061
 
3050
- return NewLRUCache(opts);
3062
+ return opts.MakeSharedCache();
3051
3063
  } else {
3052
3064
  fprintf(stderr, "Cache type not supported.");
3053
3065
  exit(1);
@@ -4565,6 +4577,8 @@ class Benchmark {
4565
4577
  }
4566
4578
  options.memtable_protection_bytes_per_key =
4567
4579
  FLAGS_memtable_protection_bytes_per_key;
4580
+ options.block_protection_bytes_per_key =
4581
+ FLAGS_block_protection_bytes_per_key;
4568
4582
  }
4569
4583
 
4570
4584
  void InitializeOptionsGeneral(Options* opts) {
@@ -4590,7 +4604,7 @@ class Benchmark {
4590
4604
  if (FLAGS_cache_size > 0) {
4591
4605
  // This violates this function's rules on when to set options. But we
4592
4606
  // have to do it because the case of unconfigured block cache in OPTIONS
4593
- // file is indistinguishable (it is sanitized to 8MB by this point, not
4607
+ // file is indistinguishable (it is sanitized to 32MB by this point, not
4594
4608
  // nullptr), and our regression tests assume this will be the shared
4595
4609
  // block cache, even with OPTIONS file provided.
4596
4610
  table_options->block_cache = cache_;
@@ -4885,7 +4899,7 @@ class Benchmark {
4885
4899
  values_[i] = i;
4886
4900
  }
4887
4901
  RandomShuffle(values_.begin(), values_.end(),
4888
- static_cast<uint32_t>(seed_base));
4902
+ static_cast<uint32_t>(*seed_base));
4889
4903
  }
4890
4904
  }
4891
4905
 
@@ -4997,7 +5011,7 @@ class Benchmark {
4997
5011
  // Default_random_engine provides slightly
4998
5012
  // improved throughput over mt19937.
4999
5013
  std::default_random_engine overwrite_gen{
5000
- static_cast<unsigned int>(seed_base)};
5014
+ static_cast<unsigned int>(*seed_base)};
5001
5015
  std::bernoulli_distribution overwrite_decider(p);
5002
5016
 
5003
5017
  // Inserted key window is filled with the last N
@@ -5007,7 +5021,7 @@ class Benchmark {
5007
5021
  // - random access is O(1)
5008
5022
  // - insertion/removal at beginning/end is also O(1).
5009
5023
  std::deque<int64_t> inserted_key_window;
5010
- Random64 reservoir_id_gen(seed_base);
5024
+ Random64 reservoir_id_gen(*seed_base);
5011
5025
 
5012
5026
  // --- Variables used in disposable/persistent keys simulation:
5013
5027
  // The following variables are used when
@@ -5044,7 +5058,7 @@ class Benchmark {
5044
5058
  ErrorExit();
5045
5059
  }
5046
5060
  }
5047
- Random rnd_disposable_entry(static_cast<uint32_t>(seed_base));
5061
+ Random rnd_disposable_entry(static_cast<uint32_t>(*seed_base));
5048
5062
  std::string random_value;
5049
5063
  // Queue that stores scheduled timestamp of disposable entries deletes,
5050
5064
  // along with starting index of disposable entry keys to delete.
@@ -6978,6 +6992,8 @@ class Benchmark {
6978
6992
 
6979
6993
  thread->stats.FinishedOps(&db_, db_.db, 1, kSeek);
6980
6994
  }
6995
+ (void)num_seek_to_first;
6996
+ (void)num_next;
6981
6997
  delete iter;
6982
6998
  }
6983
6999
 
@@ -8508,7 +8524,7 @@ int db_bench_tool(int argc, char** argv) {
8508
8524
  uint64_t now = FLAGS_env->GetSystemClock()->NowMicros();
8509
8525
  seed_base = static_cast<int64_t>(now);
8510
8526
  fprintf(stdout, "Set seed to %" PRIu64 " because --seed was 0\n",
8511
- seed_base);
8527
+ *seed_base);
8512
8528
  } else {
8513
8529
  seed_base = FLAGS_seed;
8514
8530
  }
@@ -4168,6 +4168,8 @@ UnsafeRemoveSstFileCommand::UnsafeRemoveSstFileCommand(
4168
4168
  }
4169
4169
 
4170
4170
  void UnsafeRemoveSstFileCommand::DoCommand() {
4171
+ // TODO: plumb Env::IOActivity
4172
+ const ReadOptions read_options;
4171
4173
  PrepareOptions();
4172
4174
 
4173
4175
  OfflineManifestWriter w(options_, db_path_);
@@ -4192,7 +4194,7 @@ void UnsafeRemoveSstFileCommand::DoCommand() {
4192
4194
  s = options_.env->GetFileSystem()->NewDirectory(db_path_, IOOptions(),
4193
4195
  &db_dir, nullptr);
4194
4196
  if (s.ok()) {
4195
- s = w.LogAndApply(cfd, &edit, db_dir.get());
4197
+ s = w.LogAndApply(read_options, cfd, &edit, db_dir.get());
4196
4198
  }
4197
4199
  }
4198
4200
 
@@ -17,7 +17,7 @@
17
17
  #include "rocksdb/slice.h"
18
18
  #include "util/hash.h"
19
19
 
20
- #ifdef HAVE_AVX2
20
+ #ifdef __AVX2__
21
21
  #include <immintrin.h>
22
22
  #endif
23
23
 
@@ -231,7 +231,7 @@ class FastLocalBloomImpl {
231
231
  static inline bool HashMayMatchPrepared(uint32_t h2, int num_probes,
232
232
  const char *data_at_cache_line) {
233
233
  uint32_t h = h2;
234
- #ifdef HAVE_AVX2
234
+ #ifdef __AVX2__
235
235
  int rem_probes = num_probes;
236
236
 
237
237
  // NOTE: For better performance for num_probes in {1, 2, 9, 10, 17, 18,
@@ -20,7 +20,7 @@
20
20
  #endif // ROCKSDB_MALLOC_USABLE_SIZE
21
21
  #include <string>
22
22
 
23
- #include "memory/memory_allocator.h"
23
+ #include "memory/memory_allocator_impl.h"
24
24
  #include "rocksdb/options.h"
25
25
  #include "rocksdb/table.h"
26
26
  #include "table/block_based/block_type.h"
@@ -15,10 +15,6 @@
15
15
 
16
16
  #include <array>
17
17
  #include <utility>
18
- #ifdef HAVE_SSE42
19
- #include <nmmintrin.h>
20
- #include <wmmintrin.h>
21
- #endif
22
18
 
23
19
  #include "port/lang.h"
24
20
  #include "util/coding.h"
@@ -50,6 +46,13 @@
50
46
 
51
47
  #endif
52
48
 
49
+ ASSERT_FEATURE_COMPAT_HEADER();
50
+
51
+ #ifdef __SSE4_2__
52
+ #include <nmmintrin.h>
53
+ #include <wmmintrin.h>
54
+ #endif
55
+
53
56
  #if defined(HAVE_ARM64_CRC)
54
57
  bool pmull_runtime_flag = false;
55
58
  #endif
@@ -107,6 +110,7 @@ static const uint32_t table0_[256] = {
107
110
  0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69,
108
111
  0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
109
112
  0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351};
113
+ #ifndef __SSE4_2__
110
114
  static const uint32_t table1_[256] = {
111
115
  0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899, 0x4e8a61dc, 0x5d28f9ab,
112
116
  0x69cf5132, 0x7a6dc945, 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21,
@@ -244,14 +248,10 @@ static const uint32_t table3_[256] = {
244
248
  static inline uint32_t LE_LOAD32(const uint8_t* p) {
245
249
  return DecodeFixed32(reinterpret_cast<const char*>(p));
246
250
  }
251
+ #endif // !__SSE4_2__
247
252
 
248
- #if defined(HAVE_SSE42) && (defined(__LP64__) || defined(_WIN64))
249
- static inline uint64_t LE_LOAD64(const uint8_t* p) {
250
- return DecodeFixed64(reinterpret_cast<const char*>(p));
251
- }
252
- #endif
253
-
254
- static inline void Slow_CRC32(uint64_t* l, uint8_t const** p) {
253
+ static inline void DefaultCRC32(uint64_t* l, uint8_t const** p) {
254
+ #ifndef __SSE4_2__
255
255
  uint32_t c = static_cast<uint32_t>(*l ^ LE_LOAD32(*p));
256
256
  *p += 4;
257
257
  *l = table3_[c & 0xff] ^ table2_[(c >> 8) & 0xff] ^
@@ -261,16 +261,8 @@ static inline void Slow_CRC32(uint64_t* l, uint8_t const** p) {
261
261
  *p += 4;
262
262
  *l = table3_[c & 0xff] ^ table2_[(c >> 8) & 0xff] ^
263
263
  table1_[(c >> 16) & 0xff] ^ table0_[c >> 24];
264
- }
265
-
266
- #if (!(defined(HAVE_POWER8) && defined(HAS_ALTIVEC))) && \
267
- (!defined(HAVE_ARM64_CRC)) || \
268
- defined(NO_THREEWAY_CRC32C)
269
- static inline void Fast_CRC32(uint64_t* l, uint8_t const** p) {
270
- #ifndef HAVE_SSE42
271
- Slow_CRC32(l, p);
272
264
  #elif defined(__LP64__) || defined(_WIN64)
273
- *l = _mm_crc32_u64(*l, LE_LOAD64(*p));
265
+ *l = _mm_crc32_u64(*l, DecodeFixed64(reinterpret_cast<const char*>(*p)));
274
266
  *p += 8;
275
267
  #else
276
268
  *l = _mm_crc32_u32(static_cast<unsigned int>(*l), LE_LOAD32(*p));
@@ -279,7 +271,6 @@ static inline void Fast_CRC32(uint64_t* l, uint8_t const** p) {
279
271
  *p += 4;
280
272
  #endif
281
273
  }
282
- #endif
283
274
 
284
275
  template <void (*CRC32)(uint64_t*, uint8_t const**)>
285
276
  uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size) {
@@ -324,48 +315,6 @@ uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size) {
324
315
  return static_cast<uint32_t>(l ^ 0xffffffffu);
325
316
  }
326
317
 
327
- // Detect if ARM64 CRC or not.
328
- #ifndef HAVE_ARM64_CRC
329
- // Detect if SS42 or not.
330
- #ifndef HAVE_POWER8
331
-
332
- static bool isSSE42() {
333
- #ifndef HAVE_SSE42
334
- return false;
335
- #elif defined(__GNUC__) && defined(__x86_64__) && !defined(IOS_CROSS_COMPILE)
336
- uint32_t c_;
337
- __asm__("cpuid" : "=c"(c_) : "a"(1) : "ebx", "edx");
338
- return c_ & (1U << 20); // copied from CpuId.h in Folly. Test SSE42
339
- #elif defined(_WIN64)
340
- int info[4];
341
- __cpuidex(info, 0x00000001, 0);
342
- return (info[2] & ((int)1 << 20)) != 0;
343
- #else
344
- return false;
345
- #endif
346
- }
347
-
348
- static bool isPCLMULQDQ() {
349
- #ifndef HAVE_SSE42
350
- // in build_detect_platform we set this macro when both SSE42 and PCLMULQDQ
351
- // are supported by compiler
352
- return false;
353
- #elif defined(__GNUC__) && defined(__x86_64__) && !defined(IOS_CROSS_COMPILE)
354
- uint32_t c_;
355
- __asm__("cpuid" : "=c"(c_) : "a"(1) : "ebx", "edx");
356
- return c_ & (1U << 1); // PCLMULQDQ is in bit 1 (not bit 0)
357
- #elif defined(_WIN64)
358
- int info[4];
359
- __cpuidex(info, 0x00000001, 0);
360
- return (info[2] & ((int)1 << 1)) != 0;
361
- #else
362
- return false;
363
- #endif
364
- }
365
-
366
- #endif // HAVE_POWER8
367
- #endif // HAVE_ARM64_CRC
368
-
369
318
  using Function = uint32_t (*)(uint32_t, const char*, size_t);
370
319
 
371
320
  #if defined(HAVE_POWER8) && defined(HAS_ALTIVEC)
@@ -436,7 +385,9 @@ std::string IsFastCrc32Supported() {
436
385
  arch = "Arm64";
437
386
  }
438
387
  #else
439
- has_fast_crc = isSSE42();
388
+ #ifdef __SSE4_2__
389
+ has_fast_crc = true;
390
+ #endif // __SSE4_2__
440
391
  arch = "x86";
441
392
  #endif
442
393
  if (has_fast_crc) {
@@ -477,7 +428,7 @@ std::string IsFastCrc32Supported() {
477
428
  * <davejwatson@fb.com>
478
429
  *
479
430
  */
480
- #if defined HAVE_SSE42 && defined HAVE_PCLMUL
431
+ #if defined(__SSE4_2__) && defined(__PCLMUL__)
481
432
 
482
433
  #define CRCtriplet(crc, buf, offset) \
483
434
  crc##0 = _mm_crc32_u64(crc##0, *(buf##0 + offset)); \
@@ -1152,34 +1103,24 @@ uint32_t crc32c_3way(uint32_t crc, const char* buf, size_t len) {
1152
1103
  }
1153
1104
  }
1154
1105
 
1155
- #endif //HAVE_SSE42 && HAVE_PCLMUL
1106
+ #endif //__SSE4_2__ && __PCLMUL__
1156
1107
 
1157
1108
  static inline Function Choose_Extend() {
1158
1109
  #ifdef HAVE_POWER8
1159
- return isAltiVec() ? ExtendPPCImpl : ExtendImpl<Slow_CRC32>;
1110
+ return isAltiVec() ? ExtendPPCImpl : ExtendImpl<DefaultCRC32>;
1160
1111
  #elif defined(HAVE_ARM64_CRC)
1161
1112
  if(crc32c_runtime_check()) {
1162
1113
  pmull_runtime_flag = crc32c_pmull_runtime_check();
1163
1114
  return ExtendARMImpl;
1164
1115
  } else {
1165
- return ExtendImpl<Slow_CRC32>;
1116
+ return ExtendImpl<DefaultCRC32>;
1166
1117
  }
1118
+ #elif defined(__SSE4_2__) && defined(__PCLMUL__) && !defined NO_THREEWAY_CRC32C
1119
+ // NOTE: runtime detection no longer supported on x86
1120
+ (void)ExtendImpl<DefaultCRC32>; // suppress unused warning
1121
+ return crc32c_3way;
1167
1122
  #else
1168
- if (isSSE42()) {
1169
- if (isPCLMULQDQ()) {
1170
- #if (defined HAVE_SSE42 && defined HAVE_PCLMUL) && !defined NO_THREEWAY_CRC32C
1171
- return crc32c_3way;
1172
- #else
1173
- return ExtendImpl<Fast_CRC32>; // Fast_CRC32 will check HAVE_SSE42 itself
1174
- #endif
1175
- }
1176
- else { // no runtime PCLMULQDQ support but has SSE42 support
1177
- return ExtendImpl<Fast_CRC32>;
1178
- }
1179
- } // end of isSSE42()
1180
- else {
1181
- return ExtendImpl<Slow_CRC32>;
1182
- }
1123
+ return ExtendImpl<DefaultCRC32>;
1183
1124
  #endif
1184
1125
  }
1185
1126
 
@@ -23,10 +23,10 @@
23
23
  #include <sys/sysctl.h>
24
24
  #endif
25
25
  #if defined(__OpenBSD__)
26
- #include <sys/types.h>
27
- #include <sys/sysctl.h>
28
- #include <machine/cpu.h>
29
26
  #include <machine/armreg.h>
27
+ #include <machine/cpu.h>
28
+ #include <sys/sysctl.h>
29
+ #include <sys/types.h>
30
30
  #endif
31
31
 
32
32
  #ifdef HAVE_ARM64_CRYPTO
@@ -67,13 +67,12 @@ uint32_t crc32c_runtime_check(void) {
67
67
  return r == 1;
68
68
  #elif defined(__OpenBSD__)
69
69
  int r = 0;
70
- const int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
70
+ const int isar0_mib[] = {CTL_MACHDEP, CPU_ID_AA64ISAR0};
71
71
  uint64_t isar0;
72
72
  size_t len = sizeof(isar0);
73
73
 
74
74
  if (sysctl(isar0_mib, 2, &isar0, &len, NULL, 0) != -1) {
75
- if (ID_AA64ISAR0_CRC32(isar0) >= ID_AA64ISAR0_CRC32_BASE)
76
- r = 1;
75
+ if (ID_AA64ISAR0_CRC32(isar0) >= ID_AA64ISAR0_CRC32_BASE) r = 1;
77
76
  }
78
77
  return r;
79
78
  #else
@@ -94,13 +93,12 @@ bool crc32c_pmull_runtime_check(void) {
94
93
  return true;
95
94
  #elif defined(__OpenBSD__)
96
95
  bool r = false;
97
- const int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
96
+ const int isar0_mib[] = {CTL_MACHDEP, CPU_ID_AA64ISAR0};
98
97
  uint64_t isar0;
99
98
  size_t len = sizeof(isar0);
100
99
 
101
100
  if (sysctl(isar0_mib, 2, &isar0, &len, NULL, 0) != -1) {
102
- if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_PMULL)
103
- r = true;
101
+ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_PMULL) r = true;
104
102
  }
105
103
  return r;
106
104
  #else
@@ -98,6 +98,8 @@ Status GetFileChecksumsFromManifest(Env* src_env, const std::string& abs_path,
98
98
  return Status::InvalidArgument("checksum_list is nullptr");
99
99
  }
100
100
  assert(checksum_list);
101
+ // TODO: plumb Env::IOActivity
102
+ const ReadOptions read_options;
101
103
  checksum_list->reset();
102
104
  Status s;
103
105
 
@@ -125,7 +127,8 @@ Status GetFileChecksumsFromManifest(Env* src_env, const std::string& abs_path,
125
127
  reporter.status_ptr = &s;
126
128
  log::Reader reader(nullptr, std::move(file_reader), &reporter,
127
129
  true /* checksum */, 0 /* log_number */);
128
- FileChecksumRetriever retriever(manifest_file_size, *checksum_list);
130
+ FileChecksumRetriever retriever(read_options, manifest_file_size,
131
+ *checksum_list);
129
132
  retriever.Iterate(reader, &s);
130
133
  assert(!retriever.status().ok() ||
131
134
  manifest_file_size == std::numeric_limits<uint64_t>::max() ||
@@ -728,7 +728,7 @@ double FilterBench::RandomQueryTest(uint32_t inside_threshold, bool dry_run,
728
728
  batch_slices[i],
729
729
  /*no_io=*/false, /*const_ikey_ptr=*/nullptr,
730
730
  /*get_context=*/nullptr,
731
- /*lookup_context=*/nullptr, Env::IO_TOTAL);
731
+ /*lookup_context=*/nullptr, ROCKSDB_NAMESPACE::ReadOptions());
732
732
  }
733
733
  } else {
734
734
  if (dry_run) {
@@ -15,16 +15,15 @@
15
15
  #endif
16
16
 
17
17
  #ifndef DEFINE_uint32
18
- // DEFINE_uint32 does not appear in older versions of gflags. This should be
19
- // a sane definition for those versions.
18
+ // DEFINE_uint32 / DECLARE_uint32 do not appear in older versions of gflags.
19
+ // These should be sane definitions for those versions.
20
20
  #include <cstdint>
21
- #define DEFINE_uint32(name, val, txt) \
22
- namespace gflags_compat { \
23
- DEFINE_int32(name, val, txt); \
24
- } \
25
- std::reference_wrapper<uint32_t> FLAGS_##name = \
26
- std::ref(*reinterpret_cast<uint32_t *>(&gflags_compat::FLAGS_##name));
21
+ #define DEFINE_uint32(name, val, txt) \
22
+ namespace gflags_compat { \
23
+ DEFINE_int32(name, val, txt); \
24
+ } \
25
+ uint32_t &FLAGS_##name = \
26
+ *reinterpret_cast<uint32_t *>(&gflags_compat::FLAGS_##name);
27
27
 
28
- #define DECLARE_uint32(name) \
29
- extern std::reference_wrapper<uint32_t> FLAGS_##name;
28
+ #define DECLARE_uint32(name) extern uint32_t &FLAGS_##name;
30
29
  #endif // !DEFINE_uint32
@@ -13,8 +13,11 @@
13
13
  #include <cstdint>
14
14
  #include <type_traits>
15
15
 
16
+ #include "port/lang.h"
16
17
  #include "rocksdb/rocksdb_namespace.h"
17
18
 
19
+ ASSERT_FEATURE_COMPAT_HEADER();
20
+
18
21
  namespace ROCKSDB_NAMESPACE {
19
22
 
20
23
  // Fast implementation of floor(log2(v)). Undefined for 0 or negative
@@ -145,27 +148,29 @@ inline int BitsSetToOne(T v) {
145
148
  constexpr auto mm = 8 * sizeof(uint32_t) - 1;
146
149
  // The bit mask is to neutralize sign extension on small signed types
147
150
  constexpr uint32_t m = (uint32_t{1} << ((8 * sizeof(T)) & mm)) - 1;
148
- #if defined(HAVE_SSE42) && (defined(_M_X64) || defined(_M_IX86))
151
+ #if __POPCNT__
149
152
  return static_cast<int>(__popcnt(static_cast<uint32_t>(v) & m));
150
153
  #else
151
154
  return static_cast<int>(detail::BitsSetToOneFallback(v) & m);
152
- #endif
155
+ #endif // __POPCNT__
153
156
  } else if (sizeof(T) == sizeof(uint32_t)) {
154
- #if defined(HAVE_SSE42) && (defined(_M_X64) || defined(_M_IX86))
157
+ #if __POPCNT__
155
158
  return static_cast<int>(__popcnt(static_cast<uint32_t>(v)));
156
159
  #else
157
160
  return detail::BitsSetToOneFallback(static_cast<uint32_t>(v));
158
- #endif
161
+ #endif // __POPCNT__
159
162
  } else {
160
- #if defined(HAVE_SSE42) && defined(_M_X64)
163
+ #if __POPCNT__
164
+ #ifdef _M_X64
161
165
  return static_cast<int>(__popcnt64(static_cast<uint64_t>(v)));
162
- #elif defined(HAVE_SSE42) && defined(_M_IX86)
166
+ #else
163
167
  return static_cast<int>(
164
168
  __popcnt(static_cast<uint32_t>(static_cast<uint64_t>(v) >> 32) +
165
169
  __popcnt(static_cast<uint32_t>(v))));
170
+ #endif // _M_X64
166
171
  #else
167
172
  return detail::BitsSetToOneFallback(static_cast<uint64_t>(v));
168
- #endif
173
+ #endif // __POPCNT__
169
174
  }
170
175
  #else
171
176
  static_assert(sizeof(T) <= sizeof(unsigned long long), "type too big");
@@ -7,15 +7,14 @@
7
7
  // Use of this source code is governed by a BSD-style license that can be
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
- #include "util/rate_limiter.h"
11
-
12
10
  #include <algorithm>
13
11
 
14
- #include "monitoring/statistics.h"
12
+ #include "monitoring/statistics_impl.h"
15
13
  #include "port/port.h"
16
14
  #include "rocksdb/system_clock.h"
17
15
  #include "test_util/sync_point.h"
18
16
  #include "util/aligned_buffer.h"
17
+ #include "util/rate_limiter_impl.h"
19
18
 
20
19
  namespace ROCKSDB_NAMESPACE {
21
20
  size_t RateLimiter::RequestToken(size_t bytes, size_t alignment,
@@ -38,11 +37,10 @@ size_t RateLimiter::RequestToken(size_t bytes, size_t alignment,
38
37
  // Pending request
39
38
  struct GenericRateLimiter::Req {
40
39
  explicit Req(int64_t _bytes, port::Mutex* _mu)
41
- : request_bytes(_bytes), bytes(_bytes), cv(_mu), granted(false) {}
40
+ : request_bytes(_bytes), bytes(_bytes), cv(_mu) {}
42
41
  int64_t request_bytes;
43
42
  int64_t bytes;
44
43
  port::CondVar cv;
45
- bool granted;
46
44
  };
47
45
 
48
46
  GenericRateLimiter::GenericRateLimiter(
@@ -137,12 +135,14 @@ void GenericRateLimiter::Request(int64_t bytes, const Env::IOPriority pri,
137
135
 
138
136
  ++total_requests_[pri];
139
137
 
140
- if (available_bytes_ >= bytes) {
141
- // Refill thread assigns quota and notifies requests waiting on
142
- // the queue under mutex. So if we get here, that means nobody
143
- // is waiting?
144
- available_bytes_ -= bytes;
145
- total_bytes_through_[pri] += bytes;
138
+ if (available_bytes_ > 0) {
139
+ int64_t bytes_through = std::min(available_bytes_, bytes);
140
+ total_bytes_through_[pri] += bytes_through;
141
+ available_bytes_ -= bytes_through;
142
+ bytes -= bytes_through;
143
+ }
144
+
145
+ if (bytes == 0) {
146
146
  return;
147
147
  }
148
148
 
@@ -179,7 +179,7 @@ void GenericRateLimiter::Request(int64_t bytes, const Env::IOPriority pri,
179
179
  // Whichever thread reaches here first performs duty (2) as described
180
180
  // above.
181
181
  RefillBytesAndGrantRequestsLocked();
182
- if (r.granted) {
182
+ if (r.request_bytes == 0) {
183
183
  // If there is any remaining requests, make sure there exists at least
184
184
  // one candidate is awake for future duties by signaling a front request
185
185
  // of a queue.
@@ -202,13 +202,13 @@ void GenericRateLimiter::Request(int64_t bytes, const Env::IOPriority pri,
202
202
  ++num_found;
203
203
  }
204
204
  }
205
- if (r.granted) {
205
+ if (r.request_bytes == 0) {
206
206
  assert(num_found == 0);
207
207
  } else {
208
208
  assert(num_found == 1);
209
209
  }
210
210
  #endif // NDEBUG
211
- } while (!stop_ && !r.granted);
211
+ } while (!stop_ && r.request_bytes > 0);
212
212
 
213
213
  if (stop_) {
214
214
  // It is now in the clean-up of ~GenericRateLimiter().
@@ -265,9 +265,8 @@ void GenericRateLimiter::RefillBytesAndGrantRequestsLocked() {
265
265
  // Carry over the left over quota from the last period
266
266
  auto refill_bytes_per_period =
267
267
  refill_bytes_per_period_.load(std::memory_order_relaxed);
268
- if (available_bytes_ < refill_bytes_per_period) {
269
- available_bytes_ += refill_bytes_per_period;
270
- }
268
+ assert(available_bytes_ == 0);
269
+ available_bytes_ = refill_bytes_per_period;
271
270
 
272
271
  std::vector<Env::IOPriority> pri_iteration_order =
273
272
  GeneratePriorityIterationOrderLocked();
@@ -292,7 +291,6 @@ void GenericRateLimiter::RefillBytesAndGrantRequestsLocked() {
292
291
  total_bytes_through_[current_pri] += next_req->bytes;
293
292
  queue->pop_front();
294
293
 
295
- next_req->granted = true;
296
294
  // Quota granted, signal the thread to exit
297
295
  next_req->cv.Signal();
298
296
  }