@nxtedition/rocksdb 5.2.21 → 5.2.28

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 (923) hide show
  1. package/binding.cc +510 -967
  2. package/binding.gyp +78 -72
  3. package/chained-batch.js +1 -2
  4. package/deps/rocksdb/build_version.cc +70 -4
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  6. package/deps/rocksdb/rocksdb/Makefile +459 -469
  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/cmake/modules/CxxFlags.cmake +7 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  37. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  38. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  39. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  40. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  41. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  42. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  43. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  57. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  61. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  64. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  67. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  68. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  69. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  70. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  71. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  72. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  73. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  74. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  75. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  76. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  77. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  78. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  79. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  80. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  81. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  82. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  83. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  103. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  104. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  105. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  106. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  107. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  108. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  110. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  111. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  112. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  113. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  114. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  115. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  116. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  117. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  118. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  119. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  120. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  121. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  122. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  133. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  134. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  135. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  136. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  137. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  138. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  139. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  140. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  141. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  142. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  143. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  144. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  145. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  146. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  147. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  149. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  150. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  151. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  152. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  153. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  154. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  155. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  156. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  157. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  158. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  159. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  160. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  161. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  162. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  163. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  164. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  165. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  166. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  167. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  168. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  169. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  170. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  171. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  172. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  173. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  174. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  175. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  176. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  177. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  178. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  179. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  180. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  181. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  182. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  183. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  184. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  185. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  186. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  187. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  188. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  189. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  190. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  191. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  192. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  193. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  194. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  195. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  196. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  197. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  198. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  199. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  200. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  201. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  202. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  203. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  204. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  205. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  206. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  207. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  208. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  209. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  210. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  211. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  212. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  213. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  214. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  215. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  216. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  217. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  218. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  219. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  220. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  221. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  222. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  224. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  225. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  226. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  227. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  228. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  229. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  230. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  231. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  232. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  233. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  234. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  235. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  236. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  237. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  238. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  239. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  240. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  241. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  242. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  243. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  244. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  245. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  246. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  247. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  248. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  249. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  250. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  251. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  252. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  253. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  254. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  255. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  256. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  257. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  258. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  260. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  261. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  262. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  263. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  264. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  284. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  290. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  291. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  292. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  293. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  294. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  295. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  296. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  297. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  298. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  299. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  300. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  301. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  302. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  303. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  304. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  305. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  306. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  307. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  308. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  309. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  310. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  311. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  312. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  313. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  314. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  315. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  316. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  317. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  318. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  319. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  320. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  321. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  322. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  323. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  324. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  325. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  326. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  327. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  328. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  329. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  330. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  331. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  332. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  333. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  334. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  335. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  336. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  337. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  338. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  339. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  340. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  341. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  342. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  343. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  344. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  345. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  346. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  347. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  349. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  350. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  351. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  353. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  354. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  356. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  358. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  359. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  360. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  362. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  363. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  364. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  365. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  367. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  368. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  369. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  370. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  371. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  372. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  373. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  374. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  375. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  376. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  377. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  378. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  381. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  382. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  383. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  385. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  386. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  388. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  390. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  391. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  392. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  393. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  396. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  397. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  417. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  418. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  419. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  420. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  422. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  423. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  425. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  426. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  427. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  428. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  429. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  430. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  431. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  432. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  433. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  434. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  435. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  436. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  437. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  438. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  439. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  440. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  441. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  442. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  443. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  444. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  445. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  446. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  447. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  448. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  449. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  450. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  451. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  452. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  453. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  454. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  455. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  456. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  457. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  458. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  459. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  460. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  461. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  462. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  463. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  464. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  465. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  466. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  467. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  468. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  469. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  470. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  471. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  472. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  473. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  474. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  475. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  476. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  477. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  478. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  479. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  480. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  481. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  482. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  483. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  484. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  485. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  486. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  487. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  488. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  489. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  490. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  491. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  492. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  493. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  494. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  495. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  496. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  497. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  498. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  499. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  500. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  501. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  502. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  503. package/deps/rocksdb/rocksdb/python.mk +9 -0
  504. package/deps/rocksdb/rocksdb/src.mk +82 -34
  505. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  506. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  507. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  508. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  514. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  515. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  516. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  517. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  518. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  519. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  520. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  521. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  522. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  523. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  524. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  525. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  526. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  527. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  529. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  530. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  531. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  532. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  534. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  535. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  536. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  537. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  538. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  539. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  540. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  541. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  542. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  543. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  544. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  547. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  548. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  549. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  550. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  551. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  552. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  553. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  554. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  555. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  556. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  557. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  558. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  559. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  560. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  561. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  562. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  563. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  564. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  565. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  566. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  567. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  568. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  569. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  570. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  571. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  572. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  573. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  574. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  575. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  576. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  577. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  578. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  579. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  580. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  581. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  582. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  586. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  587. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  588. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  589. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  590. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  591. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  592. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  593. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  594. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  595. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  596. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  597. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  598. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  599. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  600. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  601. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  602. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  603. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  604. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  605. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  606. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  607. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  608. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  609. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  610. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  611. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  612. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  613. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  614. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  615. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  616. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  617. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  618. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  619. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  620. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  621. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  622. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  623. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  624. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  625. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  626. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  627. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  628. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  629. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  630. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  631. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  632. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  633. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  634. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  635. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  636. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  637. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  638. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  639. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  640. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  641. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  642. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  643. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  644. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  645. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  646. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  647. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  648. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  649. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  650. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  651. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  652. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  653. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  654. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  655. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  656. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  657. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  658. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  659. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  660. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  661. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  662. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  663. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  664. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  665. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  666. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  667. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  668. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  669. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  670. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  671. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  672. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  673. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  674. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  675. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  676. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  677. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  678. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  679. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  680. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  681. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  682. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  683. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  684. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  685. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  686. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  687. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  688. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  689. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  690. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  691. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  692. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  693. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  694. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  695. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  696. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  697. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  698. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  699. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  700. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  701. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  702. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  703. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  704. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  705. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  706. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  707. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  708. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  709. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  710. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  711. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  712. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  713. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  714. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  715. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  716. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  717. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  718. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  719. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  720. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  721. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  722. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  723. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  724. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  725. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  726. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  727. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  728. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  729. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  730. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  731. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  732. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  733. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  734. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  741. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  742. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  743. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  744. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  745. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  746. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  747. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  748. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  749. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  750. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  751. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  752. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  753. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  754. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  755. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  756. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  757. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  758. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  759. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  760. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  761. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  762. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  763. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  764. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  765. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  766. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  767. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  768. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  769. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  770. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  771. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  772. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  773. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  774. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  775. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  776. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  777. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  778. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  779. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  780. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  786. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  787. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  788. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  789. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  790. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  791. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  792. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  793. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  794. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  795. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  796. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  797. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  798. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  799. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  802. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  803. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  804. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  805. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  806. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  807. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  808. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  809. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  810. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  811. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  812. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  813. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  814. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  815. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  816. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  817. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  818. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  821. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  822. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  823. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  824. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  825. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  826. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  827. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  828. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  829. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  830. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  831. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  832. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  833. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  834. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  835. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  836. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  837. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  838. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  839. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  840. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  841. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  842. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  843. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  844. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  845. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  846. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  847. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  848. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  849. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  850. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  851. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  852. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  853. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  854. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  855. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  856. package/deps/rocksdb/rocksdb.gyp +425 -446
  857. package/index.js +5 -87
  858. package/package-lock.json +23687 -0
  859. package/package.json +8 -9
  860. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  861. package/prebuilds/darwin-x64/node.napi.node +0 -0
  862. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  863. package/deps/rocksdb/rocksdb/README.md +0 -32
  864. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  865. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  866. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  867. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  868. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  869. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  870. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  871. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  872. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  873. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  874. package/deps/rocksdb/rocksdb/port/README +0 -10
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  905. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  906. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  907. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  908. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  909. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  910. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  911. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  912. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  913. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  914. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  915. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  916. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  917. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  918. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  919. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  920. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  921. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  922. package/deps/snappy/snappy-1.1.7/README.md +0 -149
  923. 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