@nxtedition/rocksdb 5.2.21 → 5.2.28

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