@nxtedition/rocksdb 5.2.21 → 5.2.26

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 (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -0,0 +1,924 @@
1
+ // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+
6
+ #ifdef GFLAGS
7
+ #include <cinttypes>
8
+ #include <cstddef>
9
+ #include <cstdio>
10
+ #include <limits>
11
+ #include <memory>
12
+ #include <set>
13
+ #include <sstream>
14
+
15
+ #include "db/db_impl/db_impl.h"
16
+ #include "monitoring/histogram.h"
17
+ #include "port/port.h"
18
+ #include "rocksdb/cache.h"
19
+ #include "rocksdb/convenience.h"
20
+ #include "rocksdb/db.h"
21
+ #include "rocksdb/env.h"
22
+ #include "rocksdb/secondary_cache.h"
23
+ #include "rocksdb/system_clock.h"
24
+ #include "rocksdb/table_properties.h"
25
+ #include "table/block_based/block_based_table_reader.h"
26
+ #include "table/block_based/cachable_entry.h"
27
+ #include "util/coding.h"
28
+ #include "util/gflags_compat.h"
29
+ #include "util/hash.h"
30
+ #include "util/mutexlock.h"
31
+ #include "util/random.h"
32
+ #include "util/stop_watch.h"
33
+ #include "util/string_util.h"
34
+
35
+ using GFLAGS_NAMESPACE::ParseCommandLineFlags;
36
+
37
+ static constexpr uint32_t KiB = uint32_t{1} << 10;
38
+ static constexpr uint32_t MiB = KiB << 10;
39
+ static constexpr uint64_t GiB = MiB << 10;
40
+
41
+ DEFINE_uint32(threads, 16, "Number of concurrent threads to run.");
42
+ DEFINE_uint64(cache_size, 1 * GiB,
43
+ "Number of bytes to use as a cache of uncompressed data.");
44
+ DEFINE_uint32(num_shard_bits, 6, "shard_bits.");
45
+
46
+ DEFINE_double(resident_ratio, 0.25,
47
+ "Ratio of keys fitting in cache to keyspace.");
48
+ DEFINE_uint64(ops_per_thread, 2000000U, "Number of operations per thread.");
49
+ DEFINE_uint32(value_bytes, 8 * KiB, "Size of each value added.");
50
+
51
+ DEFINE_uint32(skew, 5, "Degree of skew in key selection");
52
+ DEFINE_bool(populate_cache, true, "Populate cache before operations");
53
+
54
+ DEFINE_uint32(lookup_insert_percent, 87,
55
+ "Ratio of lookup (+ insert on not found) to total workload "
56
+ "(expressed as a percentage)");
57
+ DEFINE_uint32(insert_percent, 2,
58
+ "Ratio of insert to total workload (expressed as a percentage)");
59
+ DEFINE_uint32(lookup_percent, 10,
60
+ "Ratio of lookup to total workload (expressed as a percentage)");
61
+ DEFINE_uint32(erase_percent, 1,
62
+ "Ratio of erase to total workload (expressed as a percentage)");
63
+ DEFINE_bool(gather_stats, false,
64
+ "Whether to periodically simulate gathering block cache stats, "
65
+ "using one more thread.");
66
+ DEFINE_uint32(
67
+ gather_stats_sleep_ms, 1000,
68
+ "How many milliseconds to sleep between each gathering of stats.");
69
+
70
+ DEFINE_uint32(gather_stats_entries_per_lock, 256,
71
+ "For Cache::ApplyToAllEntries");
72
+ DEFINE_bool(skewed, false, "If true, skew the key access distribution");
73
+ #ifndef ROCKSDB_LITE
74
+ DEFINE_string(secondary_cache_uri, "",
75
+ "Full URI for creating a custom secondary cache object");
76
+ static class std::shared_ptr<ROCKSDB_NAMESPACE::SecondaryCache> secondary_cache;
77
+ #endif // ROCKSDB_LITE
78
+
79
+ DEFINE_bool(use_clock_cache, false, "");
80
+
81
+ // ## BEGIN stress_cache_key sub-tool options ##
82
+ // See class StressCacheKey below.
83
+ DEFINE_bool(stress_cache_key, false,
84
+ "If true, run cache key stress test instead");
85
+ DEFINE_uint32(
86
+ sck_files_per_day, 2500000,
87
+ "(-stress_cache_key) Simulated files generated per simulated day");
88
+ // NOTE: Giving each run a specified lifetime, rather than e.g. "until
89
+ // first collision" ensures equal skew from start-up, when collisions are
90
+ // less likely.
91
+ DEFINE_uint32(sck_days_per_run, 90,
92
+ "(-stress_cache_key) Number of days to simulate in each run");
93
+ // NOTE: The number of observed collisions directly affects the relative
94
+ // accuracy of the predicted probabilities. 15 observations should be well
95
+ // within factor-of-2 accuracy.
96
+ DEFINE_uint32(
97
+ sck_min_collision, 15,
98
+ "(-stress_cache_key) Keep running until this many collisions seen");
99
+ // sck_file_size_mb can be thought of as average file size. The simulation is
100
+ // not precise enough to care about the distribution of file sizes; other
101
+ // simulations (https://github.com/pdillinger/unique_id/tree/main/monte_carlo)
102
+ // indicate the distribution only makes a small difference (e.g. < 2x factor)
103
+ DEFINE_uint32(
104
+ sck_file_size_mb, 32,
105
+ "(-stress_cache_key) Simulated file size in MiB, for accounting purposes");
106
+ DEFINE_uint32(sck_reopen_nfiles, 100,
107
+ "(-stress_cache_key) Simulate DB re-open average every n files");
108
+ DEFINE_uint32(sck_restarts_per_day, 24,
109
+ "(-stress_cache_key) Average simulated process restarts per day "
110
+ "(across DBs)");
111
+ DEFINE_uint32(
112
+ sck_db_count, 100,
113
+ "(-stress_cache_key) Parallel DBs in simulation sharing a block cache");
114
+ DEFINE_uint32(
115
+ sck_table_bits, 20,
116
+ "(-stress_cache_key) Log2 number of tracked (live) files (across DBs)");
117
+ // sck_keep_bits being well below full 128 bits amplifies the collision
118
+ // probability so that the true probability can be estimated through observed
119
+ // collisions. (More explanation below.)
120
+ DEFINE_uint32(
121
+ sck_keep_bits, 50,
122
+ "(-stress_cache_key) Number of bits to keep from each cache key (<= 64)");
123
+ // sck_randomize is used to validate whether cache key is performing "better
124
+ // than random." Even with this setting, file offsets are not randomized.
125
+ DEFINE_bool(sck_randomize, false,
126
+ "(-stress_cache_key) Randomize (hash) cache key");
127
+ // See https://github.com/facebook/rocksdb/pull/9058
128
+ DEFINE_bool(sck_footer_unique_id, false,
129
+ "(-stress_cache_key) Simulate using proposed footer unique id");
130
+ // ## END stress_cache_key sub-tool options ##
131
+
132
+ namespace ROCKSDB_NAMESPACE {
133
+
134
+ class CacheBench;
135
+ namespace {
136
+ // State shared by all concurrent executions of the same benchmark.
137
+ class SharedState {
138
+ public:
139
+ explicit SharedState(CacheBench* cache_bench)
140
+ : cv_(&mu_),
141
+ num_initialized_(0),
142
+ start_(false),
143
+ num_done_(0),
144
+ cache_bench_(cache_bench) {}
145
+
146
+ ~SharedState() {}
147
+
148
+ port::Mutex* GetMutex() { return &mu_; }
149
+
150
+ port::CondVar* GetCondVar() { return &cv_; }
151
+
152
+ CacheBench* GetCacheBench() const { return cache_bench_; }
153
+
154
+ void IncInitialized() { num_initialized_++; }
155
+
156
+ void IncDone() { num_done_++; }
157
+
158
+ bool AllInitialized() const { return num_initialized_ >= FLAGS_threads; }
159
+
160
+ bool AllDone() const { return num_done_ >= FLAGS_threads; }
161
+
162
+ void SetStart() { start_ = true; }
163
+
164
+ bool Started() const { return start_; }
165
+
166
+ private:
167
+ port::Mutex mu_;
168
+ port::CondVar cv_;
169
+
170
+ uint64_t num_initialized_;
171
+ bool start_;
172
+ uint64_t num_done_;
173
+
174
+ CacheBench* cache_bench_;
175
+ };
176
+
177
+ // Per-thread state for concurrent executions of the same benchmark.
178
+ struct ThreadState {
179
+ uint32_t tid;
180
+ Random64 rnd;
181
+ SharedState* shared;
182
+ HistogramImpl latency_ns_hist;
183
+ uint64_t duration_us = 0;
184
+
185
+ ThreadState(uint32_t index, SharedState* _shared)
186
+ : tid(index), rnd(1000 + index), shared(_shared) {}
187
+ };
188
+
189
+ struct KeyGen {
190
+ char key_data[27];
191
+
192
+ Slice GetRand(Random64& rnd, uint64_t max_key, int max_log) {
193
+ uint64_t key = 0;
194
+ if (!FLAGS_skewed) {
195
+ uint64_t raw = rnd.Next();
196
+ // Skew according to setting
197
+ for (uint32_t i = 0; i < FLAGS_skew; ++i) {
198
+ raw = std::min(raw, rnd.Next());
199
+ }
200
+ key = FastRange64(raw, max_key);
201
+ } else {
202
+ key = rnd.Skewed(max_log);
203
+ if (key > max_key) {
204
+ key -= max_key;
205
+ }
206
+ }
207
+ // Variable size and alignment
208
+ size_t off = key % 8;
209
+ key_data[0] = char{42};
210
+ EncodeFixed64(key_data + 1, key);
211
+ key_data[9] = char{11};
212
+ EncodeFixed64(key_data + 10, key);
213
+ key_data[18] = char{4};
214
+ EncodeFixed64(key_data + 19, key);
215
+ return Slice(&key_data[off], sizeof(key_data) - off);
216
+ }
217
+ };
218
+
219
+ char* createValue(Random64& rnd) {
220
+ char* rv = new char[FLAGS_value_bytes];
221
+ // Fill with some filler data, and take some CPU time
222
+ for (uint32_t i = 0; i < FLAGS_value_bytes; i += 8) {
223
+ EncodeFixed64(rv + i, rnd.Next());
224
+ }
225
+ return rv;
226
+ }
227
+
228
+ // Callbacks for secondary cache
229
+ size_t SizeFn(void* /*obj*/) { return FLAGS_value_bytes; }
230
+
231
+ Status SaveToFn(void* obj, size_t /*offset*/, size_t size, void* out) {
232
+ memcpy(out, obj, size);
233
+ return Status::OK();
234
+ }
235
+
236
+ // Different deleters to simulate using deleter to gather
237
+ // stats on the code origin and kind of cache entries.
238
+ void deleter1(const Slice& /*key*/, void* value) {
239
+ delete[] static_cast<char*>(value);
240
+ }
241
+ void deleter2(const Slice& /*key*/, void* value) {
242
+ delete[] static_cast<char*>(value);
243
+ }
244
+ void deleter3(const Slice& /*key*/, void* value) {
245
+ delete[] static_cast<char*>(value);
246
+ }
247
+
248
+ Cache::CacheItemHelper helper1(SizeFn, SaveToFn, deleter1);
249
+ Cache::CacheItemHelper helper2(SizeFn, SaveToFn, deleter2);
250
+ Cache::CacheItemHelper helper3(SizeFn, SaveToFn, deleter3);
251
+ } // namespace
252
+
253
+ class CacheBench {
254
+ static constexpr uint64_t kHundredthUint64 =
255
+ std::numeric_limits<uint64_t>::max() / 100U;
256
+
257
+ public:
258
+ CacheBench()
259
+ : max_key_(static_cast<uint64_t>(FLAGS_cache_size / FLAGS_resident_ratio /
260
+ FLAGS_value_bytes)),
261
+ lookup_insert_threshold_(kHundredthUint64 *
262
+ FLAGS_lookup_insert_percent),
263
+ insert_threshold_(lookup_insert_threshold_ +
264
+ kHundredthUint64 * FLAGS_insert_percent),
265
+ lookup_threshold_(insert_threshold_ +
266
+ kHundredthUint64 * FLAGS_lookup_percent),
267
+ erase_threshold_(lookup_threshold_ +
268
+ kHundredthUint64 * FLAGS_erase_percent),
269
+ skewed_(FLAGS_skewed) {
270
+ if (erase_threshold_ != 100U * kHundredthUint64) {
271
+ fprintf(stderr, "Percentages must add to 100.\n");
272
+ exit(1);
273
+ }
274
+
275
+ max_log_ = 0;
276
+ if (skewed_) {
277
+ uint64_t max_key = max_key_;
278
+ while (max_key >>= 1) max_log_++;
279
+ if (max_key > (static_cast<uint64_t>(1) << max_log_)) max_log_++;
280
+ }
281
+
282
+ if (FLAGS_use_clock_cache) {
283
+ cache_ = NewClockCache(FLAGS_cache_size, FLAGS_num_shard_bits);
284
+ if (!cache_) {
285
+ fprintf(stderr, "Clock cache not supported.\n");
286
+ exit(1);
287
+ }
288
+ } else {
289
+ LRUCacheOptions opts(FLAGS_cache_size, FLAGS_num_shard_bits, false, 0.5);
290
+ #ifndef ROCKSDB_LITE
291
+ if (!FLAGS_secondary_cache_uri.empty()) {
292
+ Status s = SecondaryCache::CreateFromString(
293
+ ConfigOptions(), FLAGS_secondary_cache_uri, &secondary_cache);
294
+ if (secondary_cache == nullptr) {
295
+ fprintf(
296
+ stderr,
297
+ "No secondary cache registered matching string: %s status=%s\n",
298
+ FLAGS_secondary_cache_uri.c_str(), s.ToString().c_str());
299
+ exit(1);
300
+ }
301
+ opts.secondary_cache = secondary_cache;
302
+ }
303
+ #endif // ROCKSDB_LITE
304
+
305
+ cache_ = NewLRUCache(opts);
306
+ }
307
+ }
308
+
309
+ ~CacheBench() {}
310
+
311
+ void PopulateCache() {
312
+ Random64 rnd(1);
313
+ KeyGen keygen;
314
+ for (uint64_t i = 0; i < 2 * FLAGS_cache_size; i += FLAGS_value_bytes) {
315
+ cache_->Insert(keygen.GetRand(rnd, max_key_, max_log_), createValue(rnd),
316
+ &helper1, FLAGS_value_bytes);
317
+ }
318
+ }
319
+
320
+ bool Run() {
321
+ const auto clock = SystemClock::Default().get();
322
+
323
+ PrintEnv();
324
+ SharedState shared(this);
325
+ std::vector<std::unique_ptr<ThreadState> > threads(FLAGS_threads);
326
+ for (uint32_t i = 0; i < FLAGS_threads; i++) {
327
+ threads[i].reset(new ThreadState(i, &shared));
328
+ std::thread(ThreadBody, threads[i].get()).detach();
329
+ }
330
+
331
+ HistogramImpl stats_hist;
332
+ std::string stats_report;
333
+ std::thread stats_thread(StatsBody, &shared, &stats_hist, &stats_report);
334
+
335
+ uint64_t start_time;
336
+ {
337
+ MutexLock l(shared.GetMutex());
338
+ while (!shared.AllInitialized()) {
339
+ shared.GetCondVar()->Wait();
340
+ }
341
+ // Record start time
342
+ start_time = clock->NowMicros();
343
+
344
+ // Start all threads
345
+ shared.SetStart();
346
+ shared.GetCondVar()->SignalAll();
347
+
348
+ // Wait threads to complete
349
+ while (!shared.AllDone()) {
350
+ shared.GetCondVar()->Wait();
351
+ }
352
+ }
353
+
354
+ // Stats gathering is considered background work. This time measurement
355
+ // is for foreground work, and not really ideal for that. See below.
356
+ uint64_t end_time = clock->NowMicros();
357
+ stats_thread.join();
358
+
359
+ // Wall clock time - includes idle time if threads
360
+ // finish at different times (not ideal).
361
+ double elapsed_secs = static_cast<double>(end_time - start_time) * 1e-6;
362
+ uint32_t ops_per_sec = static_cast<uint32_t>(
363
+ 1.0 * FLAGS_threads * FLAGS_ops_per_thread / elapsed_secs);
364
+ printf("Complete in %.3f s; Rough parallel ops/sec = %u\n", elapsed_secs,
365
+ ops_per_sec);
366
+
367
+ // Total time in each thread (more accurate throughput measure)
368
+ elapsed_secs = 0;
369
+ for (uint32_t i = 0; i < FLAGS_threads; i++) {
370
+ elapsed_secs += threads[i]->duration_us * 1e-6;
371
+ }
372
+ ops_per_sec = static_cast<uint32_t>(1.0 * FLAGS_threads *
373
+ FLAGS_ops_per_thread / elapsed_secs);
374
+ printf("Thread ops/sec = %u\n", ops_per_sec);
375
+
376
+ printf("\nOperation latency (ns):\n");
377
+ HistogramImpl combined;
378
+ for (uint32_t i = 0; i < FLAGS_threads; i++) {
379
+ combined.Merge(threads[i]->latency_ns_hist);
380
+ }
381
+ printf("%s", combined.ToString().c_str());
382
+
383
+ if (FLAGS_gather_stats) {
384
+ printf("\nGather stats latency (us):\n");
385
+ printf("%s", stats_hist.ToString().c_str());
386
+ }
387
+
388
+ printf("\n%s", stats_report.c_str());
389
+
390
+ return true;
391
+ }
392
+
393
+ private:
394
+ std::shared_ptr<Cache> cache_;
395
+ const uint64_t max_key_;
396
+ // Cumulative thresholds in the space of a random uint64_t
397
+ const uint64_t lookup_insert_threshold_;
398
+ const uint64_t insert_threshold_;
399
+ const uint64_t lookup_threshold_;
400
+ const uint64_t erase_threshold_;
401
+ const bool skewed_;
402
+ int max_log_;
403
+
404
+ // A benchmark version of gathering stats on an active block cache by
405
+ // iterating over it. The primary purpose is to measure the impact of
406
+ // gathering stats with ApplyToAllEntries on throughput- and
407
+ // latency-sensitive Cache users. Performance of stats gathering is
408
+ // also reported. The last set of gathered stats is also reported, for
409
+ // manual sanity checking for logical errors or other unexpected
410
+ // behavior of cache_bench or the underlying Cache.
411
+ static void StatsBody(SharedState* shared, HistogramImpl* stats_hist,
412
+ std::string* stats_report) {
413
+ if (!FLAGS_gather_stats) {
414
+ return;
415
+ }
416
+ const auto clock = SystemClock::Default().get();
417
+ uint64_t total_key_size = 0;
418
+ uint64_t total_charge = 0;
419
+ uint64_t total_entry_count = 0;
420
+ std::set<Cache::DeleterFn> deleters;
421
+ StopWatchNano timer(clock);
422
+
423
+ for (;;) {
424
+ uint64_t time;
425
+ time = clock->NowMicros();
426
+ uint64_t deadline = time + uint64_t{FLAGS_gather_stats_sleep_ms} * 1000;
427
+
428
+ {
429
+ MutexLock l(shared->GetMutex());
430
+ for (;;) {
431
+ if (shared->AllDone()) {
432
+ std::ostringstream ostr;
433
+ ostr << "Most recent cache entry stats:\n"
434
+ << "Number of entries: " << total_entry_count << "\n"
435
+ << "Total charge: " << BytesToHumanString(total_charge) << "\n"
436
+ << "Average key size: "
437
+ << (1.0 * total_key_size / total_entry_count) << "\n"
438
+ << "Average charge: "
439
+ << BytesToHumanString(static_cast<uint64_t>(
440
+ 1.0 * total_charge / total_entry_count))
441
+ << "\n"
442
+ << "Unique deleters: " << deleters.size() << "\n";
443
+ *stats_report = ostr.str();
444
+ return;
445
+ }
446
+ if (clock->NowMicros() >= deadline) {
447
+ break;
448
+ }
449
+ uint64_t diff = deadline - std::min(clock->NowMicros(), deadline);
450
+ shared->GetCondVar()->TimedWait(diff + 1);
451
+ }
452
+ }
453
+
454
+ // Now gather stats, outside of mutex
455
+ total_key_size = 0;
456
+ total_charge = 0;
457
+ total_entry_count = 0;
458
+ deleters.clear();
459
+ auto fn = [&](const Slice& key, void* /*value*/, size_t charge,
460
+ Cache::DeleterFn deleter) {
461
+ total_key_size += key.size();
462
+ total_charge += charge;
463
+ ++total_entry_count;
464
+ // Something slightly more expensive as in (future) stats by category
465
+ deleters.insert(deleter);
466
+ };
467
+ timer.Start();
468
+ Cache::ApplyToAllEntriesOptions opts;
469
+ opts.average_entries_per_lock = FLAGS_gather_stats_entries_per_lock;
470
+ shared->GetCacheBench()->cache_->ApplyToAllEntries(fn, opts);
471
+ stats_hist->Add(timer.ElapsedNanos() / 1000);
472
+ }
473
+ }
474
+
475
+ static void ThreadBody(ThreadState* thread) {
476
+ SharedState* shared = thread->shared;
477
+
478
+ {
479
+ MutexLock l(shared->GetMutex());
480
+ shared->IncInitialized();
481
+ if (shared->AllInitialized()) {
482
+ shared->GetCondVar()->SignalAll();
483
+ }
484
+ while (!shared->Started()) {
485
+ shared->GetCondVar()->Wait();
486
+ }
487
+ }
488
+ thread->shared->GetCacheBench()->OperateCache(thread);
489
+
490
+ {
491
+ MutexLock l(shared->GetMutex());
492
+ shared->IncDone();
493
+ if (shared->AllDone()) {
494
+ shared->GetCondVar()->SignalAll();
495
+ }
496
+ }
497
+ }
498
+
499
+ void OperateCache(ThreadState* thread) {
500
+ // To use looked-up values
501
+ uint64_t result = 0;
502
+ // To hold handles for a non-trivial amount of time
503
+ Cache::Handle* handle = nullptr;
504
+ KeyGen gen;
505
+ const auto clock = SystemClock::Default().get();
506
+ uint64_t start_time = clock->NowMicros();
507
+ StopWatchNano timer(clock);
508
+
509
+ for (uint64_t i = 0; i < FLAGS_ops_per_thread; i++) {
510
+ timer.Start();
511
+ Slice key = gen.GetRand(thread->rnd, max_key_, max_log_);
512
+ uint64_t random_op = thread->rnd.Next();
513
+ Cache::CreateCallback create_cb = [](const void* buf, size_t size,
514
+ void** out_obj,
515
+ size_t* charge) -> Status {
516
+ *out_obj = reinterpret_cast<void*>(new char[size]);
517
+ memcpy(*out_obj, buf, size);
518
+ *charge = size;
519
+ return Status::OK();
520
+ };
521
+
522
+ if (random_op < lookup_insert_threshold_) {
523
+ if (handle) {
524
+ cache_->Release(handle);
525
+ handle = nullptr;
526
+ }
527
+ // do lookup
528
+ handle = cache_->Lookup(key, &helper2, create_cb, Cache::Priority::LOW,
529
+ true);
530
+ if (handle) {
531
+ // do something with the data
532
+ result += NPHash64(static_cast<char*>(cache_->Value(handle)),
533
+ FLAGS_value_bytes);
534
+ } else {
535
+ // do insert
536
+ cache_->Insert(key, createValue(thread->rnd), &helper2,
537
+ FLAGS_value_bytes, &handle);
538
+ }
539
+ } else if (random_op < insert_threshold_) {
540
+ if (handle) {
541
+ cache_->Release(handle);
542
+ handle = nullptr;
543
+ }
544
+ // do insert
545
+ cache_->Insert(key, createValue(thread->rnd), &helper3,
546
+ FLAGS_value_bytes, &handle);
547
+ } else if (random_op < lookup_threshold_) {
548
+ if (handle) {
549
+ cache_->Release(handle);
550
+ handle = nullptr;
551
+ }
552
+ // do lookup
553
+ handle = cache_->Lookup(key, &helper2, create_cb, Cache::Priority::LOW,
554
+ true);
555
+ if (handle) {
556
+ // do something with the data
557
+ result += NPHash64(static_cast<char*>(cache_->Value(handle)),
558
+ FLAGS_value_bytes);
559
+ }
560
+ } else if (random_op < erase_threshold_) {
561
+ // do erase
562
+ cache_->Erase(key);
563
+ } else {
564
+ // Should be extremely unlikely (noop)
565
+ assert(random_op >= kHundredthUint64 * 100U);
566
+ }
567
+ thread->latency_ns_hist.Add(timer.ElapsedNanos());
568
+ }
569
+ if (handle) {
570
+ cache_->Release(handle);
571
+ handle = nullptr;
572
+ }
573
+ // Ensure computations on `result` are not optimized away.
574
+ if (result == 1) {
575
+ printf("You are extremely unlucky(2). Try again.\n");
576
+ exit(1);
577
+ }
578
+ thread->duration_us = clock->NowMicros() - start_time;
579
+ }
580
+
581
+ void PrintEnv() const {
582
+ printf("RocksDB version : %d.%d\n", kMajorVersion, kMinorVersion);
583
+ printf("Number of threads : %u\n", FLAGS_threads);
584
+ printf("Ops per thread : %" PRIu64 "\n", FLAGS_ops_per_thread);
585
+ printf("Cache size : %s\n",
586
+ BytesToHumanString(FLAGS_cache_size).c_str());
587
+ printf("Num shard bits : %u\n", FLAGS_num_shard_bits);
588
+ printf("Max key : %" PRIu64 "\n", max_key_);
589
+ printf("Resident ratio : %g\n", FLAGS_resident_ratio);
590
+ printf("Skew degree : %u\n", FLAGS_skew);
591
+ printf("Populate cache : %d\n", int{FLAGS_populate_cache});
592
+ printf("Lookup+Insert pct : %u%%\n", FLAGS_lookup_insert_percent);
593
+ printf("Insert percentage : %u%%\n", FLAGS_insert_percent);
594
+ printf("Lookup percentage : %u%%\n", FLAGS_lookup_percent);
595
+ printf("Erase percentage : %u%%\n", FLAGS_erase_percent);
596
+ std::ostringstream stats;
597
+ if (FLAGS_gather_stats) {
598
+ stats << "enabled (" << FLAGS_gather_stats_sleep_ms << "ms, "
599
+ << FLAGS_gather_stats_entries_per_lock << "/lock)";
600
+ } else {
601
+ stats << "disabled";
602
+ }
603
+ printf("Gather stats : %s\n", stats.str().c_str());
604
+ printf("----------------------------\n");
605
+ }
606
+ };
607
+
608
+ // cache_bench -stress_cache_key is an independent embedded tool for
609
+ // estimating the probability of CacheKey collisions through simulation.
610
+ // At a high level, it simulates generating SST files over many months,
611
+ // keeping them in the DB and/or cache for some lifetime while staying
612
+ // under resource caps, and checking for any cache key collisions that
613
+ // arise among the set of live files. For efficient simulation, we make
614
+ // some simplifying "pessimistic" assumptions (that only increase the
615
+ // chance of the simulation reporting a collision relative to the chance
616
+ // of collision in practice):
617
+ // * Every generated file has a cache entry for every byte offset in the
618
+ // file (contiguous range of cache keys)
619
+ // * All of every file is cached for its entire lifetime. (Here "lifetime"
620
+ // is technically the union of DB and Cache lifetime, though we only
621
+ // model a generous DB lifetime, where space usage is always maximized.
622
+ // In a effective Cache, lifetime in cache can only substantially exceed
623
+ // lifetime in DB if there is little cache activity; cache activity is
624
+ // required to hit cache key collisions.)
625
+ //
626
+ // It would be possible to track an exact set of cache key ranges for the
627
+ // set of live files, but we would have no hope of observing collisions
628
+ // (overlap in live files) in our simulation. We need to employ some way
629
+ // of amplifying collision probability that allows us to predict the real
630
+ // collision probability by extrapolation from observed collisions. Our
631
+ // basic approach is to reduce each cache key range down to some smaller
632
+ // number of bits, and limiting to bits that are shared over the whole
633
+ // range. Now we can observe collisions using a set of smaller stripped-down
634
+ // (reduced) cache keys. Let's do some case analysis to understand why this
635
+ // works:
636
+ // * No collision in reduced key - because the reduction is a pure function
637
+ // this implies no collision in the full keys
638
+ // * Collision detected between two reduced keys - either
639
+ // * The reduction has dropped some structured uniqueness info (from one of
640
+ // session counter or file number; file offsets are never materialized here).
641
+ // This can only artificially inflate the observed and extrapolated collision
642
+ // probabilities. We only have to worry about this in designing the reduction.
643
+ // * The reduction has preserved all the structured uniqueness in the cache
644
+ // key, which means either
645
+ // * REJECTED: We have a uniqueness bug in generating cache keys, where
646
+ // structured uniqueness info should have been different but isn't. In such a
647
+ // case, increasing by 1 the number of bits kept after reduction would not
648
+ // reduce observed probabilities by half. (In our observations, the
649
+ // probabilities are reduced approximately by half.)
650
+ // * ACCEPTED: The lost unstructured uniqueness in the key determines the
651
+ // probability that an observed collision would imply an overlap in ranges.
652
+ // In short, dropping n bits from key would increase collision probability by
653
+ // 2**n, assuming those n bits have full entropy in unstructured uniqueness.
654
+ //
655
+ // But we also have to account for the key ranges based on file size. If file
656
+ // sizes are roughly 2**b offsets, using XOR in 128-bit cache keys for
657
+ // "ranges", we know from other simulations (see
658
+ // https://github.com/pdillinger/unique_id/) that that's roughly equivalent to
659
+ // (less than 2x higher collision probability) using a cache key of size
660
+ // 128 - b bits for the whole file. (This is the only place we make an
661
+ // "optimistic" assumption, which is more than offset by the real
662
+ // implementation stripping off 2 lower bits from block byte offsets for cache
663
+ // keys. The simulation assumes byte offsets, which is net pessimistic.)
664
+ //
665
+ // So to accept the extrapolation as valid, we need to be confident that all
666
+ // "lost" bits, excluding those covered by file offset, are full entropy.
667
+ // Recall that we have assumed (verifiably, safely) that other structured data
668
+ // (file number and session counter) are kept, not lost. Based on the
669
+ // implementation comments for OffsetableCacheKey, the only potential hole here
670
+ // is that we only have ~103 bits of entropy in "all new" session IDs, and in
671
+ // extreme cases, there might be only 1 DB ID. However, because the upper ~39
672
+ // bits of session ID are hashed, the combination of file number and file
673
+ // offset only has to add to 25 bits (or more) to ensure full entropy in
674
+ // unstructured uniqueness lost in the reduction. Typical file size of 32MB
675
+ // suffices (at least for simulation purposes where we assume each file offset
676
+ // occupies a cache key).
677
+ //
678
+ // Example results in comments on OffsetableCacheKey.
679
+ class StressCacheKey {
680
+ public:
681
+ void Run() {
682
+ if (FLAGS_sck_footer_unique_id) {
683
+ // Proposed footer unique IDs are DB-independent and session-independent
684
+ // (but process-dependent) which is most easily simulated here by
685
+ // assuming 1 DB and (later below) no session resets without process
686
+ // reset.
687
+ FLAGS_sck_db_count = 1;
688
+ }
689
+
690
+ // Describe the simulated workload
691
+ uint64_t mb_per_day =
692
+ uint64_t{FLAGS_sck_files_per_day} * FLAGS_sck_file_size_mb;
693
+ printf("Total cache or DBs size: %gTiB Writing %g MiB/s or %gTiB/day\n",
694
+ FLAGS_sck_file_size_mb / 1024.0 / 1024.0 *
695
+ std::pow(2.0, FLAGS_sck_table_bits),
696
+ mb_per_day / 86400.0, mb_per_day / 1024.0 / 1024.0);
697
+ // For extrapolating probability of any collisions from a number of
698
+ // observed collisions
699
+ multiplier_ = std::pow(2.0, 128 - FLAGS_sck_keep_bits) /
700
+ (FLAGS_sck_file_size_mb * 1024.0 * 1024.0);
701
+ printf(
702
+ "Multiply by %g to correct for simulation losses (but still assume "
703
+ "whole file cached)\n",
704
+ multiplier_);
705
+ restart_nfiles_ = FLAGS_sck_files_per_day / FLAGS_sck_restarts_per_day;
706
+ double without_ejection =
707
+ std::pow(1.414214, FLAGS_sck_keep_bits) / FLAGS_sck_files_per_day;
708
+ // This should be a lower bound for -sck_randomize, usually a terribly
709
+ // rough lower bound.
710
+ // If observation is worse than this, then something has gone wrong.
711
+ printf(
712
+ "Without ejection, expect random collision after %g days (%g "
713
+ "corrected)\n",
714
+ without_ejection, without_ejection * multiplier_);
715
+ double with_full_table =
716
+ std::pow(2.0, FLAGS_sck_keep_bits - FLAGS_sck_table_bits) /
717
+ FLAGS_sck_files_per_day;
718
+ // This is an alternate lower bound for -sck_randomize, usually pretty
719
+ // accurate. Our cache keys should usually perform "better than random"
720
+ // but always no worse. (If observation is substantially worse than this,
721
+ // then something has gone wrong.)
722
+ printf(
723
+ "With ejection and full table, expect random collision after %g "
724
+ "days (%g corrected)\n",
725
+ with_full_table, with_full_table * multiplier_);
726
+ collisions_ = 0;
727
+
728
+ // Run until sufficient number of observed collisions.
729
+ for (int i = 1; collisions_ < FLAGS_sck_min_collision; i++) {
730
+ RunOnce();
731
+ if (collisions_ == 0) {
732
+ printf(
733
+ "No collisions after %d x %u days "
734
+ " \n",
735
+ i, FLAGS_sck_days_per_run);
736
+ } else {
737
+ double est = 1.0 * i * FLAGS_sck_days_per_run / collisions_;
738
+ printf("%" PRIu64
739
+ " collisions after %d x %u days, est %g days between (%g "
740
+ "corrected) \n",
741
+ collisions_, i, FLAGS_sck_days_per_run, est, est * multiplier_);
742
+ }
743
+ }
744
+ }
745
+
746
+ void RunOnce() {
747
+ // Re-initialized simulated state
748
+ const size_t db_count = FLAGS_sck_db_count;
749
+ dbs_.reset(new TableProperties[db_count]{});
750
+ const size_t table_mask = (size_t{1} << FLAGS_sck_table_bits) - 1;
751
+ table_.reset(new uint64_t[table_mask + 1]{});
752
+ if (FLAGS_sck_keep_bits > 64) {
753
+ FLAGS_sck_keep_bits = 64;
754
+ }
755
+
756
+ // Details of which bits are dropped in reduction
757
+ uint32_t shift_away = 64 - FLAGS_sck_keep_bits;
758
+ // Shift away fewer potential file number bits (b) than potential
759
+ // session counter bits (a).
760
+ uint32_t shift_away_b = shift_away / 3;
761
+ uint32_t shift_away_a = shift_away - shift_away_b;
762
+
763
+ process_count_ = 0;
764
+ session_count_ = 0;
765
+ ResetProcess();
766
+
767
+ Random64 r{std::random_device{}()};
768
+
769
+ uint64_t max_file_count =
770
+ uint64_t{FLAGS_sck_files_per_day} * FLAGS_sck_days_per_run;
771
+ uint64_t file_size = FLAGS_sck_file_size_mb * uint64_t{1024} * 1024U;
772
+ uint32_t report_count = 0;
773
+ uint32_t collisions_this_run = 0;
774
+ size_t db_i = 0;
775
+
776
+ for (uint64_t file_count = 1; file_count <= max_file_count;
777
+ ++file_count, ++db_i) {
778
+ // Round-robin through DBs (this faster than %)
779
+ if (db_i >= db_count) {
780
+ db_i = 0;
781
+ }
782
+ // Any other periodic actions before simulating next file
783
+ if (!FLAGS_sck_footer_unique_id && r.OneIn(FLAGS_sck_reopen_nfiles)) {
784
+ ResetSession(db_i);
785
+ } else if (r.OneIn(restart_nfiles_)) {
786
+ ResetProcess();
787
+ }
788
+ // Simulate next file
789
+ OffsetableCacheKey ock;
790
+ dbs_[db_i].orig_file_number += 1;
791
+ // skip some file numbers for other file kinds, except in footer unique
792
+ // ID, orig_file_number here tracks process-wide generated SST file
793
+ // count.
794
+ if (!FLAGS_sck_footer_unique_id) {
795
+ dbs_[db_i].orig_file_number += (r.Next() & 3);
796
+ }
797
+ bool is_stable;
798
+ BlockBasedTable::SetupBaseCacheKey(&dbs_[db_i], /* ignored */ "",
799
+ /* ignored */ 42, file_size, &ock,
800
+ &is_stable);
801
+ assert(is_stable);
802
+ // Get a representative cache key, which later we analytically generalize
803
+ // to a range.
804
+ CacheKey ck = ock.WithOffset(0);
805
+ uint64_t reduced_key;
806
+ if (FLAGS_sck_randomize) {
807
+ reduced_key = GetSliceHash64(ck.AsSlice()) >> shift_away;
808
+ } else if (FLAGS_sck_footer_unique_id) {
809
+ // Special case: keep only file number, not session counter
810
+ uint32_t a = DecodeFixed32(ck.AsSlice().data() + 4) >> shift_away_a;
811
+ uint32_t b = DecodeFixed32(ck.AsSlice().data() + 12) >> shift_away_b;
812
+ reduced_key = (uint64_t{a} << 32) + b;
813
+ } else {
814
+ // Try to keep file number and session counter (shift away other bits)
815
+ uint32_t a = DecodeFixed32(ck.AsSlice().data()) << shift_away_a;
816
+ uint32_t b = DecodeFixed32(ck.AsSlice().data() + 12) >> shift_away_b;
817
+ reduced_key = (uint64_t{a} << 32) + b;
818
+ }
819
+ if (reduced_key == 0) {
820
+ // Unlikely, but we need to exclude tracking this value because we
821
+ // use it to mean "empty" in table. This case is OK as long as we
822
+ // don't hit it often.
823
+ printf("Hit Zero! \n");
824
+ file_count--;
825
+ continue;
826
+ }
827
+ uint64_t h =
828
+ NPHash64(reinterpret_cast<char*>(&reduced_key), sizeof(reduced_key));
829
+ // Skew expected lifetimes, for high variance (super-Poisson) variance
830
+ // in actual lifetimes.
831
+ size_t pos =
832
+ std::min(Lower32of64(h) & table_mask, Upper32of64(h) & table_mask);
833
+ if (table_[pos] == reduced_key) {
834
+ collisions_this_run++;
835
+ // Our goal is to predict probability of no collisions, not expected
836
+ // number of collisions. To make the distinction, we have to get rid
837
+ // of observing correlated collisions, which this takes care of:
838
+ ResetProcess();
839
+ } else {
840
+ // Replace (end of lifetime for file that was in this slot)
841
+ table_[pos] = reduced_key;
842
+ }
843
+
844
+ if (++report_count == FLAGS_sck_files_per_day) {
845
+ report_count = 0;
846
+ // Estimate fill %
847
+ size_t incr = table_mask / 1000;
848
+ size_t sampled_count = 0;
849
+ for (size_t i = 0; i <= table_mask; i += incr) {
850
+ if (table_[i] != 0) {
851
+ sampled_count++;
852
+ }
853
+ }
854
+ // Report
855
+ printf(
856
+ "%" PRIu64 " days, %" PRIu64 " proc, %" PRIu64
857
+ " sess, %u coll, occ %g%%, ejected %g%% \r",
858
+ file_count / FLAGS_sck_files_per_day, process_count_,
859
+ session_count_, collisions_this_run, 100.0 * sampled_count / 1000.0,
860
+ 100.0 * (1.0 - sampled_count / 1000.0 * table_mask / file_count));
861
+ fflush(stdout);
862
+ }
863
+ }
864
+ collisions_ += collisions_this_run;
865
+ }
866
+
867
+ void ResetSession(size_t i) {
868
+ dbs_[i].db_session_id = DBImpl::GenerateDbSessionId(nullptr);
869
+ session_count_++;
870
+ }
871
+
872
+ void ResetProcess() {
873
+ process_count_++;
874
+ DBImpl::TEST_ResetDbSessionIdGen();
875
+ for (size_t i = 0; i < FLAGS_sck_db_count; ++i) {
876
+ ResetSession(i);
877
+ }
878
+ if (FLAGS_sck_footer_unique_id) {
879
+ // For footer unique ID, this tracks process-wide generated SST file
880
+ // count.
881
+ dbs_[0].orig_file_number = 0;
882
+ }
883
+ }
884
+
885
+ private:
886
+ // Use db_session_id and orig_file_number from TableProperties
887
+ std::unique_ptr<TableProperties[]> dbs_;
888
+ std::unique_ptr<uint64_t[]> table_;
889
+ uint64_t process_count_ = 0;
890
+ uint64_t session_count_ = 0;
891
+ uint64_t collisions_ = 0;
892
+ uint32_t restart_nfiles_ = 0;
893
+ double multiplier_ = 0.0;
894
+ };
895
+
896
+ int cache_bench_tool(int argc, char** argv) {
897
+ ParseCommandLineFlags(&argc, &argv, true);
898
+
899
+ if (FLAGS_stress_cache_key) {
900
+ // Alternate tool
901
+ StressCacheKey().Run();
902
+ return 0;
903
+ }
904
+
905
+ if (FLAGS_threads <= 0) {
906
+ fprintf(stderr, "threads number <= 0\n");
907
+ exit(1);
908
+ }
909
+
910
+ ROCKSDB_NAMESPACE::CacheBench bench;
911
+ if (FLAGS_populate_cache) {
912
+ bench.PopulateCache();
913
+ printf("Population complete\n");
914
+ printf("----------------------------\n");
915
+ }
916
+ if (bench.Run()) {
917
+ return 0;
918
+ } else {
919
+ return 1;
920
+ }
921
+ } // namespace ROCKSDB_NAMESPACE
922
+ } // namespace ROCKSDB_NAMESPACE
923
+
924
+ #endif // GFLAGS