@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
@@ -547,7 +547,7 @@ if(HAVE_SCHED_GETCPU)
547
547
  add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
548
548
  endif()
549
549
 
550
- check_cxx_symbol_exists(getauxval auvx.h HAVE_AUXV_GETAUXVAL)
550
+ check_cxx_symbol_exists(getauxval "sys/auxv.h" HAVE_AUXV_GETAUXVAL)
551
551
  if(HAVE_AUXV_GETAUXVAL)
552
552
  add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT)
553
553
  endif()
@@ -865,6 +865,8 @@ set(SOURCES
865
865
  util/string_util.cc
866
866
  util/thread_local.cc
867
867
  util/threadpool_imp.cc
868
+ util/udt_util.cc
869
+ util/write_batch_util.cc
868
870
  util/xxhash.cc
869
871
  utilities/agg_merge/agg_merge.cc
870
872
  utilities/backup/backup_engine.cc
@@ -1421,6 +1423,7 @@ if(WITH_TESTS)
1421
1423
  util/timer_test.cc
1422
1424
  util/thread_list_test.cc
1423
1425
  util/thread_local_test.cc
1426
+ util/udt_util_test.cc
1424
1427
  util/work_queue_test.cc
1425
1428
  utilities/agg_merge/agg_merge_test.cc
1426
1429
  utilities/backup/backup_engine_test.cc
@@ -1589,3 +1592,6 @@ option(WITH_BENCHMARK "build benchmark tests" OFF)
1589
1592
  if(WITH_BENCHMARK)
1590
1593
  add_subdirectory(${PROJECT_SOURCE_DIR}/microbench/)
1591
1594
  endif()
1595
+
1596
+ target_include_directories(${PROJECT_NAME} PUBLIC
1597
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>)
@@ -88,6 +88,25 @@ endif
88
88
 
89
89
  $(info $$DEBUG_LEVEL is $(DEBUG_LEVEL), $$LIB_MODE is $(LIB_MODE))
90
90
 
91
+ # Detect what platform we're building on.
92
+ # Export some common variables that might have been passed as Make variables
93
+ # instead of environment variables.
94
+ dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; \
95
+ export CXXFLAGS="$(EXTRA_CXXFLAGS)"; \
96
+ export LDFLAGS="$(EXTRA_LDFLAGS)"; \
97
+ export COMPILE_WITH_ASAN="$(COMPILE_WITH_ASAN)"; \
98
+ export COMPILE_WITH_TSAN="$(COMPILE_WITH_TSAN)"; \
99
+ export COMPILE_WITH_UBSAN="$(COMPILE_WITH_UBSAN)"; \
100
+ export PORTABLE="$(PORTABLE)"; \
101
+ export ROCKSDB_NO_FBCODE="$(ROCKSDB_NO_FBCODE)"; \
102
+ export USE_CLANG="$(USE_CLANG)"; \
103
+ export LIB_MODE="$(LIB_MODE)"; \
104
+ export ROCKSDB_CXX_STANDARD="$(ROCKSDB_CXX_STANDARD)"; \
105
+ export USE_FOLLY="$(USE_FOLLY)"; \
106
+ "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
107
+ # this file is generated by the previous line to set build flags and sources
108
+ include make_config.mk
109
+
91
110
  # Figure out optimize level.
92
111
  ifneq ($(DEBUG_LEVEL), 2)
93
112
  OPTIMIZE_LEVEL ?= -O2
@@ -223,25 +242,6 @@ am__v_AR_1 =
223
242
  AM_LINK = $(AM_V_CCLD)$(CXX) -L. $(patsubst lib%.a, -l%, $(patsubst lib%.$(PLATFORM_SHARED_EXT), -l%, $^)) $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
224
243
  AM_SHARE = $(AM_V_CCLD) $(CXX) $(PLATFORM_SHARED_LDFLAGS)$@ -L. $(patsubst lib%.$(PLATFORM_SHARED_EXT), -l%, $^) $(EXEC_LDFLAGS) $(LDFLAGS) -o $@
225
244
 
226
- # Detect what platform we're building on.
227
- # Export some common variables that might have been passed as Make variables
228
- # instead of environment variables.
229
- dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; \
230
- export CXXFLAGS="$(EXTRA_CXXFLAGS)"; \
231
- export LDFLAGS="$(EXTRA_LDFLAGS)"; \
232
- export COMPILE_WITH_ASAN="$(COMPILE_WITH_ASAN)"; \
233
- export COMPILE_WITH_TSAN="$(COMPILE_WITH_TSAN)"; \
234
- export COMPILE_WITH_UBSAN="$(COMPILE_WITH_UBSAN)"; \
235
- export PORTABLE="$(PORTABLE)"; \
236
- export ROCKSDB_NO_FBCODE="$(ROCKSDB_NO_FBCODE)"; \
237
- export USE_CLANG="$(USE_CLANG)"; \
238
- export LIB_MODE="$(LIB_MODE)"; \
239
- export ROCKSDB_CXX_STANDARD="$(ROCKSDB_CXX_STANDARD)"; \
240
- export USE_FOLLY="$(USE_FOLLY)"; \
241
- "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
242
- # this file is generated by the previous line to set build flags and sources
243
- include make_config.mk
244
-
245
245
  ROCKSDB_PLUGIN_MKS = $(foreach plugin, $(ROCKSDB_PLUGINS), plugin/$(plugin)/*.mk)
246
246
  include $(ROCKSDB_PLUGIN_MKS)
247
247
  ROCKSDB_PLUGIN_PROTO =ROCKSDB_NAMESPACE::ObjectLibrary\&, const std::string\&
@@ -1417,6 +1417,9 @@ thread_local_test: $(OBJ_DIR)/util/thread_local_test.o $(TEST_LIBRARY) $(LIBRARY
1417
1417
  work_queue_test: $(OBJ_DIR)/util/work_queue_test.o $(TEST_LIBRARY) $(LIBRARY)
1418
1418
  $(AM_LINK)
1419
1419
 
1420
+ udt_util_test: $(OBJ_DIR)/util/udt_util_test.o $(TEST_LIBRARY) $(LIBRARY)
1421
+ $(AM_LINK)
1422
+
1420
1423
  corruption_test: $(OBJ_DIR)/db/corruption_test.o $(TEST_LIBRARY) $(LIBRARY)
1421
1424
  $(AM_LINK)
1422
1425
 
@@ -264,6 +264,8 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
264
264
  "util/string_util.cc",
265
265
  "util/thread_local.cc",
266
266
  "util/threadpool_imp.cc",
267
+ "util/udt_util.cc",
268
+ "util/write_batch_util.cc",
267
269
  "util/xxhash.cc",
268
270
  "utilities/agg_merge/agg_merge.cc",
269
271
  "utilities/backup/backup_engine.cc",
@@ -5508,6 +5510,12 @@ cpp_unittest_wrapper(name="ttl_test",
5508
5510
  extra_compiler_flags=[])
5509
5511
 
5510
5512
 
5513
+ cpp_unittest_wrapper(name="udt_util_test",
5514
+ srcs=["util/udt_util_test.cc"],
5515
+ deps=[":rocksdb_test_lib"],
5516
+ extra_compiler_flags=[])
5517
+
5518
+
5511
5519
  cpp_unittest_wrapper(name="util_merge_operators_test",
5512
5520
  srcs=["utilities/util_merge_operators_test.cc"],
5513
5521
  deps=[":rocksdb_test_lib"],
@@ -31,6 +31,7 @@
31
31
  #include "util/hash.h"
32
32
  #include "util/mutexlock.h"
33
33
  #include "util/random.h"
34
+ #include "util/stderr_logger.h"
34
35
  #include "util/stop_watch.h"
35
36
  #include "util/string_util.h"
36
37
 
@@ -49,8 +50,11 @@ DEFINE_double(resident_ratio, 0.25,
49
50
  "Ratio of keys fitting in cache to keyspace.");
50
51
  DEFINE_uint64(ops_per_thread, 2000000U, "Number of operations per thread.");
51
52
  DEFINE_uint32(value_bytes, 8 * KiB, "Size of each value added.");
53
+ DEFINE_uint32(value_bytes_estimate, 0,
54
+ "If > 0, overrides estimated_entry_charge or "
55
+ "min_avg_entry_charge depending on cache_type.");
52
56
 
53
- DEFINE_uint32(skew, 5, "Degree of skew in key selection");
57
+ DEFINE_uint32(skew, 5, "Degree of skew in key selection. 0 = no skew");
54
58
  DEFINE_bool(populate_cache, true, "Populate cache before operations");
55
59
 
56
60
  DEFINE_uint32(lookup_insert_percent, 87,
@@ -71,12 +75,22 @@ DEFINE_uint32(
71
75
 
72
76
  DEFINE_uint32(gather_stats_entries_per_lock, 256,
73
77
  "For Cache::ApplyToAllEntries");
74
- DEFINE_bool(skewed, false, "If true, skew the key access distribution");
75
78
 
76
79
  DEFINE_bool(lean, false,
77
80
  "If true, no additional computation is performed besides cache "
78
81
  "operations.");
79
82
 
83
+ DEFINE_bool(early_exit, false,
84
+ "Exit before deallocating most memory. Good for malloc stats, e.g."
85
+ "MALLOC_CONF=\"stats_print:true\"");
86
+
87
+ DEFINE_bool(histograms, true,
88
+ "Whether to track and print histogram statistics.");
89
+
90
+ DEFINE_bool(report_problems, true, "Whether to ReportProblems() at the end.");
91
+
92
+ DEFINE_uint32(seed, 0, "Hashing/random seed to use. 0 = choose at random");
93
+
80
94
  DEFINE_string(secondary_cache_uri, "",
81
95
  "Full URI for creating a custom secondary cache object");
82
96
  static class std::shared_ptr<ROCKSDB_NAMESPACE::SecondaryCache> secondary_cache;
@@ -145,9 +159,6 @@ class SharedState {
145
159
  public:
146
160
  explicit SharedState(CacheBench* cache_bench)
147
161
  : cv_(&mu_),
148
- num_initialized_(0),
149
- start_(false),
150
- num_done_(0),
151
162
  cache_bench_(cache_bench) {}
152
163
 
153
164
  ~SharedState() {}
@@ -170,15 +181,27 @@ class SharedState {
170
181
 
171
182
  bool Started() const { return start_; }
172
183
 
184
+ void AddLookupStats(uint64_t hits, uint64_t misses) {
185
+ MutexLock l(&mu_);
186
+ lookup_count_ += hits + misses;
187
+ lookup_hits_ += hits;
188
+ }
189
+
190
+ double GetLookupHitRatio() const {
191
+ return 1.0 * lookup_hits_ / lookup_count_;
192
+ }
193
+
173
194
  private:
174
195
  port::Mutex mu_;
175
196
  port::CondVar cv_;
176
197
 
177
- uint64_t num_initialized_;
178
- bool start_;
179
- uint64_t num_done_;
180
-
181
198
  CacheBench* cache_bench_;
199
+
200
+ uint64_t num_initialized_ = 0;
201
+ bool start_ = false;
202
+ uint64_t num_done_ = 0;
203
+ uint64_t lookup_count_ = 0;
204
+ uint64_t lookup_hits_ = 0;
182
205
  };
183
206
 
184
207
  // Per-thread state for concurrent executions of the same benchmark.
@@ -190,27 +213,19 @@ struct ThreadState {
190
213
  uint64_t duration_us = 0;
191
214
 
192
215
  ThreadState(uint32_t index, SharedState* _shared)
193
- : tid(index), rnd(1000 + index), shared(_shared) {}
216
+ : tid(index), rnd(FLAGS_seed + 1 + index), shared(_shared) {}
194
217
  };
195
218
 
196
219
  struct KeyGen {
197
220
  char key_data[27];
198
221
 
199
- Slice GetRand(Random64& rnd, uint64_t max_key, int max_log) {
200
- uint64_t key = 0;
201
- if (!FLAGS_skewed) {
202
- uint64_t raw = rnd.Next();
203
- // Skew according to setting
204
- for (uint32_t i = 0; i < FLAGS_skew; ++i) {
205
- raw = std::min(raw, rnd.Next());
206
- }
207
- key = FastRange64(raw, max_key);
208
- } else {
209
- key = rnd.Skewed(max_log);
210
- if (key > max_key) {
211
- key -= max_key;
212
- }
222
+ Slice GetRand(Random64& rnd, uint64_t max_key, uint32_t skew) {
223
+ uint64_t raw = rnd.Next();
224
+ // Skew according to setting
225
+ for (uint32_t i = 0; i < skew; ++i) {
226
+ raw = std::min(raw, rnd.Next());
213
227
  }
228
+ uint64_t key = FastRange64(raw, max_key);
214
229
  // Variable size and alignment
215
230
  size_t off = key % 8;
216
231
  key_data[0] = char{42};
@@ -281,31 +296,38 @@ class CacheBench {
281
296
  lookup_threshold_(insert_threshold_ +
282
297
  kHundredthUint64 * FLAGS_lookup_percent),
283
298
  erase_threshold_(lookup_threshold_ +
284
- kHundredthUint64 * FLAGS_erase_percent),
285
- skewed_(FLAGS_skewed) {
299
+ kHundredthUint64 * FLAGS_erase_percent) {
286
300
  if (erase_threshold_ != 100U * kHundredthUint64) {
287
301
  fprintf(stderr, "Percentages must add to 100.\n");
288
302
  exit(1);
289
303
  }
290
304
 
291
- max_log_ = 0;
292
- if (skewed_) {
293
- uint64_t max_key = max_key_;
294
- while (max_key >>= 1) max_log_++;
295
- if (max_key > (static_cast<uint64_t>(1) << max_log_)) max_log_++;
296
- }
297
-
298
305
  if (FLAGS_cache_type == "clock_cache") {
299
306
  fprintf(stderr, "Old clock cache implementation has been removed.\n");
300
307
  exit(1);
301
- } else if (FLAGS_cache_type == "hyper_clock_cache") {
302
- cache_ = HyperClockCacheOptions(FLAGS_cache_size, FLAGS_value_bytes,
303
- FLAGS_num_shard_bits)
304
- .MakeSharedCache();
308
+ } else if (EndsWith(FLAGS_cache_type, "hyper_clock_cache")) {
309
+ HyperClockCacheOptions opts(
310
+ FLAGS_cache_size, /*estimated_entry_charge=*/0, FLAGS_num_shard_bits);
311
+ opts.hash_seed = BitwiseAnd(FLAGS_seed, INT32_MAX);
312
+ if (FLAGS_cache_type == "fixed_hyper_clock_cache" ||
313
+ FLAGS_cache_type == "hyper_clock_cache") {
314
+ opts.estimated_entry_charge = FLAGS_value_bytes_estimate > 0
315
+ ? FLAGS_value_bytes_estimate
316
+ : FLAGS_value_bytes;
317
+ } else if (FLAGS_cache_type == "auto_hyper_clock_cache") {
318
+ if (FLAGS_value_bytes_estimate > 0) {
319
+ opts.min_avg_entry_charge = FLAGS_value_bytes_estimate;
320
+ }
321
+ } else {
322
+ fprintf(stderr, "Cache type not supported.");
323
+ exit(1);
324
+ }
325
+ cache_ = opts.MakeSharedCache();
305
326
  } else if (FLAGS_cache_type == "lru_cache") {
306
327
  LRUCacheOptions opts(FLAGS_cache_size, FLAGS_num_shard_bits,
307
328
  false /* strict_capacity_limit */,
308
329
  0.5 /* high_pri_pool_ratio */);
330
+ opts.hash_seed = BitwiseAnd(FLAGS_seed, INT32_MAX);
309
331
  if (!FLAGS_secondary_cache_uri.empty()) {
310
332
  Status s = SecondaryCache::CreateFromString(
311
333
  ConfigOptions(), FLAGS_secondary_cache_uri, &secondary_cache);
@@ -329,13 +351,50 @@ class CacheBench {
329
351
  ~CacheBench() {}
330
352
 
331
353
  void PopulateCache() {
332
- Random64 rnd(1);
354
+ Random64 rnd(FLAGS_seed);
333
355
  KeyGen keygen;
334
- for (uint64_t i = 0; i < 2 * FLAGS_cache_size; i += FLAGS_value_bytes) {
335
- Status s = cache_->Insert(keygen.GetRand(rnd, max_key_, max_log_),
336
- createValue(rnd), &helper1, FLAGS_value_bytes);
356
+ size_t max_occ = 0;
357
+ size_t inserts_since_max_occ_increase = 0;
358
+ size_t keys_since_last_not_found = 0;
359
+
360
+ // Avoid redundant insertions by checking Lookup before Insert.
361
+ // Loop until insertions consistently fail to increase max occupancy or
362
+ // it becomes difficult to find keys not already inserted.
363
+ while (inserts_since_max_occ_increase < 100 &&
364
+ keys_since_last_not_found < 100) {
365
+ Slice key = keygen.GetRand(rnd, max_key_, FLAGS_skew);
366
+
367
+ Cache::Handle* handle = cache_->Lookup(key);
368
+ if (handle != nullptr) {
369
+ cache_->Release(handle);
370
+ ++keys_since_last_not_found;
371
+ continue;
372
+ }
373
+ keys_since_last_not_found = 0;
374
+
375
+ Status s =
376
+ cache_->Insert(key, createValue(rnd), &helper1, FLAGS_value_bytes);
337
377
  assert(s.ok());
378
+
379
+ handle = cache_->Lookup(key);
380
+ if (!handle) {
381
+ fprintf(stderr, "Failed to lookup key just inserted.\n");
382
+ assert(false);
383
+ exit(42);
384
+ } else {
385
+ cache_->Release(handle);
386
+ }
387
+
388
+ size_t occ = cache_->GetOccupancyCount();
389
+ if (occ > max_occ) {
390
+ max_occ = occ;
391
+ inserts_since_max_occ_increase = 0;
392
+ } else {
393
+ ++inserts_since_max_occ_increase;
394
+ }
338
395
  }
396
+ printf("Population complete (%zu entries, %g average charge)\n", max_occ,
397
+ 1.0 * FLAGS_cache_size / max_occ);
339
398
  }
340
399
 
341
400
  bool Run() {
@@ -394,19 +453,33 @@ class CacheBench {
394
453
  FLAGS_ops_per_thread / elapsed_secs);
395
454
  printf("Thread ops/sec = %u\n", ops_per_sec);
396
455
 
397
- printf("\nOperation latency (ns):\n");
398
- HistogramImpl combined;
399
- for (uint32_t i = 0; i < FLAGS_threads; i++) {
400
- combined.Merge(threads[i]->latency_ns_hist);
401
- }
402
- printf("%s", combined.ToString().c_str());
456
+ printf("Lookup hit ratio: %g\n", shared.GetLookupHitRatio());
403
457
 
404
- if (FLAGS_gather_stats) {
405
- printf("\nGather stats latency (us):\n");
406
- printf("%s", stats_hist.ToString().c_str());
458
+ size_t occ = cache_->GetOccupancyCount();
459
+ size_t slot = cache_->GetTableAddressCount();
460
+ printf("Final load factor: %g (%zu / %zu)\n", 1.0 * occ / slot, occ, slot);
461
+
462
+ if (FLAGS_histograms) {
463
+ printf("\nOperation latency (ns):\n");
464
+ HistogramImpl combined;
465
+ for (uint32_t i = 0; i < FLAGS_threads; i++) {
466
+ combined.Merge(threads[i]->latency_ns_hist);
467
+ }
468
+ printf("%s", combined.ToString().c_str());
469
+
470
+ if (FLAGS_gather_stats) {
471
+ printf("\nGather stats latency (us):\n");
472
+ printf("%s", stats_hist.ToString().c_str());
473
+ }
407
474
  }
408
475
 
409
- printf("\n%s", stats_report.c_str());
476
+ if (FLAGS_report_problems) {
477
+ printf("\n");
478
+ std::shared_ptr<Logger> logger =
479
+ std::make_shared<StderrLogger>(InfoLogLevel::DEBUG_LEVEL);
480
+ cache_->ReportProblems(logger);
481
+ }
482
+ printf("%s", stats_report.c_str());
410
483
 
411
484
  return true;
412
485
  }
@@ -419,8 +492,6 @@ class CacheBench {
419
492
  const uint64_t insert_threshold_;
420
493
  const uint64_t lookup_threshold_;
421
494
  const uint64_t erase_threshold_;
422
- const bool skewed_;
423
- int max_log_;
424
495
 
425
496
  // A benchmark version of gathering stats on an active block cache by
426
497
  // iterating over it. The primary purpose is to measure the impact of
@@ -453,7 +524,7 @@ class CacheBench {
453
524
  for (;;) {
454
525
  if (shared->AllDone()) {
455
526
  std::ostringstream ostr;
456
- ostr << "Most recent cache entry stats:\n"
527
+ ostr << "\nMost recent cache entry stats:\n"
457
528
  << "Number of entries: " << total_entry_count << "\n"
458
529
  << "Table occupancy: " << table_occupancy << " / "
459
530
  << table_size << " = "
@@ -490,13 +561,17 @@ class CacheBench {
490
561
  // Something slightly more expensive as in stats by category
491
562
  helpers.insert(helper);
492
563
  };
493
- timer.Start();
564
+ if (FLAGS_histograms) {
565
+ timer.Start();
566
+ }
494
567
  Cache::ApplyToAllEntriesOptions opts;
495
568
  opts.average_entries_per_lock = FLAGS_gather_stats_entries_per_lock;
496
569
  shared->GetCacheBench()->cache_->ApplyToAllEntries(fn, opts);
497
570
  table_occupancy = shared->GetCacheBench()->cache_->GetOccupancyCount();
498
571
  table_size = shared->GetCacheBench()->cache_->GetTableAddressCount();
499
- stats_hist->Add(timer.ElapsedNanos() / 1000);
572
+ if (FLAGS_histograms) {
573
+ stats_hist->Add(timer.ElapsedNanos() / 1000);
574
+ }
500
575
  }
501
576
  }
502
577
 
@@ -527,6 +602,8 @@ class CacheBench {
527
602
  void OperateCache(ThreadState* thread) {
528
603
  // To use looked-up values
529
604
  uint64_t result = 0;
605
+ uint64_t lookup_misses = 0;
606
+ uint64_t lookup_hits = 0;
530
607
  // To hold handles for a non-trivial amount of time
531
608
  Cache::Handle* handle = nullptr;
532
609
  KeyGen gen;
@@ -535,10 +612,12 @@ class CacheBench {
535
612
  StopWatchNano timer(clock);
536
613
 
537
614
  for (uint64_t i = 0; i < FLAGS_ops_per_thread; i++) {
538
- Slice key = gen.GetRand(thread->rnd, max_key_, max_log_);
615
+ Slice key = gen.GetRand(thread->rnd, max_key_, FLAGS_skew);
539
616
  uint64_t random_op = thread->rnd.Next();
540
617
 
541
- timer.Start();
618
+ if (FLAGS_histograms) {
619
+ timer.Start();
620
+ }
542
621
 
543
622
  if (random_op < lookup_insert_threshold_) {
544
623
  if (handle) {
@@ -549,12 +628,14 @@ class CacheBench {
549
628
  handle = cache_->Lookup(key, &helper2, /*context*/ nullptr,
550
629
  Cache::Priority::LOW);
551
630
  if (handle) {
631
+ ++lookup_hits;
552
632
  if (!FLAGS_lean) {
553
633
  // do something with the data
554
634
  result += NPHash64(static_cast<char*>(cache_->Value(handle)),
555
635
  FLAGS_value_bytes);
556
636
  }
557
637
  } else {
638
+ ++lookup_misses;
558
639
  // do insert
559
640
  Status s = cache_->Insert(key, createValue(thread->rnd), &helper2,
560
641
  FLAGS_value_bytes, &handle);
@@ -578,11 +659,14 @@ class CacheBench {
578
659
  handle = cache_->Lookup(key, &helper2, /*context*/ nullptr,
579
660
  Cache::Priority::LOW);
580
661
  if (handle) {
662
+ ++lookup_hits;
581
663
  if (!FLAGS_lean) {
582
664
  // do something with the data
583
665
  result += NPHash64(static_cast<char*>(cache_->Value(handle)),
584
666
  FLAGS_value_bytes);
585
667
  }
668
+ } else {
669
+ ++lookup_misses;
586
670
  }
587
671
  } else if (random_op < erase_threshold_) {
588
672
  // do erase
@@ -591,7 +675,14 @@ class CacheBench {
591
675
  // Should be extremely unlikely (noop)
592
676
  assert(random_op >= kHundredthUint64 * 100U);
593
677
  }
594
- thread->latency_ns_hist.Add(timer.ElapsedNanos());
678
+ if (FLAGS_histograms) {
679
+ thread->latency_ns_hist.Add(timer.ElapsedNanos());
680
+ }
681
+ thread->shared->AddLookupStats(lookup_hits, lookup_misses);
682
+ }
683
+ if (FLAGS_early_exit) {
684
+ MutexLock l(thread->shared->GetMutex());
685
+ exit(0);
595
686
  }
596
687
  if (handle) {
597
688
  cache_->Release(handle);
@@ -613,7 +704,9 @@ class CacheBench {
613
704
  #ifndef NDEBUG
614
705
  printf("WARNING: Assertions are enabled; benchmarks unnecessarily slow\n");
615
706
  #endif
707
+ printf("----------------------------\n");
616
708
  printf("RocksDB version : %d.%d\n", kMajorVersion, kMinorVersion);
709
+ printf("Cache impl name : %s\n", cache_->Name());
617
710
  printf("DMutex impl name : %s\n", DMutex::kName());
618
711
  printf("Number of threads : %u\n", FLAGS_threads);
619
712
  printf("Ops per thread : %" PRIu64 "\n", FLAGS_ops_per_thread);
@@ -952,11 +1045,14 @@ int cache_bench_tool(int argc, char** argv) {
952
1045
  exit(1);
953
1046
  }
954
1047
 
1048
+ if (FLAGS_seed == 0) {
1049
+ FLAGS_seed = static_cast<uint32_t>(port::GetProcessID());
1050
+ printf("Using seed = %" PRIu32 "\n", FLAGS_seed);
1051
+ }
1052
+
955
1053
  ROCKSDB_NAMESPACE::CacheBench bench;
956
1054
  if (FLAGS_populate_cache) {
957
1055
  bench.PopulateCache();
958
- printf("Population complete\n");
959
- printf("----------------------------\n");
960
1056
  }
961
1057
  if (bench.Run()) {
962
1058
  return 0;