@nxtedition/rocksdb 5.2.21 → 5.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -7,12 +7,30 @@
7
7
  // Use of this source code is governed by a BSD-style license that can be
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
  #include <cstdlib>
10
+ #include <functional>
11
+ #include <memory>
12
+ #include <unordered_set>
10
13
 
14
+ #include "cache/cache_entry_roles.h"
15
+ #include "cache/cache_key.h"
11
16
  #include "cache/lru_cache.h"
17
+ #include "db/column_family.h"
18
+ #include "db/db_impl/db_impl.h"
12
19
  #include "db/db_test_util.h"
20
+ #include "env/unique_id_gen.h"
13
21
  #include "port/stack_trace.h"
22
+ #include "rocksdb/persistent_cache.h"
23
+ #include "rocksdb/statistics.h"
24
+ #include "rocksdb/table.h"
25
+ #include "rocksdb/table_properties.h"
26
+ #include "table/block_based/block_based_table_reader.h"
27
+ #include "table/unique_id_impl.h"
14
28
  #include "util/compression.h"
29
+ #include "util/defer.h"
30
+ #include "util/hash.h"
31
+ #include "util/math.h"
15
32
  #include "util/random.h"
33
+ #include "utilities/fault_injection_fs.h"
16
34
 
17
35
  namespace ROCKSDB_NAMESPACE {
18
36
 
@@ -35,7 +53,7 @@ class DBBlockCacheTest : public DBTestBase {
35
53
  const size_t kValueSize = 100;
36
54
 
37
55
  DBBlockCacheTest()
38
- : DBTestBase("/db_block_cache_test", /*env_do_fsync=*/true) {}
56
+ : DBTestBase("db_block_cache_test", /*env_do_fsync=*/true) {}
39
57
 
40
58
  BlockBasedTableOptions GetTableOptions() {
41
59
  BlockBasedTableOptions table_options;
@@ -147,6 +165,19 @@ class DBBlockCacheTest : public DBTestBase {
147
165
  compressed_insert_count_ = new_insert_count;
148
166
  compressed_failure_count_ = new_failure_count;
149
167
  }
168
+
169
+ #ifndef ROCKSDB_LITE
170
+ const std::array<size_t, kNumCacheEntryRoles> GetCacheEntryRoleCountsBg() {
171
+ // Verify in cache entry role stats
172
+ ColumnFamilyHandleImpl* cfh =
173
+ static_cast<ColumnFamilyHandleImpl*>(dbfull()->DefaultColumnFamily());
174
+ InternalStats* internal_stats_ptr = cfh->cfd()->internal_stats();
175
+ InternalStats::CacheEntryRoleStats stats;
176
+ internal_stats_ptr->TEST_GetCacheEntryRoleStats(&stats,
177
+ /*foreground=*/false);
178
+ return stats.entry_counts;
179
+ }
180
+ #endif // ROCKSDB_LITE
150
181
  };
151
182
 
152
183
  TEST_F(DBBlockCacheTest, IteratorBlockCacheUsage) {
@@ -156,7 +187,13 @@ TEST_F(DBBlockCacheTest, IteratorBlockCacheUsage) {
156
187
  auto options = GetOptions(table_options);
157
188
  InitTable(options);
158
189
 
159
- std::shared_ptr<Cache> cache = NewLRUCache(0, 0, false);
190
+ LRUCacheOptions co;
191
+ co.capacity = 0;
192
+ co.num_shard_bits = 0;
193
+ co.strict_capacity_limit = false;
194
+ // Needed not to count entry stats collector
195
+ co.metadata_charge_policy = kDontChargeCacheMetadata;
196
+ std::shared_ptr<Cache> cache = NewLRUCache(co);
160
197
  table_options.block_cache = cache;
161
198
  options.table_factory.reset(NewBlockBasedTableFactory(table_options));
162
199
  Reopen(options);
@@ -180,7 +217,13 @@ TEST_F(DBBlockCacheTest, TestWithoutCompressedBlockCache) {
180
217
  auto options = GetOptions(table_options);
181
218
  InitTable(options);
182
219
 
183
- std::shared_ptr<Cache> cache = NewLRUCache(0, 0, false);
220
+ LRUCacheOptions co;
221
+ co.capacity = 0;
222
+ co.num_shard_bits = 0;
223
+ co.strict_capacity_limit = false;
224
+ // Needed not to count entry stats collector
225
+ co.metadata_charge_policy = kDontChargeCacheMetadata;
226
+ std::shared_ptr<Cache> cache = NewLRUCache(co);
184
227
  table_options.block_cache = cache;
185
228
  options.table_factory.reset(NewBlockBasedTableFactory(table_options));
186
229
  Reopen(options);
@@ -228,34 +271,54 @@ TEST_F(DBBlockCacheTest, TestWithoutCompressedBlockCache) {
228
271
 
229
272
  #ifdef SNAPPY
230
273
  TEST_F(DBBlockCacheTest, TestWithCompressedBlockCache) {
231
- ReadOptions read_options;
232
- auto table_options = GetTableOptions();
233
- auto options = GetOptions(table_options);
274
+ Options options = CurrentOptions();
275
+ options.create_if_missing = true;
276
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
277
+
278
+ BlockBasedTableOptions table_options;
279
+ table_options.no_block_cache = true;
280
+ table_options.block_cache_compressed = nullptr;
281
+ table_options.block_size = 1;
282
+ table_options.filter_policy.reset(NewBloomFilterPolicy(20));
283
+ table_options.cache_index_and_filter_blocks = false;
284
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
234
285
  options.compression = CompressionType::kSnappyCompression;
235
- InitTable(options);
236
286
 
237
- std::shared_ptr<Cache> cache = NewLRUCache(0, 0, false);
287
+ DestroyAndReopen(options);
288
+
289
+ std::string value(kValueSize, 'a');
290
+ for (size_t i = 0; i < kNumBlocks; i++) {
291
+ ASSERT_OK(Put(ToString(i), value));
292
+ ASSERT_OK(Flush());
293
+ }
294
+
295
+ ReadOptions read_options;
238
296
  std::shared_ptr<Cache> compressed_cache = NewLRUCache(1 << 25, 0, false);
297
+ LRUCacheOptions co;
298
+ co.capacity = 0;
299
+ co.num_shard_bits = 0;
300
+ co.strict_capacity_limit = false;
301
+ // Needed not to count entry stats collector
302
+ co.metadata_charge_policy = kDontChargeCacheMetadata;
303
+ std::shared_ptr<Cache> cache = NewLRUCache(co);
239
304
  table_options.block_cache = cache;
305
+ table_options.no_block_cache = false;
240
306
  table_options.block_cache_compressed = compressed_cache;
307
+ table_options.max_auto_readahead_size = 0;
308
+ table_options.cache_index_and_filter_blocks = false;
241
309
  options.table_factory.reset(NewBlockBasedTableFactory(table_options));
242
310
  Reopen(options);
243
311
  RecordCacheCounters(options);
244
312
 
245
- std::vector<std::unique_ptr<Iterator>> iterators(kNumBlocks - 1);
246
- Iterator* iter = nullptr;
247
-
248
313
  // Load blocks into cache.
249
- for (size_t i = 0; i + 1 < kNumBlocks; i++) {
250
- iter = db_->NewIterator(read_options);
251
- iter->Seek(ToString(i));
252
- ASSERT_OK(iter->status());
314
+ for (size_t i = 0; i < kNumBlocks - 1; i++) {
315
+ ASSERT_EQ(value, Get(ToString(i)));
253
316
  CheckCacheCounters(options, 1, 0, 1, 0);
254
317
  CheckCompressedCacheCounters(options, 1, 0, 1, 0);
255
- iterators[i].reset(iter);
256
318
  }
319
+
257
320
  size_t usage = cache->GetUsage();
258
- ASSERT_LT(0, usage);
321
+ ASSERT_EQ(0, usage);
259
322
  ASSERT_EQ(usage, cache->GetPinnedUsage());
260
323
  size_t compressed_usage = compressed_cache->GetUsage();
261
324
  ASSERT_LT(0, compressed_usage);
@@ -267,24 +330,158 @@ TEST_F(DBBlockCacheTest, TestWithCompressedBlockCache) {
267
330
  cache->SetCapacity(usage);
268
331
  cache->SetStrictCapacityLimit(true);
269
332
  ASSERT_EQ(usage, cache->GetPinnedUsage());
270
- iter = db_->NewIterator(read_options);
271
- iter->Seek(ToString(kNumBlocks - 1));
272
- ASSERT_TRUE(iter->status().IsIncomplete());
333
+
334
+ // Load last key block.
335
+ ASSERT_EQ("Result incomplete: Insert failed due to LRU cache being full.",
336
+ Get(ToString(kNumBlocks - 1)));
337
+ // Failure will also record the miss counter.
273
338
  CheckCacheCounters(options, 1, 0, 0, 1);
274
339
  CheckCompressedCacheCounters(options, 1, 0, 1, 0);
275
- delete iter;
276
- iter = nullptr;
277
340
 
278
341
  // Clear strict capacity limit flag. This time we shall hit compressed block
279
- // cache.
342
+ // cache and load into block cache.
280
343
  cache->SetStrictCapacityLimit(false);
281
- iter = db_->NewIterator(read_options);
282
- iter->Seek(ToString(kNumBlocks - 1));
283
- ASSERT_OK(iter->status());
344
+ // Load last key block.
345
+ ASSERT_EQ(value, Get(ToString(kNumBlocks - 1)));
284
346
  CheckCacheCounters(options, 1, 0, 1, 0);
285
347
  CheckCompressedCacheCounters(options, 0, 1, 0, 0);
286
- delete iter;
287
- iter = nullptr;
348
+ }
349
+
350
+ namespace {
351
+ class PersistentCacheFromCache : public PersistentCache {
352
+ public:
353
+ PersistentCacheFromCache(std::shared_ptr<Cache> cache, bool read_only)
354
+ : cache_(cache), read_only_(read_only) {}
355
+
356
+ Status Insert(const Slice& key, const char* data,
357
+ const size_t size) override {
358
+ if (read_only_) {
359
+ return Status::NotSupported();
360
+ }
361
+ std::unique_ptr<char[]> copy{new char[size]};
362
+ std::copy_n(data, size, copy.get());
363
+ Status s = cache_->Insert(
364
+ key, copy.get(), size,
365
+ GetCacheEntryDeleterForRole<char[], CacheEntryRole::kMisc>());
366
+ if (s.ok()) {
367
+ copy.release();
368
+ }
369
+ return s;
370
+ }
371
+
372
+ Status Lookup(const Slice& key, std::unique_ptr<char[]>* data,
373
+ size_t* size) override {
374
+ auto handle = cache_->Lookup(key);
375
+ if (handle) {
376
+ char* ptr = static_cast<char*>(cache_->Value(handle));
377
+ *size = cache_->GetCharge(handle);
378
+ data->reset(new char[*size]);
379
+ std::copy_n(ptr, *size, data->get());
380
+ cache_->Release(handle);
381
+ return Status::OK();
382
+ } else {
383
+ return Status::NotFound();
384
+ }
385
+ }
386
+
387
+ bool IsCompressed() override { return false; }
388
+
389
+ StatsType Stats() override { return StatsType(); }
390
+
391
+ std::string GetPrintableOptions() const override { return ""; }
392
+
393
+ uint64_t NewId() override { return cache_->NewId(); }
394
+
395
+ private:
396
+ std::shared_ptr<Cache> cache_;
397
+ bool read_only_;
398
+ };
399
+
400
+ class ReadOnlyCacheWrapper : public CacheWrapper {
401
+ using CacheWrapper::CacheWrapper;
402
+
403
+ using Cache::Insert;
404
+ Status Insert(const Slice& /*key*/, void* /*value*/, size_t /*charge*/,
405
+ void (*)(const Slice& key, void* value) /*deleter*/,
406
+ Handle** /*handle*/, Priority /*priority*/) override {
407
+ return Status::NotSupported();
408
+ }
409
+ };
410
+
411
+ } // namespace
412
+
413
+ TEST_F(DBBlockCacheTest, TestWithSameCompressed) {
414
+ auto table_options = GetTableOptions();
415
+ auto options = GetOptions(table_options);
416
+ InitTable(options);
417
+
418
+ std::shared_ptr<Cache> rw_cache{NewLRUCache(1000000)};
419
+ std::shared_ptr<PersistentCacheFromCache> rw_pcache{
420
+ new PersistentCacheFromCache(rw_cache, /*read_only*/ false)};
421
+ // Exercise some obscure behavior with read-only wrappers
422
+ std::shared_ptr<Cache> ro_cache{new ReadOnlyCacheWrapper(rw_cache)};
423
+ std::shared_ptr<PersistentCacheFromCache> ro_pcache{
424
+ new PersistentCacheFromCache(rw_cache, /*read_only*/ true)};
425
+
426
+ // Simple same pointer
427
+ table_options.block_cache = rw_cache;
428
+ table_options.block_cache_compressed = rw_cache;
429
+ table_options.persistent_cache.reset();
430
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
431
+ ASSERT_EQ(TryReopen(options).ToString(),
432
+ "Invalid argument: block_cache same as block_cache_compressed not "
433
+ "currently supported, and would be bad for performance anyway");
434
+
435
+ // Other cases
436
+ table_options.block_cache = ro_cache;
437
+ table_options.block_cache_compressed = rw_cache;
438
+ table_options.persistent_cache.reset();
439
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
440
+ ASSERT_EQ(TryReopen(options).ToString(),
441
+ "Invalid argument: block_cache and block_cache_compressed share "
442
+ "the same key space, which is not supported");
443
+
444
+ table_options.block_cache = rw_cache;
445
+ table_options.block_cache_compressed = ro_cache;
446
+ table_options.persistent_cache.reset();
447
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
448
+ ASSERT_EQ(TryReopen(options).ToString(),
449
+ "Invalid argument: block_cache_compressed and block_cache share "
450
+ "the same key space, which is not supported");
451
+
452
+ table_options.block_cache = ro_cache;
453
+ table_options.block_cache_compressed.reset();
454
+ table_options.persistent_cache = rw_pcache;
455
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
456
+ ASSERT_EQ(TryReopen(options).ToString(),
457
+ "Invalid argument: block_cache and persistent_cache share the same "
458
+ "key space, which is not supported");
459
+
460
+ table_options.block_cache = rw_cache;
461
+ table_options.block_cache_compressed.reset();
462
+ table_options.persistent_cache = ro_pcache;
463
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
464
+ ASSERT_EQ(TryReopen(options).ToString(),
465
+ "Invalid argument: persistent_cache and block_cache share the same "
466
+ "key space, which is not supported");
467
+
468
+ table_options.block_cache.reset();
469
+ table_options.no_block_cache = true;
470
+ table_options.block_cache_compressed = ro_cache;
471
+ table_options.persistent_cache = rw_pcache;
472
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
473
+ ASSERT_EQ(TryReopen(options).ToString(),
474
+ "Invalid argument: block_cache_compressed and persistent_cache "
475
+ "share the same key space, which is not supported");
476
+
477
+ table_options.block_cache.reset();
478
+ table_options.no_block_cache = true;
479
+ table_options.block_cache_compressed = rw_cache;
480
+ table_options.persistent_cache = ro_pcache;
481
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
482
+ ASSERT_EQ(TryReopen(options).ToString(),
483
+ "Invalid argument: persistent_cache and block_cache_compressed "
484
+ "share the same key space, which is not supported");
288
485
  }
289
486
  #endif // SNAPPY
290
487
 
@@ -432,6 +629,183 @@ TEST_F(DBBlockCacheTest, IndexAndFilterBlocksStats) {
432
629
  // filter_bytes_insert);
433
630
  }
434
631
 
632
+ #if (defined OS_LINUX || defined OS_WIN)
633
+ TEST_F(DBBlockCacheTest, WarmCacheWithDataBlocksDuringFlush) {
634
+ Options options = CurrentOptions();
635
+ options.create_if_missing = true;
636
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
637
+
638
+ BlockBasedTableOptions table_options;
639
+ table_options.block_cache = NewLRUCache(1 << 25, 0, false);
640
+ table_options.cache_index_and_filter_blocks = false;
641
+ table_options.prepopulate_block_cache =
642
+ BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly;
643
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
644
+ DestroyAndReopen(options);
645
+
646
+ std::string value(kValueSize, 'a');
647
+ for (size_t i = 1; i <= kNumBlocks; i++) {
648
+ ASSERT_OK(Put(ToString(i), value));
649
+ ASSERT_OK(Flush());
650
+ ASSERT_EQ(i, options.statistics->getTickerCount(BLOCK_CACHE_DATA_ADD));
651
+ ASSERT_EQ(value, Get(ToString(i)));
652
+ ASSERT_EQ(0, options.statistics->getTickerCount(BLOCK_CACHE_DATA_MISS));
653
+ ASSERT_EQ(i, options.statistics->getTickerCount(BLOCK_CACHE_DATA_HIT));
654
+ }
655
+ // Verify compaction not counted
656
+ ASSERT_OK(db_->CompactRange(CompactRangeOptions(), /*begin=*/nullptr,
657
+ /*end=*/nullptr));
658
+ EXPECT_EQ(kNumBlocks,
659
+ options.statistics->getTickerCount(BLOCK_CACHE_DATA_ADD));
660
+ }
661
+
662
+ // This test cache data, index and filter blocks during flush.
663
+ class DBBlockCacheTest1 : public DBTestBase,
664
+ public ::testing::WithParamInterface<uint32_t> {
665
+ public:
666
+ const size_t kNumBlocks = 10;
667
+ const size_t kValueSize = 100;
668
+ DBBlockCacheTest1() : DBTestBase("db_block_cache_test1", true) {}
669
+ };
670
+
671
+ INSTANTIATE_TEST_CASE_P(DBBlockCacheTest1, DBBlockCacheTest1,
672
+ ::testing::Values(1, 2, 3));
673
+
674
+ TEST_P(DBBlockCacheTest1, WarmCacheWithBlocksDuringFlush) {
675
+ Options options = CurrentOptions();
676
+ options.create_if_missing = true;
677
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
678
+
679
+ BlockBasedTableOptions table_options;
680
+ table_options.block_cache = NewLRUCache(1 << 25, 0, false);
681
+
682
+ uint32_t filter_type = GetParam();
683
+ switch (filter_type) {
684
+ case 1: // partition_filter
685
+ table_options.partition_filters = true;
686
+ table_options.index_type =
687
+ BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
688
+ table_options.filter_policy.reset(NewBloomFilterPolicy(10, false));
689
+ break;
690
+ case 2: // block-based filter
691
+ table_options.filter_policy.reset(NewBloomFilterPolicy(10, true));
692
+ break;
693
+ case 3: // full filter
694
+ table_options.filter_policy.reset(NewBloomFilterPolicy(10, false));
695
+ break;
696
+ default:
697
+ assert(false);
698
+ }
699
+
700
+ table_options.cache_index_and_filter_blocks = true;
701
+ table_options.prepopulate_block_cache =
702
+ BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly;
703
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
704
+ DestroyAndReopen(options);
705
+
706
+ std::string value(kValueSize, 'a');
707
+ for (size_t i = 1; i <= kNumBlocks; i++) {
708
+ ASSERT_OK(Put(ToString(i), value));
709
+ ASSERT_OK(Flush());
710
+ ASSERT_EQ(i, options.statistics->getTickerCount(BLOCK_CACHE_DATA_ADD));
711
+ if (filter_type == 1) {
712
+ ASSERT_EQ(2 * i,
713
+ options.statistics->getTickerCount(BLOCK_CACHE_INDEX_ADD));
714
+ ASSERT_EQ(2 * i,
715
+ options.statistics->getTickerCount(BLOCK_CACHE_FILTER_ADD));
716
+ } else {
717
+ ASSERT_EQ(i, options.statistics->getTickerCount(BLOCK_CACHE_INDEX_ADD));
718
+ ASSERT_EQ(i, options.statistics->getTickerCount(BLOCK_CACHE_FILTER_ADD));
719
+ }
720
+ ASSERT_EQ(value, Get(ToString(i)));
721
+
722
+ ASSERT_EQ(0, options.statistics->getTickerCount(BLOCK_CACHE_DATA_MISS));
723
+ ASSERT_EQ(i, options.statistics->getTickerCount(BLOCK_CACHE_DATA_HIT));
724
+
725
+ ASSERT_EQ(0, options.statistics->getTickerCount(BLOCK_CACHE_INDEX_MISS));
726
+ ASSERT_EQ(i * 3, options.statistics->getTickerCount(BLOCK_CACHE_INDEX_HIT));
727
+ if (filter_type == 1) {
728
+ ASSERT_EQ(i * 3,
729
+ options.statistics->getTickerCount(BLOCK_CACHE_FILTER_HIT));
730
+ } else {
731
+ ASSERT_EQ(i * 2,
732
+ options.statistics->getTickerCount(BLOCK_CACHE_FILTER_HIT));
733
+ }
734
+ ASSERT_EQ(0, options.statistics->getTickerCount(BLOCK_CACHE_FILTER_MISS));
735
+ }
736
+
737
+ // Verify compaction not counted
738
+ ASSERT_OK(db_->CompactRange(CompactRangeOptions(), /*begin=*/nullptr,
739
+ /*end=*/nullptr));
740
+ EXPECT_EQ(kNumBlocks,
741
+ options.statistics->getTickerCount(BLOCK_CACHE_DATA_ADD));
742
+ // Index and filter blocks are automatically warmed when the new table file
743
+ // is automatically opened at the end of compaction. This is not easily
744
+ // disabled so results in the new index and filter blocks being warmed.
745
+ if (filter_type == 1) {
746
+ EXPECT_EQ(2 * (1 + kNumBlocks),
747
+ options.statistics->getTickerCount(BLOCK_CACHE_INDEX_ADD));
748
+ EXPECT_EQ(2 * (1 + kNumBlocks),
749
+ options.statistics->getTickerCount(BLOCK_CACHE_FILTER_ADD));
750
+ } else {
751
+ EXPECT_EQ(1 + kNumBlocks,
752
+ options.statistics->getTickerCount(BLOCK_CACHE_INDEX_ADD));
753
+ EXPECT_EQ(1 + kNumBlocks,
754
+ options.statistics->getTickerCount(BLOCK_CACHE_FILTER_ADD));
755
+ }
756
+ }
757
+
758
+ TEST_F(DBBlockCacheTest, DynamicallyWarmCacheDuringFlush) {
759
+ Options options = CurrentOptions();
760
+ options.create_if_missing = true;
761
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
762
+
763
+ BlockBasedTableOptions table_options;
764
+ table_options.block_cache = NewLRUCache(1 << 25, 0, false);
765
+ table_options.cache_index_and_filter_blocks = false;
766
+ table_options.prepopulate_block_cache =
767
+ BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly;
768
+
769
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
770
+ DestroyAndReopen(options);
771
+
772
+ std::string value(kValueSize, 'a');
773
+
774
+ for (size_t i = 1; i <= 5; i++) {
775
+ ASSERT_OK(Put(ToString(i), value));
776
+ ASSERT_OK(Flush());
777
+ ASSERT_EQ(1,
778
+ options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_ADD));
779
+
780
+ ASSERT_EQ(value, Get(ToString(i)));
781
+ ASSERT_EQ(0,
782
+ options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_ADD));
783
+ ASSERT_EQ(
784
+ 0, options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_MISS));
785
+ ASSERT_EQ(1,
786
+ options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_HIT));
787
+ }
788
+
789
+ ASSERT_OK(dbfull()->SetOptions(
790
+ {{"block_based_table_factory", "{prepopulate_block_cache=kDisable;}"}}));
791
+
792
+ for (size_t i = 6; i <= kNumBlocks; i++) {
793
+ ASSERT_OK(Put(ToString(i), value));
794
+ ASSERT_OK(Flush());
795
+ ASSERT_EQ(0,
796
+ options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_ADD));
797
+
798
+ ASSERT_EQ(value, Get(ToString(i)));
799
+ ASSERT_EQ(1,
800
+ options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_ADD));
801
+ ASSERT_EQ(
802
+ 1, options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_MISS));
803
+ ASSERT_EQ(0,
804
+ options.statistics->getAndResetTickerCount(BLOCK_CACHE_DATA_HIT));
805
+ }
806
+ }
807
+ #endif
808
+
435
809
  namespace {
436
810
 
437
811
  // A mock cache wraps LRUCache, and record how many entries have been
@@ -446,15 +820,18 @@ class MockCache : public LRUCache {
446
820
  false /*strict_capacity_limit*/, 0.0 /*high_pri_pool_ratio*/) {
447
821
  }
448
822
 
449
- Status Insert(const Slice& key, void* value, size_t charge,
450
- void (*deleter)(const Slice& key, void* value), Handle** handle,
451
- Priority priority) override {
823
+ using ShardedCache::Insert;
824
+
825
+ Status Insert(const Slice& key, void* value,
826
+ const Cache::CacheItemHelper* helper_cb, size_t charge,
827
+ Handle** handle, Priority priority) override {
828
+ DeleterFn delete_cb = helper_cb->del_cb;
452
829
  if (priority == Priority::LOW) {
453
830
  low_pri_insert_count++;
454
831
  } else {
455
832
  high_pri_insert_count++;
456
833
  }
457
- return LRUCache::Insert(key, value, charge, deleter, handle, priority);
834
+ return LRUCache::Insert(key, value, charge, delete_cb, handle, priority);
458
835
  }
459
836
  };
460
837
 
@@ -533,6 +910,7 @@ class LookupLiarCache : public CacheWrapper {
533
910
  explicit LookupLiarCache(std::shared_ptr<Cache> target)
534
911
  : CacheWrapper(std::move(target)) {}
535
912
 
913
+ using Cache::Lookup;
536
914
  Handle* Lookup(const Slice& key, Statistics* stats) override {
537
915
  if (nth_lookup_not_found_ == 1) {
538
916
  nth_lookup_not_found_ = 0;
@@ -887,15 +1265,699 @@ TEST_F(DBBlockCacheTest, CacheCompressionDict) {
887
1265
  }
888
1266
  }
889
1267
 
1268
+ static void ClearCache(Cache* cache) {
1269
+ auto roles = CopyCacheDeleterRoleMap();
1270
+ std::deque<std::string> keys;
1271
+ Cache::ApplyToAllEntriesOptions opts;
1272
+ auto callback = [&](const Slice& key, void* /*value*/, size_t /*charge*/,
1273
+ Cache::DeleterFn deleter) {
1274
+ if (roles.find(deleter) == roles.end()) {
1275
+ // Keep the stats collector
1276
+ return;
1277
+ }
1278
+ keys.push_back(key.ToString());
1279
+ };
1280
+ cache->ApplyToAllEntries(callback, opts);
1281
+ for (auto& k : keys) {
1282
+ cache->Erase(k);
1283
+ }
1284
+ }
1285
+
1286
+ TEST_F(DBBlockCacheTest, CacheEntryRoleStats) {
1287
+ const size_t capacity = size_t{1} << 25;
1288
+ int iterations_tested = 0;
1289
+ for (bool partition : {false, true}) {
1290
+ for (std::shared_ptr<Cache> cache :
1291
+ {NewLRUCache(capacity), NewClockCache(capacity)}) {
1292
+ if (!cache) {
1293
+ // Skip clock cache when not supported
1294
+ continue;
1295
+ }
1296
+ ++iterations_tested;
1297
+
1298
+ Options options = CurrentOptions();
1299
+ SetTimeElapseOnlySleepOnReopen(&options);
1300
+ options.create_if_missing = true;
1301
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
1302
+ options.max_open_files = 13;
1303
+ options.table_cache_numshardbits = 0;
1304
+ // If this wakes up, it could interfere with test
1305
+ options.stats_dump_period_sec = 0;
1306
+
1307
+ BlockBasedTableOptions table_options;
1308
+ table_options.block_cache = cache;
1309
+ table_options.cache_index_and_filter_blocks = true;
1310
+ table_options.filter_policy.reset(NewBloomFilterPolicy(50));
1311
+ if (partition) {
1312
+ table_options.index_type = BlockBasedTableOptions::kTwoLevelIndexSearch;
1313
+ table_options.partition_filters = true;
1314
+ }
1315
+ table_options.metadata_cache_options.top_level_index_pinning =
1316
+ PinningTier::kNone;
1317
+ table_options.metadata_cache_options.partition_pinning =
1318
+ PinningTier::kNone;
1319
+ table_options.metadata_cache_options.unpartitioned_pinning =
1320
+ PinningTier::kNone;
1321
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1322
+ DestroyAndReopen(options);
1323
+
1324
+ // Create a new table.
1325
+ ASSERT_OK(Put("foo", "value"));
1326
+ ASSERT_OK(Put("bar", "value"));
1327
+ ASSERT_OK(Flush());
1328
+
1329
+ ASSERT_OK(Put("zfoo", "value"));
1330
+ ASSERT_OK(Put("zbar", "value"));
1331
+ ASSERT_OK(Flush());
1332
+
1333
+ ASSERT_EQ(2, NumTableFilesAtLevel(0));
1334
+
1335
+ // Fresh cache
1336
+ ClearCache(cache.get());
1337
+
1338
+ std::array<size_t, kNumCacheEntryRoles> expected{};
1339
+ // For CacheEntryStatsCollector
1340
+ expected[static_cast<size_t>(CacheEntryRole::kMisc)] = 1;
1341
+ EXPECT_EQ(expected, GetCacheEntryRoleCountsBg());
1342
+
1343
+ std::array<size_t, kNumCacheEntryRoles> prev_expected = expected;
1344
+
1345
+ // First access only filters
1346
+ ASSERT_EQ("NOT_FOUND", Get("different from any key added"));
1347
+ expected[static_cast<size_t>(CacheEntryRole::kFilterBlock)] += 2;
1348
+ if (partition) {
1349
+ expected[static_cast<size_t>(CacheEntryRole::kFilterMetaBlock)] += 2;
1350
+ }
1351
+ // Within some time window, we will get cached entry stats
1352
+ EXPECT_EQ(prev_expected, GetCacheEntryRoleCountsBg());
1353
+ // Not enough to force a miss
1354
+ env_->MockSleepForSeconds(45);
1355
+ EXPECT_EQ(prev_expected, GetCacheEntryRoleCountsBg());
1356
+ // Enough to force a miss
1357
+ env_->MockSleepForSeconds(601);
1358
+ EXPECT_EQ(expected, GetCacheEntryRoleCountsBg());
1359
+
1360
+ // Now access index and data block
1361
+ ASSERT_EQ("value", Get("foo"));
1362
+ expected[static_cast<size_t>(CacheEntryRole::kIndexBlock)]++;
1363
+ if (partition) {
1364
+ // top-level
1365
+ expected[static_cast<size_t>(CacheEntryRole::kIndexBlock)]++;
1366
+ }
1367
+ expected[static_cast<size_t>(CacheEntryRole::kDataBlock)]++;
1368
+ // Enough to force a miss
1369
+ env_->MockSleepForSeconds(601);
1370
+ // But inject a simulated long scan so that we need a longer
1371
+ // interval to force a miss next time.
1372
+ SyncPoint::GetInstance()->SetCallBack(
1373
+ "CacheEntryStatsCollector::GetStats:AfterApplyToAllEntries",
1374
+ [this](void*) {
1375
+ // To spend no more than 0.2% of time scanning, we would need
1376
+ // interval of at least 10000s
1377
+ env_->MockSleepForSeconds(20);
1378
+ });
1379
+ SyncPoint::GetInstance()->EnableProcessing();
1380
+ EXPECT_EQ(expected, GetCacheEntryRoleCountsBg());
1381
+ prev_expected = expected;
1382
+ SyncPoint::GetInstance()->DisableProcessing();
1383
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1384
+
1385
+ // The same for other file
1386
+ ASSERT_EQ("value", Get("zfoo"));
1387
+ expected[static_cast<size_t>(CacheEntryRole::kIndexBlock)]++;
1388
+ if (partition) {
1389
+ // top-level
1390
+ expected[static_cast<size_t>(CacheEntryRole::kIndexBlock)]++;
1391
+ }
1392
+ expected[static_cast<size_t>(CacheEntryRole::kDataBlock)]++;
1393
+ // Because of the simulated long scan, this is not enough to force
1394
+ // a miss
1395
+ env_->MockSleepForSeconds(601);
1396
+ EXPECT_EQ(prev_expected, GetCacheEntryRoleCountsBg());
1397
+ // But this is enough
1398
+ env_->MockSleepForSeconds(10000);
1399
+ EXPECT_EQ(expected, GetCacheEntryRoleCountsBg());
1400
+ prev_expected = expected;
1401
+
1402
+ // Also check the GetProperty interface
1403
+ std::map<std::string, std::string> values;
1404
+ ASSERT_TRUE(
1405
+ db_->GetMapProperty(DB::Properties::kBlockCacheEntryStats, &values));
1406
+
1407
+ for (size_t i = 0; i < kNumCacheEntryRoles; ++i) {
1408
+ auto role = static_cast<CacheEntryRole>(i);
1409
+ EXPECT_EQ(ToString(expected[i]),
1410
+ values[BlockCacheEntryStatsMapKeys::EntryCount(role)]);
1411
+ }
1412
+
1413
+ // Add one for kWriteBuffer
1414
+ {
1415
+ WriteBufferManager wbm(size_t{1} << 20, cache);
1416
+ wbm.ReserveMem(1024);
1417
+ expected[static_cast<size_t>(CacheEntryRole::kWriteBuffer)]++;
1418
+ // Now we check that the GetProperty interface is more agressive about
1419
+ // re-scanning stats, but not totally aggressive.
1420
+ // Within some time window, we will get cached entry stats
1421
+ env_->MockSleepForSeconds(1);
1422
+ EXPECT_EQ(ToString(prev_expected[static_cast<size_t>(
1423
+ CacheEntryRole::kWriteBuffer)]),
1424
+ values[BlockCacheEntryStatsMapKeys::EntryCount(
1425
+ CacheEntryRole::kWriteBuffer)]);
1426
+ // Not enough for a "background" miss but enough for a "foreground" miss
1427
+ env_->MockSleepForSeconds(45);
1428
+
1429
+ ASSERT_TRUE(db_->GetMapProperty(DB::Properties::kBlockCacheEntryStats,
1430
+ &values));
1431
+ EXPECT_EQ(
1432
+ ToString(
1433
+ expected[static_cast<size_t>(CacheEntryRole::kWriteBuffer)]),
1434
+ values[BlockCacheEntryStatsMapKeys::EntryCount(
1435
+ CacheEntryRole::kWriteBuffer)]);
1436
+ }
1437
+ prev_expected = expected;
1438
+
1439
+ // With collector pinned in cache, we should be able to hit
1440
+ // even if the cache is full
1441
+ ClearCache(cache.get());
1442
+ Cache::Handle* h = nullptr;
1443
+ ASSERT_OK(cache->Insert("Fill-it-up", nullptr, capacity + 1,
1444
+ GetNoopDeleterForRole<CacheEntryRole::kMisc>(),
1445
+ &h, Cache::Priority::HIGH));
1446
+ ASSERT_GT(cache->GetUsage(), cache->GetCapacity());
1447
+ expected = {};
1448
+ // For CacheEntryStatsCollector
1449
+ expected[static_cast<size_t>(CacheEntryRole::kMisc)] = 1;
1450
+ // For Fill-it-up
1451
+ expected[static_cast<size_t>(CacheEntryRole::kMisc)]++;
1452
+ // Still able to hit on saved stats
1453
+ EXPECT_EQ(prev_expected, GetCacheEntryRoleCountsBg());
1454
+ // Enough to force a miss
1455
+ env_->MockSleepForSeconds(1000);
1456
+ EXPECT_EQ(expected, GetCacheEntryRoleCountsBg());
1457
+
1458
+ cache->Release(h);
1459
+
1460
+ // Now we test that the DB mutex is not held during scans, for the ways
1461
+ // we know how to (possibly) trigger them. Without a better good way to
1462
+ // check this, we simply inject an acquire & release of the DB mutex
1463
+ // deep in the stat collection code. If we were already holding the
1464
+ // mutex, that is UB that would at least be found by TSAN.
1465
+ int scan_count = 0;
1466
+ SyncPoint::GetInstance()->SetCallBack(
1467
+ "CacheEntryStatsCollector::GetStats:AfterApplyToAllEntries",
1468
+ [this, &scan_count](void*) {
1469
+ dbfull()->TEST_LockMutex();
1470
+ dbfull()->TEST_UnlockMutex();
1471
+ ++scan_count;
1472
+ });
1473
+ SyncPoint::GetInstance()->EnableProcessing();
1474
+
1475
+ // Different things that might trigger a scan, with mock sleeps to
1476
+ // force a miss.
1477
+ env_->MockSleepForSeconds(10000);
1478
+ dbfull()->DumpStats();
1479
+ ASSERT_EQ(scan_count, 1);
1480
+
1481
+ env_->MockSleepForSeconds(10000);
1482
+ ASSERT_TRUE(
1483
+ db_->GetMapProperty(DB::Properties::kBlockCacheEntryStats, &values));
1484
+ ASSERT_EQ(scan_count, 2);
1485
+
1486
+ env_->MockSleepForSeconds(10000);
1487
+ std::string value_str;
1488
+ ASSERT_TRUE(
1489
+ db_->GetProperty(DB::Properties::kBlockCacheEntryStats, &value_str));
1490
+ ASSERT_EQ(scan_count, 3);
1491
+
1492
+ env_->MockSleepForSeconds(10000);
1493
+ ASSERT_TRUE(db_->GetProperty(DB::Properties::kCFStats, &value_str));
1494
+ // To match historical speed, querying this property no longer triggers
1495
+ // a scan, even if results are old. But periodic dump stats should keep
1496
+ // things reasonably updated.
1497
+ ASSERT_EQ(scan_count, /*unchanged*/ 3);
1498
+
1499
+ SyncPoint::GetInstance()->DisableProcessing();
1500
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1501
+ }
1502
+ EXPECT_GE(iterations_tested, 1);
1503
+ }
1504
+ }
1505
+
890
1506
  #endif // ROCKSDB_LITE
891
1507
 
1508
+ class DBBlockCacheKeyTest
1509
+ : public DBTestBase,
1510
+ public testing::WithParamInterface<std::tuple<bool, bool>> {
1511
+ public:
1512
+ DBBlockCacheKeyTest()
1513
+ : DBTestBase("db_block_cache_test", /*env_do_fsync=*/false) {}
1514
+
1515
+ void SetUp() override {
1516
+ use_compressed_cache_ = std::get<0>(GetParam());
1517
+ exclude_file_numbers_ = std::get<1>(GetParam());
1518
+ }
1519
+
1520
+ bool use_compressed_cache_;
1521
+ bool exclude_file_numbers_;
1522
+ };
1523
+
1524
+ // Disable LinkFile so that we can physically copy a DB using Checkpoint.
1525
+ // Disable file GetUniqueId to enable stable cache keys.
1526
+ class StableCacheKeyTestFS : public FaultInjectionTestFS {
1527
+ public:
1528
+ explicit StableCacheKeyTestFS(const std::shared_ptr<FileSystem>& base)
1529
+ : FaultInjectionTestFS(base) {
1530
+ SetFailGetUniqueId(true);
1531
+ }
1532
+
1533
+ virtual ~StableCacheKeyTestFS() override {}
1534
+
1535
+ IOStatus LinkFile(const std::string&, const std::string&, const IOOptions&,
1536
+ IODebugContext*) override {
1537
+ return IOStatus::NotSupported("Disabled");
1538
+ }
1539
+ };
1540
+
1541
+ TEST_P(DBBlockCacheKeyTest, StableCacheKeys) {
1542
+ std::shared_ptr<StableCacheKeyTestFS> test_fs{
1543
+ new StableCacheKeyTestFS(env_->GetFileSystem())};
1544
+ std::unique_ptr<CompositeEnvWrapper> test_env{
1545
+ new CompositeEnvWrapper(env_, test_fs)};
1546
+
1547
+ Options options = CurrentOptions();
1548
+ options.create_if_missing = true;
1549
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
1550
+ options.env = test_env.get();
1551
+
1552
+ BlockBasedTableOptions table_options;
1553
+
1554
+ int key_count = 0;
1555
+ uint64_t expected_stat = 0;
1556
+
1557
+ std::function<void()> verify_stats;
1558
+ if (use_compressed_cache_) {
1559
+ if (!Snappy_Supported()) {
1560
+ ROCKSDB_GTEST_SKIP("Compressed cache test requires snappy support");
1561
+ return;
1562
+ }
1563
+ options.compression = CompressionType::kSnappyCompression;
1564
+ table_options.no_block_cache = true;
1565
+ table_options.block_cache_compressed = NewLRUCache(1 << 25, 0, false);
1566
+ verify_stats = [&options, &expected_stat] {
1567
+ // One for ordinary SST file and one for external SST file
1568
+ ASSERT_EQ(expected_stat,
1569
+ options.statistics->getTickerCount(BLOCK_CACHE_COMPRESSED_ADD));
1570
+ };
1571
+ } else {
1572
+ table_options.cache_index_and_filter_blocks = true;
1573
+ table_options.block_cache = NewLRUCache(1 << 25, 0, false);
1574
+ verify_stats = [&options, &expected_stat] {
1575
+ ASSERT_EQ(expected_stat,
1576
+ options.statistics->getTickerCount(BLOCK_CACHE_DATA_ADD));
1577
+ ASSERT_EQ(expected_stat,
1578
+ options.statistics->getTickerCount(BLOCK_CACHE_INDEX_ADD));
1579
+ ASSERT_EQ(expected_stat,
1580
+ options.statistics->getTickerCount(BLOCK_CACHE_FILTER_ADD));
1581
+ };
1582
+ }
1583
+
1584
+ table_options.filter_policy.reset(NewBloomFilterPolicy(10, false));
1585
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1586
+ CreateAndReopenWithCF({"koko"}, options);
1587
+
1588
+ if (exclude_file_numbers_) {
1589
+ // Simulate something like old behavior without file numbers in properties.
1590
+ // This is a "control" side of the test that also ensures safely degraded
1591
+ // behavior on old files.
1592
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1593
+ "BlockBasedTableBuilder::BlockBasedTableBuilder:PreSetupBaseCacheKey",
1594
+ [&](void* arg) {
1595
+ TableProperties* props = reinterpret_cast<TableProperties*>(arg);
1596
+ props->orig_file_number = 0;
1597
+ });
1598
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
1599
+ }
1600
+
1601
+ std::function<void()> perform_gets = [&key_count, &expected_stat, this]() {
1602
+ if (exclude_file_numbers_) {
1603
+ // No cache key reuse should happen, because we can't rely on current
1604
+ // file number being stable
1605
+ expected_stat += key_count;
1606
+ } else {
1607
+ // Cache keys should be stable
1608
+ expected_stat = key_count;
1609
+ }
1610
+ for (int i = 0; i < key_count; ++i) {
1611
+ ASSERT_EQ(Get(1, Key(i)), "abc");
1612
+ }
1613
+ };
1614
+
1615
+ // Ordinary SST files with same session id
1616
+ const std::string something_compressible(500U, 'x');
1617
+ for (int i = 0; i < 2; ++i) {
1618
+ ASSERT_OK(Put(1, Key(key_count), "abc"));
1619
+ ASSERT_OK(Put(1, Key(key_count) + "a", something_compressible));
1620
+ ASSERT_OK(Flush(1));
1621
+ ++key_count;
1622
+ }
1623
+
1624
+ #ifndef ROCKSDB_LITE
1625
+ // Save an export of those ordinary SST files for later
1626
+ std::string export_files_dir = dbname_ + "/exported";
1627
+ ExportImportFilesMetaData* metadata_ptr_ = nullptr;
1628
+ Checkpoint* checkpoint;
1629
+ ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
1630
+ ASSERT_OK(checkpoint->ExportColumnFamily(handles_[1], export_files_dir,
1631
+ &metadata_ptr_));
1632
+ ASSERT_NE(metadata_ptr_, nullptr);
1633
+ delete checkpoint;
1634
+ checkpoint = nullptr;
1635
+
1636
+ // External SST files with same session id
1637
+ SstFileWriter sst_file_writer(EnvOptions(), options);
1638
+ std::vector<std::string> external;
1639
+ for (int i = 0; i < 2; ++i) {
1640
+ std::string f = dbname_ + "/external" + ToString(i) + ".sst";
1641
+ external.push_back(f);
1642
+ ASSERT_OK(sst_file_writer.Open(f));
1643
+ ASSERT_OK(sst_file_writer.Put(Key(key_count), "abc"));
1644
+ ASSERT_OK(
1645
+ sst_file_writer.Put(Key(key_count) + "a", something_compressible));
1646
+ ++key_count;
1647
+ ExternalSstFileInfo external_info;
1648
+ ASSERT_OK(sst_file_writer.Finish(&external_info));
1649
+ IngestExternalFileOptions ingest_opts;
1650
+ ASSERT_OK(db_->IngestExternalFile(handles_[1], {f}, ingest_opts));
1651
+ }
1652
+
1653
+ if (exclude_file_numbers_) {
1654
+ // FIXME(peterd): figure out where these extra ADDs are coming from
1655
+ options.statistics->recordTick(BLOCK_CACHE_COMPRESSED_ADD,
1656
+ uint64_t{0} - uint64_t{2});
1657
+ }
1658
+ #endif
1659
+
1660
+ perform_gets();
1661
+ verify_stats();
1662
+
1663
+ // Make sure we can cache hit after re-open
1664
+ ReopenWithColumnFamilies({"default", "koko"}, options);
1665
+
1666
+ perform_gets();
1667
+ verify_stats();
1668
+
1669
+ // Make sure we can cache hit even on a full copy of the DB. Using
1670
+ // StableCacheKeyTestFS, Checkpoint will resort to full copy not hard link.
1671
+ // (Checkpoint not available in LITE mode to test this.)
1672
+ #ifndef ROCKSDB_LITE
1673
+ auto db_copy_name = dbname_ + "-copy";
1674
+ ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
1675
+ ASSERT_OK(checkpoint->CreateCheckpoint(db_copy_name));
1676
+ delete checkpoint;
1677
+
1678
+ Close();
1679
+ Destroy(options);
1680
+
1681
+ // Switch to the DB copy
1682
+ SaveAndRestore<std::string> save_dbname(&dbname_, db_copy_name);
1683
+ ReopenWithColumnFamilies({"default", "koko"}, options);
1684
+
1685
+ perform_gets();
1686
+ verify_stats();
1687
+
1688
+ // And ensure that re-importing + ingesting the same files into a
1689
+ // different DB uses same cache keys
1690
+ DestroyAndReopen(options);
1691
+
1692
+ ColumnFamilyHandle* cfh = nullptr;
1693
+ ASSERT_OK(db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo",
1694
+ ImportColumnFamilyOptions(),
1695
+ *metadata_ptr_, &cfh));
1696
+ ASSERT_NE(cfh, nullptr);
1697
+ delete cfh;
1698
+ cfh = nullptr;
1699
+ delete metadata_ptr_;
1700
+ metadata_ptr_ = nullptr;
1701
+
1702
+ DestroyDB(export_files_dir, options);
1703
+
1704
+ ReopenWithColumnFamilies({"default", "yoyo"}, options);
1705
+
1706
+ IngestExternalFileOptions ingest_opts;
1707
+ ASSERT_OK(db_->IngestExternalFile(handles_[1], {external}, ingest_opts));
1708
+
1709
+ perform_gets();
1710
+ verify_stats();
1711
+ #endif // !ROCKSDB_LITE
1712
+
1713
+ Close();
1714
+ Destroy(options);
1715
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1716
+ }
1717
+
1718
+ class CacheKeyTest : public testing::Test {
1719
+ public:
1720
+ void SetupStableBase() {
1721
+ // Like SemiStructuredUniqueIdGen::GenerateNext
1722
+ tp_.db_session_id = EncodeSessionId(base_session_upper_,
1723
+ base_session_lower_ ^ session_counter_);
1724
+ tp_.db_id = ToString(db_id_);
1725
+ tp_.orig_file_number = file_number_;
1726
+ bool is_stable;
1727
+ std::string cur_session_id = ""; // ignored
1728
+ uint64_t cur_file_number = 42; // ignored
1729
+ BlockBasedTable::SetupBaseCacheKey(&tp_, cur_session_id, cur_file_number,
1730
+ file_size_, &base_cache_key_,
1731
+ &is_stable);
1732
+ ASSERT_TRUE(is_stable);
1733
+ }
1734
+ CacheKey WithOffset(uint64_t offset) {
1735
+ return BlockBasedTable::GetCacheKey(base_cache_key_,
1736
+ BlockHandle(offset, /*size*/ 5));
1737
+ }
1738
+
1739
+ protected:
1740
+ OffsetableCacheKey base_cache_key_;
1741
+ TableProperties tp_;
1742
+ uint64_t file_size_ = 0;
1743
+ uint64_t base_session_upper_ = 0;
1744
+ uint64_t base_session_lower_ = 0;
1745
+ uint64_t session_counter_ = 0;
1746
+ uint64_t file_number_ = 0;
1747
+ uint64_t db_id_ = 0;
1748
+ };
1749
+
1750
+ namespace {
1751
+ template <typename T>
1752
+ int CountBitsDifferent(const T& t1, const T& t2) {
1753
+ int diff = 0;
1754
+ const uint8_t* p1 = reinterpret_cast<const uint8_t*>(&t1);
1755
+ const uint8_t* p2 = reinterpret_cast<const uint8_t*>(&t2);
1756
+ static_assert(sizeof(*p1) == 1, "Expecting uint8_t byte");
1757
+ for (size_t i = 0; i < sizeof(T); ++i) {
1758
+ diff += BitsSetToOne(p1[i] ^ p2[i]);
1759
+ }
1760
+ return diff;
1761
+ }
1762
+
1763
+ } // namespace
1764
+
1765
+ TEST_F(CacheKeyTest, DBImplSessionIdStructure) {
1766
+ // We have to generate our own session IDs for simulation purposes in other
1767
+ // tests. Here we verify that the DBImpl implementation seems to match
1768
+ // our construction here, by using lowest XORed-in bits for "session
1769
+ // counter."
1770
+ std::string session_id1 = DBImpl::GenerateDbSessionId(/*env*/ nullptr);
1771
+ std::string session_id2 = DBImpl::GenerateDbSessionId(/*env*/ nullptr);
1772
+ uint64_t upper1, upper2, lower1, lower2;
1773
+ ASSERT_OK(DecodeSessionId(session_id1, &upper1, &lower1));
1774
+ ASSERT_OK(DecodeSessionId(session_id2, &upper2, &lower2));
1775
+ // Because generated in same process
1776
+ ASSERT_EQ(upper1, upper2);
1777
+ // Unless we generate > 4 billion session IDs in this process...
1778
+ ASSERT_EQ(Upper32of64(lower1), Upper32of64(lower2));
1779
+ // But they must be different somewhere
1780
+ ASSERT_NE(Lower32of64(lower1), Lower32of64(lower2));
1781
+ }
1782
+
1783
+ TEST_F(CacheKeyTest, StandardEncodingLimit) {
1784
+ base_session_upper_ = 1234;
1785
+ base_session_lower_ = 5678;
1786
+ session_counter_ = 42;
1787
+ file_number_ = 42;
1788
+ db_id_ = 1234;
1789
+
1790
+ file_size_ = 42;
1791
+ SetupStableBase();
1792
+ CacheKey ck1;
1793
+ ASSERT_TRUE(ck1.IsEmpty());
1794
+ ck1 = WithOffset(0);
1795
+ ASSERT_FALSE(ck1.IsEmpty());
1796
+
1797
+ // Should use same encoding
1798
+ file_size_ = BlockBasedTable::kMaxFileSizeStandardEncoding;
1799
+ SetupStableBase();
1800
+ CacheKey ck2 = WithOffset(0);
1801
+ ASSERT_EQ(CountBitsDifferent(ck1, ck2), 0);
1802
+
1803
+ // Should use different encoding
1804
+ ++file_size_;
1805
+ SetupStableBase();
1806
+ CacheKey ck3 = WithOffset(0);
1807
+ ASSERT_GT(CountBitsDifferent(ck2, ck3), 0);
1808
+ }
1809
+
1810
+ TEST_F(CacheKeyTest, Encodings) {
1811
+ // Claim from cache_key.cc:
1812
+ // In fact, if our SST files are all < 4TB (see
1813
+ // BlockBasedTable::kMaxFileSizeStandardEncoding), then SST files generated
1814
+ // in a single process are guaranteed to have unique cache keys, unless/until
1815
+ // number session ids * max file number = 2**86, e.g. 1 trillion DB::Open in
1816
+ // a single process and 64 trillion files generated.
1817
+
1818
+ // We can generalize that. For
1819
+ // * z bits in maximum file size
1820
+ // * n bits in maximum file number
1821
+ // * s bits in maximum session counter
1822
+ // uniqueness is guaranteed at least when all of these hold:
1823
+ // * z + n + s <= 121 (128 - 2 meta + 2 offset trim - (8-1) byte granularity
1824
+ // in encoding)
1825
+ // * n + s <= 86 (encoding limitation)
1826
+ // * s <= 62 (because of 2-bit metadata)
1827
+
1828
+ // We can verify this indirectly by how input bits get into the cache key,
1829
+ // but we have to be mindful that for sufficiently large file sizes,
1830
+ // different encodings might be used. But for cases mixing large and small
1831
+ // files, we have to verify uniqueness between encodings.
1832
+
1833
+ // Going through all combinations would be a little expensive, so we test
1834
+ // only one random "stripe" of the configuration space per run.
1835
+ constexpr uint32_t kStripeBits = 8;
1836
+ constexpr uint32_t kStripeMask = (uint32_t{1} << kStripeBits) - 1;
1837
+
1838
+ // Also cycle through stripes on repeated runs (not thread safe)
1839
+ static uint32_t stripe =
1840
+ static_cast<uint32_t>(std::random_device{}()) & kStripeMask;
1841
+ stripe = (stripe + 1) & kStripeMask;
1842
+
1843
+ fprintf(stderr, "%u\n", stripe);
1844
+
1845
+ // We are going to randomly initialize some values which *should* not affect
1846
+ // result
1847
+ Random64 r{std::random_device{}()};
1848
+
1849
+ int max_num_encodings = 0;
1850
+ uint32_t config_num = 0;
1851
+ uint32_t session_counter_bits, file_number_bits, max_file_size_bits;
1852
+
1853
+ // Inner loop body, used later in a loop over configurations
1854
+ auto TestConfig = [&]() {
1855
+ base_session_upper_ = r.Next();
1856
+ base_session_lower_ = r.Next();
1857
+ session_counter_ = r.Next();
1858
+ if (session_counter_bits < 64) {
1859
+ // Avoid shifting UB
1860
+ session_counter_ = session_counter_ >> 1 >> (63 - session_counter_bits);
1861
+ }
1862
+ file_number_ = r.Next() >> (64 - file_number_bits);
1863
+ // Need two bits set to avoid temporary zero below
1864
+ if (BitsSetToOne(file_number_) < 2) {
1865
+ file_number_ = 3;
1866
+ }
1867
+ db_id_ = r.Next();
1868
+
1869
+ // Work-around clang-analyzer which thinks empty last_base is garbage
1870
+ CacheKey last_base = CacheKey::CreateUniqueForProcessLifetime();
1871
+
1872
+ std::unordered_set<std::string> seen;
1873
+ int num_encodings = 0;
1874
+
1875
+ // Loop over encodings by increasing file size bits
1876
+ for (uint32_t file_size_bits = 1; file_size_bits <= max_file_size_bits;
1877
+ ++file_size_bits) {
1878
+ file_size_ = uint64_t{1} << (file_size_bits - 1);
1879
+ SetupStableBase();
1880
+ CacheKey new_base = WithOffset(0);
1881
+ if (CountBitsDifferent(last_base, new_base) == 0) {
1882
+ // Same as previous encoding
1883
+ continue;
1884
+ }
1885
+
1886
+ // New encoding
1887
+ ++num_encodings;
1888
+ ASSERT_TRUE(seen.insert(new_base.AsSlice().ToString()).second);
1889
+ last_base = new_base;
1890
+ for (uint32_t i = 0; i < file_size_bits; ++i) {
1891
+ CacheKey ck = WithOffset(uint64_t{1} << i);
1892
+ if (i < 2) {
1893
+ // These cases are not relevant and optimized by dropping two
1894
+ // lowest bits because there's always at least 5 bytes between
1895
+ // blocks.
1896
+ ASSERT_EQ(CountBitsDifferent(ck, new_base), 0);
1897
+ } else {
1898
+ // Normal case
1899
+ // 1 bit different from base and never been seen implies the bit
1900
+ // is encoded into cache key without overlapping other structured
1901
+ // data.
1902
+ ASSERT_EQ(CountBitsDifferent(ck, new_base), 1);
1903
+ ASSERT_TRUE(seen.insert(ck.AsSlice().ToString()).second);
1904
+ }
1905
+ }
1906
+ for (uint32_t i = 0; i < session_counter_bits; ++i) {
1907
+ SaveAndRestore<uint64_t> tmp(&session_counter_,
1908
+ session_counter_ ^ (uint64_t{1} << i));
1909
+ SetupStableBase();
1910
+ CacheKey ck = WithOffset(0);
1911
+ ASSERT_EQ(CountBitsDifferent(ck, new_base), 1);
1912
+ ASSERT_TRUE(seen.insert(ck.AsSlice().ToString()).second);
1913
+ }
1914
+ for (uint32_t i = 0; i < file_number_bits; ++i) {
1915
+ SaveAndRestore<uint64_t> tmp(&file_number_,
1916
+ file_number_ ^ (uint64_t{1} << i));
1917
+ SetupStableBase();
1918
+ CacheKey ck = WithOffset(0);
1919
+ ASSERT_EQ(CountBitsDifferent(ck, new_base), 1);
1920
+ ASSERT_TRUE(seen.insert(ck.AsSlice().ToString()).second);
1921
+ }
1922
+ max_num_encodings = std::max(max_num_encodings, num_encodings);
1923
+ }
1924
+ };
1925
+
1926
+ // Loop over configurations and test those in stripe
1927
+ for (session_counter_bits = 0; session_counter_bits <= 62;
1928
+ ++session_counter_bits) {
1929
+ uint32_t max_file_number_bits =
1930
+ std::min(uint32_t{64}, uint32_t{86} - session_counter_bits);
1931
+ // Start with 2 to avoid file_number_ == 0 in testing
1932
+ for (file_number_bits = 2; file_number_bits <= max_file_number_bits;
1933
+ ++file_number_bits) {
1934
+ uint32_t max_max_file_size_bits =
1935
+ std::min(uint32_t{64},
1936
+ uint32_t{121} - file_number_bits - session_counter_bits);
1937
+ for (max_file_size_bits = 1; max_file_size_bits <= max_max_file_size_bits;
1938
+ ++max_file_size_bits) {
1939
+ if ((config_num++ & kStripeMask) == stripe) {
1940
+ TestConfig();
1941
+ }
1942
+ }
1943
+ }
1944
+ }
1945
+
1946
+ // Make sure the current implementation is exercised
1947
+ ASSERT_EQ(max_num_encodings, 4);
1948
+ }
1949
+
1950
+ INSTANTIATE_TEST_CASE_P(DBBlockCacheKeyTest, DBBlockCacheKeyTest,
1951
+ ::testing::Combine(::testing::Bool(),
1952
+ ::testing::Bool()));
1953
+
892
1954
  class DBBlockCachePinningTest
893
1955
  : public DBTestBase,
894
1956
  public testing::WithParamInterface<
895
1957
  std::tuple<bool, PinningTier, PinningTier, PinningTier>> {
896
1958
  public:
897
1959
  DBBlockCachePinningTest()
898
- : DBTestBase("/db_block_cache_test", /*env_do_fsync=*/false) {}
1960
+ : DBTestBase("db_block_cache_test", /*env_do_fsync=*/false) {}
899
1961
 
900
1962
  void SetUp() override {
901
1963
  partition_index_and_filters_ = std::get<0>(GetParam());