@nxtedition/rocksdb 8.2.8 → 9.0.1

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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -371,11 +371,12 @@ TEST_F(LRUCacheTest, EntriesWithPriority) {
371
371
 
372
372
  namespace clock_cache {
373
373
 
374
+ template <class ClockCache>
374
375
  class ClockCacheTest : public testing::Test {
375
376
  public:
376
- using Shard = HyperClockCache::Shard;
377
- using Table = HyperClockTable;
378
- using HandleImpl = Shard::HandleImpl;
377
+ using Shard = typename ClockCache::Shard;
378
+ using Table = typename Shard::Table;
379
+ using TableOpts = typename Table::Opts;
379
380
 
380
381
  ClockCacheTest() {}
381
382
  ~ClockCacheTest() override { DeleteShard(); }
@@ -393,8 +394,7 @@ class ClockCacheTest : public testing::Test {
393
394
  shard_ =
394
395
  reinterpret_cast<Shard*>(port::cacheline_aligned_alloc(sizeof(Shard)));
395
396
 
396
- Table::Opts opts;
397
- opts.estimated_value_size = 1;
397
+ TableOpts opts{1 /*value_size*/};
398
398
  new (shard_)
399
399
  Shard(capacity, strict_capacity_limit, kDontChargeCacheMetadata,
400
400
  /*allocator*/ nullptr, &eviction_callback_, &hash_seed_, opts);
@@ -458,43 +458,53 @@ class ClockCacheTest : public testing::Test {
458
458
  uint32_t hash_seed_ = 0;
459
459
  };
460
460
 
461
- TEST_F(ClockCacheTest, Misc) {
462
- NewShard(3);
461
+ using ClockCacheTypes =
462
+ ::testing::Types<AutoHyperClockCache, FixedHyperClockCache>;
463
+ TYPED_TEST_CASE(ClockCacheTest, ClockCacheTypes);
464
+
465
+ TYPED_TEST(ClockCacheTest, Misc) {
466
+ this->NewShard(3);
467
+ // NOTE: templated base class prevents simple naming of inherited members,
468
+ // so lots of `this->`
469
+ auto& shard = *this->shard_;
463
470
 
464
471
  // Key size stuff
465
- EXPECT_OK(InsertWithLen('a', 16));
466
- EXPECT_NOK(InsertWithLen('b', 15));
467
- EXPECT_OK(InsertWithLen('b', 16));
468
- EXPECT_NOK(InsertWithLen('c', 17));
469
- EXPECT_NOK(InsertWithLen('d', 1000));
470
- EXPECT_NOK(InsertWithLen('e', 11));
471
- EXPECT_NOK(InsertWithLen('f', 0));
472
+ EXPECT_OK(this->InsertWithLen('a', 16));
473
+ EXPECT_NOK(this->InsertWithLen('b', 15));
474
+ EXPECT_OK(this->InsertWithLen('b', 16));
475
+ EXPECT_NOK(this->InsertWithLen('c', 17));
476
+ EXPECT_NOK(this->InsertWithLen('d', 1000));
477
+ EXPECT_NOK(this->InsertWithLen('e', 11));
478
+ EXPECT_NOK(this->InsertWithLen('f', 0));
472
479
 
473
480
  // Some of this is motivated by code coverage
474
481
  std::string wrong_size_key(15, 'x');
475
- EXPECT_FALSE(Lookup(wrong_size_key, TestHashedKey('x')));
476
- EXPECT_FALSE(shard_->Ref(nullptr));
477
- EXPECT_FALSE(shard_->Release(nullptr));
478
- shard_->Erase(wrong_size_key, TestHashedKey('x')); // no-op
482
+ EXPECT_FALSE(this->Lookup(wrong_size_key, this->TestHashedKey('x')));
483
+ EXPECT_FALSE(shard.Ref(nullptr));
484
+ EXPECT_FALSE(shard.Release(nullptr));
485
+ shard.Erase(wrong_size_key, this->TestHashedKey('x')); // no-op
479
486
  }
480
487
 
481
- TEST_F(ClockCacheTest, Limits) {
482
- constexpr size_t kCapacity = 3;
483
- NewShard(kCapacity, false /*strict_capacity_limit*/);
488
+ TYPED_TEST(ClockCacheTest, Limits) {
489
+ constexpr size_t kCapacity = 64;
490
+ this->NewShard(kCapacity, false /*strict_capacity_limit*/);
491
+ auto& shard = *this->shard_;
492
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
493
+
484
494
  for (bool strict_capacity_limit : {false, true, false}) {
485
495
  SCOPED_TRACE("strict_capacity_limit = " +
486
496
  std::to_string(strict_capacity_limit));
487
497
 
488
498
  // Also tests switching between strict limit and not
489
- shard_->SetStrictCapacityLimit(strict_capacity_limit);
499
+ shard.SetStrictCapacityLimit(strict_capacity_limit);
490
500
 
491
- UniqueId64x2 hkey = TestHashedKey('x');
501
+ UniqueId64x2 hkey = this->TestHashedKey('x');
492
502
 
493
503
  // Single entry charge beyond capacity
494
504
  {
495
- Status s = shard_->Insert(TestKey(hkey), hkey, nullptr /*value*/,
496
- &kNoopCacheItemHelper, 5 /*charge*/,
497
- nullptr /*handle*/, Cache::Priority::LOW);
505
+ Status s = shard.Insert(this->TestKey(hkey), hkey, nullptr /*value*/,
506
+ &kNoopCacheItemHelper, kCapacity + 2 /*charge*/,
507
+ nullptr /*handle*/, Cache::Priority::LOW);
498
508
  if (strict_capacity_limit) {
499
509
  EXPECT_TRUE(s.IsMemoryLimit());
500
510
  } else {
@@ -505,11 +515,11 @@ TEST_F(ClockCacheTest, Limits) {
505
515
  // Single entry fills capacity
506
516
  {
507
517
  HandleImpl* h;
508
- ASSERT_OK(shard_->Insert(TestKey(hkey), hkey, nullptr /*value*/,
509
- &kNoopCacheItemHelper, 3 /*charge*/, &h,
510
- Cache::Priority::LOW));
518
+ ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, nullptr /*value*/,
519
+ &kNoopCacheItemHelper, kCapacity /*charge*/, &h,
520
+ Cache::Priority::LOW));
511
521
  // Try to insert more
512
- Status s = Insert('a');
522
+ Status s = this->Insert('a');
513
523
  if (strict_capacity_limit) {
514
524
  EXPECT_TRUE(s.IsMemoryLimit());
515
525
  } else {
@@ -517,22 +527,22 @@ TEST_F(ClockCacheTest, Limits) {
517
527
  }
518
528
  // Release entry filling capacity.
519
529
  // Cover useful = false case.
520
- shard_->Release(h, false /*useful*/, false /*erase_if_last_ref*/);
530
+ shard.Release(h, false /*useful*/, false /*erase_if_last_ref*/);
521
531
  }
522
532
 
523
533
  // Insert more than table size can handle to exceed occupancy limit.
524
534
  // (Cleverly using mostly zero-charge entries, but some non-zero to
525
535
  // verify usage tracking on detached entries.)
526
536
  {
527
- size_t n = shard_->GetTableAddressCount() + 1;
537
+ size_t n = kCapacity * 5 + 1;
528
538
  std::unique_ptr<HandleImpl* []> ha { new HandleImpl* [n] {} };
529
539
  Status s;
530
540
  for (size_t i = 0; i < n && s.ok(); ++i) {
531
541
  hkey[1] = i;
532
- s = shard_->Insert(TestKey(hkey), hkey, nullptr /*value*/,
533
- &kNoopCacheItemHelper,
534
- (i + kCapacity < n) ? 0 : 1 /*charge*/, &ha[i],
535
- Cache::Priority::LOW);
542
+ s = shard.Insert(this->TestKey(hkey), hkey, nullptr /*value*/,
543
+ &kNoopCacheItemHelper,
544
+ (i + kCapacity < n) ? 0 : 1 /*charge*/, &ha[i],
545
+ Cache::Priority::LOW);
536
546
  if (i == 0) {
537
547
  EXPECT_OK(s);
538
548
  }
@@ -543,130 +553,133 @@ TEST_F(ClockCacheTest, Limits) {
543
553
  EXPECT_OK(s);
544
554
  }
545
555
  // Same result if not keeping a reference
546
- s = Insert('a');
556
+ s = this->Insert('a');
547
557
  if (strict_capacity_limit) {
548
558
  EXPECT_TRUE(s.IsMemoryLimit());
549
559
  } else {
550
560
  EXPECT_OK(s);
551
561
  }
552
562
 
563
+ EXPECT_EQ(shard.GetOccupancyCount(), shard.GetOccupancyLimit());
564
+
553
565
  // Regardless, we didn't allow table to actually get full
554
- EXPECT_LT(shard_->GetOccupancyCount(), shard_->GetTableAddressCount());
566
+ EXPECT_LT(shard.GetOccupancyCount(), shard.GetTableAddressCount());
555
567
 
556
568
  // Release handles
557
569
  for (size_t i = 0; i < n; ++i) {
558
570
  if (ha[i]) {
559
- shard_->Release(ha[i]);
571
+ shard.Release(ha[i]);
560
572
  }
561
573
  }
562
574
  }
563
575
  }
564
576
  }
565
577
 
566
- TEST_F(ClockCacheTest, ClockEvictionTest) {
578
+ TYPED_TEST(ClockCacheTest, ClockEvictionTest) {
567
579
  for (bool strict_capacity_limit : {false, true}) {
568
580
  SCOPED_TRACE("strict_capacity_limit = " +
569
581
  std::to_string(strict_capacity_limit));
570
582
 
571
- NewShard(6, strict_capacity_limit);
572
- EXPECT_OK(Insert('a', Cache::Priority::BOTTOM));
573
- EXPECT_OK(Insert('b', Cache::Priority::LOW));
574
- EXPECT_OK(Insert('c', Cache::Priority::HIGH));
575
- EXPECT_OK(Insert('d', Cache::Priority::BOTTOM));
576
- EXPECT_OK(Insert('e', Cache::Priority::LOW));
577
- EXPECT_OK(Insert('f', Cache::Priority::HIGH));
578
-
579
- EXPECT_TRUE(Lookup('a', /*use*/ false));
580
- EXPECT_TRUE(Lookup('b', /*use*/ false));
581
- EXPECT_TRUE(Lookup('c', /*use*/ false));
582
- EXPECT_TRUE(Lookup('d', /*use*/ false));
583
- EXPECT_TRUE(Lookup('e', /*use*/ false));
584
- EXPECT_TRUE(Lookup('f', /*use*/ false));
583
+ this->NewShard(6, strict_capacity_limit);
584
+ auto& shard = *this->shard_;
585
+ EXPECT_OK(this->Insert('a', Cache::Priority::BOTTOM));
586
+ EXPECT_OK(this->Insert('b', Cache::Priority::LOW));
587
+ EXPECT_OK(this->Insert('c', Cache::Priority::HIGH));
588
+ EXPECT_OK(this->Insert('d', Cache::Priority::BOTTOM));
589
+ EXPECT_OK(this->Insert('e', Cache::Priority::LOW));
590
+ EXPECT_OK(this->Insert('f', Cache::Priority::HIGH));
591
+
592
+ EXPECT_TRUE(this->Lookup('a', /*use*/ false));
593
+ EXPECT_TRUE(this->Lookup('b', /*use*/ false));
594
+ EXPECT_TRUE(this->Lookup('c', /*use*/ false));
595
+ EXPECT_TRUE(this->Lookup('d', /*use*/ false));
596
+ EXPECT_TRUE(this->Lookup('e', /*use*/ false));
597
+ EXPECT_TRUE(this->Lookup('f', /*use*/ false));
585
598
 
586
599
  // Ensure bottom are evicted first, even if new entries are low
587
- EXPECT_OK(Insert('g', Cache::Priority::LOW));
588
- EXPECT_OK(Insert('h', Cache::Priority::LOW));
589
-
590
- EXPECT_FALSE(Lookup('a', /*use*/ false));
591
- EXPECT_TRUE(Lookup('b', /*use*/ false));
592
- EXPECT_TRUE(Lookup('c', /*use*/ false));
593
- EXPECT_FALSE(Lookup('d', /*use*/ false));
594
- EXPECT_TRUE(Lookup('e', /*use*/ false));
595
- EXPECT_TRUE(Lookup('f', /*use*/ false));
600
+ EXPECT_OK(this->Insert('g', Cache::Priority::LOW));
601
+ EXPECT_OK(this->Insert('h', Cache::Priority::LOW));
602
+
603
+ EXPECT_FALSE(this->Lookup('a', /*use*/ false));
604
+ EXPECT_TRUE(this->Lookup('b', /*use*/ false));
605
+ EXPECT_TRUE(this->Lookup('c', /*use*/ false));
606
+ EXPECT_FALSE(this->Lookup('d', /*use*/ false));
607
+ EXPECT_TRUE(this->Lookup('e', /*use*/ false));
608
+ EXPECT_TRUE(this->Lookup('f', /*use*/ false));
596
609
  // Mark g & h useful
597
- EXPECT_TRUE(Lookup('g', /*use*/ true));
598
- EXPECT_TRUE(Lookup('h', /*use*/ true));
610
+ EXPECT_TRUE(this->Lookup('g', /*use*/ true));
611
+ EXPECT_TRUE(this->Lookup('h', /*use*/ true));
599
612
 
600
613
  // Then old LOW entries
601
- EXPECT_OK(Insert('i', Cache::Priority::LOW));
602
- EXPECT_OK(Insert('j', Cache::Priority::LOW));
614
+ EXPECT_OK(this->Insert('i', Cache::Priority::LOW));
615
+ EXPECT_OK(this->Insert('j', Cache::Priority::LOW));
603
616
 
604
- EXPECT_FALSE(Lookup('b', /*use*/ false));
605
- EXPECT_TRUE(Lookup('c', /*use*/ false));
606
- EXPECT_FALSE(Lookup('e', /*use*/ false));
607
- EXPECT_TRUE(Lookup('f', /*use*/ false));
617
+ EXPECT_FALSE(this->Lookup('b', /*use*/ false));
618
+ EXPECT_TRUE(this->Lookup('c', /*use*/ false));
619
+ EXPECT_FALSE(this->Lookup('e', /*use*/ false));
620
+ EXPECT_TRUE(this->Lookup('f', /*use*/ false));
608
621
  // Mark g & h useful once again
609
- EXPECT_TRUE(Lookup('g', /*use*/ true));
610
- EXPECT_TRUE(Lookup('h', /*use*/ true));
611
- EXPECT_TRUE(Lookup('i', /*use*/ false));
612
- EXPECT_TRUE(Lookup('j', /*use*/ false));
622
+ EXPECT_TRUE(this->Lookup('g', /*use*/ true));
623
+ EXPECT_TRUE(this->Lookup('h', /*use*/ true));
624
+ EXPECT_TRUE(this->Lookup('i', /*use*/ false));
625
+ EXPECT_TRUE(this->Lookup('j', /*use*/ false));
613
626
 
614
627
  // Then old HIGH entries
615
- EXPECT_OK(Insert('k', Cache::Priority::LOW));
616
- EXPECT_OK(Insert('l', Cache::Priority::LOW));
617
-
618
- EXPECT_FALSE(Lookup('c', /*use*/ false));
619
- EXPECT_FALSE(Lookup('f', /*use*/ false));
620
- EXPECT_TRUE(Lookup('g', /*use*/ false));
621
- EXPECT_TRUE(Lookup('h', /*use*/ false));
622
- EXPECT_TRUE(Lookup('i', /*use*/ false));
623
- EXPECT_TRUE(Lookup('j', /*use*/ false));
624
- EXPECT_TRUE(Lookup('k', /*use*/ false));
625
- EXPECT_TRUE(Lookup('l', /*use*/ false));
628
+ EXPECT_OK(this->Insert('k', Cache::Priority::LOW));
629
+ EXPECT_OK(this->Insert('l', Cache::Priority::LOW));
630
+
631
+ EXPECT_FALSE(this->Lookup('c', /*use*/ false));
632
+ EXPECT_FALSE(this->Lookup('f', /*use*/ false));
633
+ EXPECT_TRUE(this->Lookup('g', /*use*/ false));
634
+ EXPECT_TRUE(this->Lookup('h', /*use*/ false));
635
+ EXPECT_TRUE(this->Lookup('i', /*use*/ false));
636
+ EXPECT_TRUE(this->Lookup('j', /*use*/ false));
637
+ EXPECT_TRUE(this->Lookup('k', /*use*/ false));
638
+ EXPECT_TRUE(this->Lookup('l', /*use*/ false));
626
639
 
627
640
  // Then the (roughly) least recently useful
628
- EXPECT_OK(Insert('m', Cache::Priority::HIGH));
629
- EXPECT_OK(Insert('n', Cache::Priority::HIGH));
641
+ EXPECT_OK(this->Insert('m', Cache::Priority::HIGH));
642
+ EXPECT_OK(this->Insert('n', Cache::Priority::HIGH));
630
643
 
631
- EXPECT_TRUE(Lookup('g', /*use*/ false));
632
- EXPECT_TRUE(Lookup('h', /*use*/ false));
633
- EXPECT_FALSE(Lookup('i', /*use*/ false));
634
- EXPECT_FALSE(Lookup('j', /*use*/ false));
635
- EXPECT_TRUE(Lookup('k', /*use*/ false));
636
- EXPECT_TRUE(Lookup('l', /*use*/ false));
644
+ EXPECT_TRUE(this->Lookup('g', /*use*/ false));
645
+ EXPECT_TRUE(this->Lookup('h', /*use*/ false));
646
+ EXPECT_FALSE(this->Lookup('i', /*use*/ false));
647
+ EXPECT_FALSE(this->Lookup('j', /*use*/ false));
648
+ EXPECT_TRUE(this->Lookup('k', /*use*/ false));
649
+ EXPECT_TRUE(this->Lookup('l', /*use*/ false));
637
650
 
638
651
  // Now try changing capacity down
639
- shard_->SetCapacity(4);
652
+ shard.SetCapacity(4);
640
653
  // Insert to ensure evictions happen
641
- EXPECT_OK(Insert('o', Cache::Priority::LOW));
642
- EXPECT_OK(Insert('p', Cache::Priority::LOW));
643
-
644
- EXPECT_FALSE(Lookup('g', /*use*/ false));
645
- EXPECT_FALSE(Lookup('h', /*use*/ false));
646
- EXPECT_FALSE(Lookup('k', /*use*/ false));
647
- EXPECT_FALSE(Lookup('l', /*use*/ false));
648
- EXPECT_TRUE(Lookup('m', /*use*/ false));
649
- EXPECT_TRUE(Lookup('n', /*use*/ false));
650
- EXPECT_TRUE(Lookup('o', /*use*/ false));
651
- EXPECT_TRUE(Lookup('p', /*use*/ false));
654
+ EXPECT_OK(this->Insert('o', Cache::Priority::LOW));
655
+ EXPECT_OK(this->Insert('p', Cache::Priority::LOW));
656
+
657
+ EXPECT_FALSE(this->Lookup('g', /*use*/ false));
658
+ EXPECT_FALSE(this->Lookup('h', /*use*/ false));
659
+ EXPECT_FALSE(this->Lookup('k', /*use*/ false));
660
+ EXPECT_FALSE(this->Lookup('l', /*use*/ false));
661
+ EXPECT_TRUE(this->Lookup('m', /*use*/ false));
662
+ EXPECT_TRUE(this->Lookup('n', /*use*/ false));
663
+ EXPECT_TRUE(this->Lookup('o', /*use*/ false));
664
+ EXPECT_TRUE(this->Lookup('p', /*use*/ false));
652
665
 
653
666
  // Now try changing capacity up
654
- EXPECT_TRUE(Lookup('m', /*use*/ true));
655
- EXPECT_TRUE(Lookup('n', /*use*/ true));
656
- shard_->SetCapacity(6);
657
- EXPECT_OK(Insert('q', Cache::Priority::HIGH));
658
- EXPECT_OK(Insert('r', Cache::Priority::HIGH));
659
- EXPECT_OK(Insert('s', Cache::Priority::HIGH));
660
- EXPECT_OK(Insert('t', Cache::Priority::HIGH));
661
-
662
- EXPECT_FALSE(Lookup('o', /*use*/ false));
663
- EXPECT_FALSE(Lookup('p', /*use*/ false));
664
- EXPECT_TRUE(Lookup('m', /*use*/ false));
665
- EXPECT_TRUE(Lookup('n', /*use*/ false));
666
- EXPECT_TRUE(Lookup('q', /*use*/ false));
667
- EXPECT_TRUE(Lookup('r', /*use*/ false));
668
- EXPECT_TRUE(Lookup('s', /*use*/ false));
669
- EXPECT_TRUE(Lookup('t', /*use*/ false));
667
+ EXPECT_TRUE(this->Lookup('m', /*use*/ true));
668
+ EXPECT_TRUE(this->Lookup('n', /*use*/ true));
669
+ shard.SetCapacity(6);
670
+ EXPECT_OK(this->Insert('q', Cache::Priority::HIGH));
671
+ EXPECT_OK(this->Insert('r', Cache::Priority::HIGH));
672
+ EXPECT_OK(this->Insert('s', Cache::Priority::HIGH));
673
+ EXPECT_OK(this->Insert('t', Cache::Priority::HIGH));
674
+
675
+ EXPECT_FALSE(this->Lookup('o', /*use*/ false));
676
+ EXPECT_FALSE(this->Lookup('p', /*use*/ false));
677
+ EXPECT_TRUE(this->Lookup('m', /*use*/ false));
678
+ EXPECT_TRUE(this->Lookup('n', /*use*/ false));
679
+ EXPECT_TRUE(this->Lookup('q', /*use*/ false));
680
+ EXPECT_TRUE(this->Lookup('r', /*use*/ false));
681
+ EXPECT_TRUE(this->Lookup('s', /*use*/ false));
682
+ EXPECT_TRUE(this->Lookup('t', /*use*/ false));
670
683
  }
671
684
  }
672
685
 
@@ -682,113 +695,178 @@ const Cache::CacheItemHelper kDeleteCounterHelper{
682
695
  } // namespace
683
696
 
684
697
  // Testing calls to CorrectNearOverflow in Release
685
- TEST_F(ClockCacheTest, ClockCounterOverflowTest) {
686
- NewShard(6, /*strict_capacity_limit*/ false);
698
+ TYPED_TEST(ClockCacheTest, ClockCounterOverflowTest) {
699
+ this->NewShard(6, /*strict_capacity_limit*/ false);
700
+ auto& shard = *this->shard_;
701
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
702
+
687
703
  HandleImpl* h;
688
704
  DeleteCounter val;
689
- UniqueId64x2 hkey = TestHashedKey('x');
690
- ASSERT_OK(shard_->Insert(TestKey(hkey), hkey, &val, &kDeleteCounterHelper, 1,
691
- &h, Cache::Priority::HIGH));
705
+ UniqueId64x2 hkey = this->TestHashedKey('x');
706
+ ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, &val, &kDeleteCounterHelper,
707
+ 1, &h, Cache::Priority::HIGH));
692
708
 
693
709
  // Some large number outstanding
694
- shard_->TEST_RefN(h, 123456789);
710
+ shard.TEST_RefN(h, 123456789);
695
711
  // Simulate many lookup/ref + release, plenty to overflow counters
696
712
  for (int i = 0; i < 10000; ++i) {
697
- shard_->TEST_RefN(h, 1234567);
698
- shard_->TEST_ReleaseN(h, 1234567);
713
+ shard.TEST_RefN(h, 1234567);
714
+ shard.TEST_ReleaseN(h, 1234567);
699
715
  }
700
716
  // Mark it invisible (to reach a different CorrectNearOverflow() in Release)
701
- shard_->Erase(TestKey(hkey), hkey);
717
+ shard.Erase(this->TestKey(hkey), hkey);
702
718
  // Simulate many more lookup/ref + release (one-by-one would be too
703
719
  // expensive for unit test)
704
720
  for (int i = 0; i < 10000; ++i) {
705
- shard_->TEST_RefN(h, 1234567);
706
- shard_->TEST_ReleaseN(h, 1234567);
721
+ shard.TEST_RefN(h, 1234567);
722
+ shard.TEST_ReleaseN(h, 1234567);
707
723
  }
708
724
  // Free all but last 1
709
- shard_->TEST_ReleaseN(h, 123456789);
725
+ shard.TEST_ReleaseN(h, 123456789);
710
726
  // Still alive
711
727
  ASSERT_EQ(val.deleted, 0);
712
728
  // Free last ref, which will finalize erasure
713
- shard_->Release(h);
729
+ shard.Release(h);
714
730
  // Deleted
715
731
  ASSERT_EQ(val.deleted, 1);
716
732
  }
717
733
 
734
+ TYPED_TEST(ClockCacheTest, ClockTableFull) {
735
+ // Force clock cache table to fill up (not usually allowed) in order
736
+ // to test full probe sequence that is theoretically possible due to
737
+ // parallel operations
738
+ this->NewShard(6, /*strict_capacity_limit*/ false);
739
+ auto& shard = *this->shard_;
740
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
741
+
742
+ size_t size = shard.GetTableAddressCount();
743
+ ASSERT_LE(size + 3, 256); // for using char keys
744
+ // Modify occupancy and capacity limits to attempt insert on full
745
+ shard.TEST_MutableOccupancyLimit() = size + 100;
746
+ shard.SetCapacity(size + 100);
747
+
748
+ DeleteCounter val;
749
+ std::vector<HandleImpl*> handles;
750
+ // NOTE: the three extra insertions should create standalone entries
751
+ for (size_t i = 0; i < size + 3; ++i) {
752
+ UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i));
753
+ ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, &val,
754
+ &kDeleteCounterHelper, 1, &handles.emplace_back(),
755
+ Cache::Priority::HIGH));
756
+ }
757
+
758
+ for (size_t i = 0; i < size + 3; ++i) {
759
+ UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i));
760
+ HandleImpl* h = shard.Lookup(this->TestKey(hkey), hkey);
761
+ if (i < size) {
762
+ ASSERT_NE(h, nullptr);
763
+ shard.Release(h);
764
+ } else {
765
+ // Standalone entries not visible by lookup
766
+ ASSERT_EQ(h, nullptr);
767
+ }
768
+ }
769
+
770
+ for (size_t i = 0; i < size + 3; ++i) {
771
+ ASSERT_NE(handles[i], nullptr);
772
+ shard.Release(handles[i]);
773
+ if (i < size) {
774
+ // Everything still in cache
775
+ ASSERT_EQ(val.deleted, 0);
776
+ } else {
777
+ // Standalone entries freed on release
778
+ ASSERT_EQ(val.deleted, i + 1 - size);
779
+ }
780
+ }
781
+
782
+ for (size_t i = size + 3; i > 0; --i) {
783
+ UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i - 1));
784
+ shard.Erase(this->TestKey(hkey), hkey);
785
+ if (i - 1 > size) {
786
+ ASSERT_EQ(val.deleted, 3);
787
+ } else {
788
+ ASSERT_EQ(val.deleted, 3 + size - (i - 1));
789
+ }
790
+ }
791
+ }
792
+
718
793
  // This test is mostly to exercise some corner case logic, by forcing two
719
794
  // keys to have the same hash, and more
720
- TEST_F(ClockCacheTest, CollidingInsertEraseTest) {
721
- NewShard(6, /*strict_capacity_limit*/ false);
795
+ TYPED_TEST(ClockCacheTest, CollidingInsertEraseTest) {
796
+ this->NewShard(6, /*strict_capacity_limit*/ false);
797
+ auto& shard = *this->shard_;
798
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
799
+
722
800
  DeleteCounter val;
723
- UniqueId64x2 hkey1 = TestHashedKey('x');
724
- Slice key1 = TestKey(hkey1);
725
- UniqueId64x2 hkey2 = TestHashedKey('y');
726
- Slice key2 = TestKey(hkey2);
727
- UniqueId64x2 hkey3 = TestHashedKey('z');
728
- Slice key3 = TestKey(hkey3);
801
+ UniqueId64x2 hkey1 = this->TestHashedKey('x');
802
+ Slice key1 = this->TestKey(hkey1);
803
+ UniqueId64x2 hkey2 = this->TestHashedKey('y');
804
+ Slice key2 = this->TestKey(hkey2);
805
+ UniqueId64x2 hkey3 = this->TestHashedKey('z');
806
+ Slice key3 = this->TestKey(hkey3);
729
807
  HandleImpl* h1;
730
- ASSERT_OK(shard_->Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, &h1,
731
- Cache::Priority::HIGH));
808
+ ASSERT_OK(shard.Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, &h1,
809
+ Cache::Priority::HIGH));
732
810
  HandleImpl* h2;
733
- ASSERT_OK(shard_->Insert(key2, hkey2, &val, &kDeleteCounterHelper, 1, &h2,
734
- Cache::Priority::HIGH));
811
+ ASSERT_OK(shard.Insert(key2, hkey2, &val, &kDeleteCounterHelper, 1, &h2,
812
+ Cache::Priority::HIGH));
735
813
  HandleImpl* h3;
736
- ASSERT_OK(shard_->Insert(key3, hkey3, &val, &kDeleteCounterHelper, 1, &h3,
737
- Cache::Priority::HIGH));
814
+ ASSERT_OK(shard.Insert(key3, hkey3, &val, &kDeleteCounterHelper, 1, &h3,
815
+ Cache::Priority::HIGH));
738
816
 
739
817
  // Can repeatedly lookup+release despite the hash collision
740
818
  HandleImpl* tmp_h;
741
819
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
742
- tmp_h = shard_->Lookup(key1, hkey1);
820
+ tmp_h = shard.Lookup(key1, hkey1);
743
821
  ASSERT_EQ(h1, tmp_h);
744
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
822
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
745
823
 
746
- tmp_h = shard_->Lookup(key2, hkey2);
824
+ tmp_h = shard.Lookup(key2, hkey2);
747
825
  ASSERT_EQ(h2, tmp_h);
748
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
826
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
749
827
 
750
- tmp_h = shard_->Lookup(key3, hkey3);
828
+ tmp_h = shard.Lookup(key3, hkey3);
751
829
  ASSERT_EQ(h3, tmp_h);
752
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
830
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
753
831
  }
754
832
 
755
833
  // Make h1 invisible
756
- shard_->Erase(key1, hkey1);
834
+ shard.Erase(key1, hkey1);
757
835
  // Redundant erase
758
- shard_->Erase(key1, hkey1);
836
+ shard.Erase(key1, hkey1);
759
837
 
760
838
  // All still alive
761
839
  ASSERT_EQ(val.deleted, 0);
762
840
 
763
841
  // Invisible to Lookup
764
- tmp_h = shard_->Lookup(key1, hkey1);
842
+ tmp_h = shard.Lookup(key1, hkey1);
765
843
  ASSERT_EQ(nullptr, tmp_h);
766
844
 
767
845
  // Can still find h2, h3
768
846
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
769
- tmp_h = shard_->Lookup(key2, hkey2);
847
+ tmp_h = shard.Lookup(key2, hkey2);
770
848
  ASSERT_EQ(h2, tmp_h);
771
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
849
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
772
850
 
773
- tmp_h = shard_->Lookup(key3, hkey3);
851
+ tmp_h = shard.Lookup(key3, hkey3);
774
852
  ASSERT_EQ(h3, tmp_h);
775
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
853
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
776
854
  }
777
855
 
778
856
  // Also Insert with invisible entry there
779
- ASSERT_OK(shard_->Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, nullptr,
780
- Cache::Priority::HIGH));
781
- tmp_h = shard_->Lookup(key1, hkey1);
857
+ ASSERT_OK(shard.Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, nullptr,
858
+ Cache::Priority::HIGH));
859
+ tmp_h = shard.Lookup(key1, hkey1);
782
860
  // Found but distinct handle
783
861
  ASSERT_NE(nullptr, tmp_h);
784
862
  ASSERT_NE(h1, tmp_h);
785
- ASSERT_TRUE(shard_->Release(tmp_h, /*erase_if_last_ref*/ true));
863
+ ASSERT_TRUE(shard.Release(tmp_h, /*erase_if_last_ref*/ true));
786
864
 
787
865
  // tmp_h deleted
788
866
  ASSERT_EQ(val.deleted--, 1);
789
867
 
790
868
  // Release last ref on h1 (already invisible)
791
- ASSERT_TRUE(shard_->Release(h1, /*erase_if_last_ref*/ false));
869
+ ASSERT_TRUE(shard.Release(h1, /*erase_if_last_ref*/ false));
792
870
 
793
871
  // h1 deleted
794
872
  ASSERT_EQ(val.deleted--, 1);
@@ -796,57 +874,57 @@ TEST_F(ClockCacheTest, CollidingInsertEraseTest) {
796
874
 
797
875
  // Can still find h2, h3
798
876
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
799
- tmp_h = shard_->Lookup(key2, hkey2);
877
+ tmp_h = shard.Lookup(key2, hkey2);
800
878
  ASSERT_EQ(h2, tmp_h);
801
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
879
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
802
880
 
803
- tmp_h = shard_->Lookup(key3, hkey3);
881
+ tmp_h = shard.Lookup(key3, hkey3);
804
882
  ASSERT_EQ(h3, tmp_h);
805
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
883
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
806
884
  }
807
885
 
808
886
  // Release last ref on h2
809
- ASSERT_FALSE(shard_->Release(h2, /*erase_if_last_ref*/ false));
887
+ ASSERT_FALSE(shard.Release(h2, /*erase_if_last_ref*/ false));
810
888
 
811
889
  // h2 still not deleted (unreferenced in cache)
812
890
  ASSERT_EQ(val.deleted, 0);
813
891
 
814
892
  // Can still find it
815
- tmp_h = shard_->Lookup(key2, hkey2);
893
+ tmp_h = shard.Lookup(key2, hkey2);
816
894
  ASSERT_EQ(h2, tmp_h);
817
895
 
818
896
  // Release last ref on h2, with erase
819
- ASSERT_TRUE(shard_->Release(h2, /*erase_if_last_ref*/ true));
897
+ ASSERT_TRUE(shard.Release(h2, /*erase_if_last_ref*/ true));
820
898
 
821
899
  // h2 deleted
822
900
  ASSERT_EQ(val.deleted--, 1);
823
- tmp_h = shard_->Lookup(key2, hkey2);
901
+ tmp_h = shard.Lookup(key2, hkey2);
824
902
  ASSERT_EQ(nullptr, tmp_h);
825
903
 
826
904
  // Can still find h3
827
905
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
828
- tmp_h = shard_->Lookup(key3, hkey3);
906
+ tmp_h = shard.Lookup(key3, hkey3);
829
907
  ASSERT_EQ(h3, tmp_h);
830
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
908
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
831
909
  }
832
910
 
833
911
  // Release last ref on h3, without erase
834
- ASSERT_FALSE(shard_->Release(h3, /*erase_if_last_ref*/ false));
912
+ ASSERT_FALSE(shard.Release(h3, /*erase_if_last_ref*/ false));
835
913
 
836
914
  // h3 still not deleted (unreferenced in cache)
837
915
  ASSERT_EQ(val.deleted, 0);
838
916
 
839
917
  // Explicit erase
840
- shard_->Erase(key3, hkey3);
918
+ shard.Erase(key3, hkey3);
841
919
 
842
920
  // h3 deleted
843
921
  ASSERT_EQ(val.deleted--, 1);
844
- tmp_h = shard_->Lookup(key3, hkey3);
922
+ tmp_h = shard.Lookup(key3, hkey3);
845
923
  ASSERT_EQ(nullptr, tmp_h);
846
924
  }
847
925
 
848
926
  // This uses the public API to effectively test CalcHashBits etc.
849
- TEST_F(ClockCacheTest, TableSizesTest) {
927
+ TYPED_TEST(ClockCacheTest, TableSizesTest) {
850
928
  for (size_t est_val_size : {1U, 5U, 123U, 2345U, 345678U}) {
851
929
  SCOPED_TRACE("est_val_size = " + std::to_string(est_val_size));
852
930
  for (double est_count : {1.1, 2.2, 511.9, 512.1, 2345.0}) {
@@ -859,8 +937,10 @@ TEST_F(ClockCacheTest, TableSizesTest) {
859
937
  /*memory_allocator*/ nullptr, kDontChargeCacheMetadata)
860
938
  .MakeSharedCache();
861
939
  // Table sizes are currently only powers of two
862
- EXPECT_GE(cache->GetTableAddressCount(), est_count / kLoadFactor);
863
- EXPECT_LE(cache->GetTableAddressCount(), est_count / kLoadFactor * 2.0);
940
+ EXPECT_GE(cache->GetTableAddressCount(),
941
+ est_count / FixedHyperClockTable::kLoadFactor);
942
+ EXPECT_LE(cache->GetTableAddressCount(),
943
+ est_count / FixedHyperClockTable::kLoadFactor * 2.0);
864
944
  EXPECT_EQ(cache->GetUsage(), 0);
865
945
 
866
946
  // kFullChargeMetaData
@@ -877,9 +957,10 @@ TEST_F(ClockCacheTest, TableSizesTest) {
877
957
  double est_count_after_meta =
878
958
  (capacity - cache->GetUsage()) * 1.0 / est_val_size;
879
959
  EXPECT_GE(cache->GetTableAddressCount(),
880
- est_count_after_meta / kLoadFactor);
881
- EXPECT_LE(cache->GetTableAddressCount(),
882
- est_count_after_meta / kLoadFactor * 2.0);
960
+ est_count_after_meta / FixedHyperClockTable::kLoadFactor);
961
+ EXPECT_LE(
962
+ cache->GetTableAddressCount(),
963
+ est_count_after_meta / FixedHyperClockTable::kLoadFactor * 2.0);
883
964
  }
884
965
  }
885
966
  }
@@ -902,13 +983,14 @@ class TestSecondaryCache : public SecondaryCache {
902
983
 
903
984
  using ResultMap = std::unordered_map<std::string, ResultType>;
904
985
 
905
- explicit TestSecondaryCache(size_t capacity)
986
+ explicit TestSecondaryCache(size_t capacity, bool insert_saved = false)
906
987
  : cache_(NewLRUCache(capacity, 0, false, 0.5 /* high_pri_pool_ratio */,
907
988
  nullptr, kDefaultToAdaptiveMutex,
908
989
  kDontChargeCacheMetadata)),
909
990
  num_inserts_(0),
910
991
  num_lookups_(0),
911
- inject_failure_(false) {}
992
+ inject_failure_(false),
993
+ insert_saved_(insert_saved) {}
912
994
 
913
995
  const char* Name() const override { return "TestSecondaryCache"; }
914
996
 
@@ -917,7 +999,8 @@ class TestSecondaryCache : public SecondaryCache {
917
999
  void ResetInjectFailure() { inject_failure_ = false; }
918
1000
 
919
1001
  Status Insert(const Slice& key, Cache::ObjectPtr value,
920
- const Cache::CacheItemHelper* helper) override {
1002
+ const Cache::CacheItemHelper* helper,
1003
+ bool /*force_insert*/) override {
921
1004
  if (inject_failure_) {
922
1005
  return Status::Corruption("Insertion Data Corrupted");
923
1006
  }
@@ -938,6 +1021,17 @@ class TestSecondaryCache : public SecondaryCache {
938
1021
  return cache_.Insert(key, buf, size);
939
1022
  }
940
1023
 
1024
+ Status InsertSaved(const Slice& key, const Slice& saved,
1025
+ CompressionType /*type*/ = kNoCompression,
1026
+ CacheTier /*source*/ = CacheTier::kVolatileTier) override {
1027
+ if (insert_saved_) {
1028
+ return Insert(key, const_cast<Slice*>(&saved), &kSliceCacheItemHelper,
1029
+ /*force_insert=*/true);
1030
+ } else {
1031
+ return Status::OK();
1032
+ }
1033
+ }
1034
+
941
1035
  std::unique_ptr<SecondaryCacheResultHandle> Lookup(
942
1036
  const Slice& key, const Cache::CacheItemHelper* helper,
943
1037
  Cache::CreateContext* create_context, bool /*wait*/,
@@ -966,7 +1060,8 @@ class TestSecondaryCache : public SecondaryCache {
966
1060
  char* ptr = cache_.Value(handle);
967
1061
  size_t size = DecodeFixed64(ptr);
968
1062
  ptr += sizeof(uint64_t);
969
- s = helper->create_cb(Slice(ptr, size), create_context,
1063
+ s = helper->create_cb(Slice(ptr, size), kNoCompression,
1064
+ CacheTier::kVolatileTier, create_context,
970
1065
  /*alloc*/ nullptr, &value, &charge);
971
1066
  }
972
1067
  if (s.ok()) {
@@ -1055,6 +1150,7 @@ class TestSecondaryCache : public SecondaryCache {
1055
1150
  uint32_t num_inserts_;
1056
1151
  uint32_t num_lookups_;
1057
1152
  bool inject_failure_;
1153
+ bool insert_saved_;
1058
1154
  std::string ckey_prefix_;
1059
1155
  ResultMap result_map_;
1060
1156
  };
@@ -1085,7 +1181,7 @@ INSTANTIATE_TEST_CASE_P(DBSecondaryCacheTest, DBSecondaryCacheTest,
1085
1181
 
1086
1182
  TEST_P(BasicSecondaryCacheTest, BasicTest) {
1087
1183
  std::shared_ptr<TestSecondaryCache> secondary_cache =
1088
- std::make_shared<TestSecondaryCache>(4096);
1184
+ std::make_shared<TestSecondaryCache>(4096, true);
1089
1185
  std::shared_ptr<Cache> cache =
1090
1186
  NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
1091
1187
  false /* strict_capacity_limit */, secondary_cache);
@@ -1142,7 +1238,7 @@ TEST_P(BasicSecondaryCacheTest, BasicTest) {
1142
1238
 
1143
1239
  TEST_P(BasicSecondaryCacheTest, StatsTest) {
1144
1240
  std::shared_ptr<TestSecondaryCache> secondary_cache =
1145
- std::make_shared<TestSecondaryCache>(4096);
1241
+ std::make_shared<TestSecondaryCache>(4096, true);
1146
1242
  std::shared_ptr<Cache> cache =
1147
1243
  NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
1148
1244
  false /* strict_capacity_limit */, secondary_cache);
@@ -1196,7 +1292,7 @@ TEST_P(BasicSecondaryCacheTest, StatsTest) {
1196
1292
 
1197
1293
  TEST_P(BasicSecondaryCacheTest, BasicFailTest) {
1198
1294
  std::shared_ptr<TestSecondaryCache> secondary_cache =
1199
- std::make_shared<TestSecondaryCache>(2048);
1295
+ std::make_shared<TestSecondaryCache>(2048, true);
1200
1296
  std::shared_ptr<Cache> cache =
1201
1297
  NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
1202
1298
  false /* strict_capacity_limit */, secondary_cache);
@@ -1238,7 +1334,7 @@ TEST_P(BasicSecondaryCacheTest, BasicFailTest) {
1238
1334
 
1239
1335
  TEST_P(BasicSecondaryCacheTest, SaveFailTest) {
1240
1336
  std::shared_ptr<TestSecondaryCache> secondary_cache =
1241
- std::make_shared<TestSecondaryCache>(2048);
1337
+ std::make_shared<TestSecondaryCache>(2048, true);
1242
1338
  std::shared_ptr<Cache> cache =
1243
1339
  NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
1244
1340
  false /* strict_capacity_limit */, secondary_cache);
@@ -1279,7 +1375,7 @@ TEST_P(BasicSecondaryCacheTest, SaveFailTest) {
1279
1375
 
1280
1376
  TEST_P(BasicSecondaryCacheTest, CreateFailTest) {
1281
1377
  std::shared_ptr<TestSecondaryCache> secondary_cache =
1282
- std::make_shared<TestSecondaryCache>(2048);
1378
+ std::make_shared<TestSecondaryCache>(2048, true);
1283
1379
  std::shared_ptr<Cache> cache =
1284
1380
  NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
1285
1381
  false /* strict_capacity_limit */, secondary_cache);
@@ -1320,7 +1416,7 @@ TEST_P(BasicSecondaryCacheTest, CreateFailTest) {
1320
1416
  TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
1321
1417
  for (bool strict_capacity_limit : {false, true}) {
1322
1418
  std::shared_ptr<TestSecondaryCache> secondary_cache =
1323
- std::make_shared<TestSecondaryCache>(2048);
1419
+ std::make_shared<TestSecondaryCache>(2048, true);
1324
1420
  std::shared_ptr<Cache> cache =
1325
1421
  NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
1326
1422
  strict_capacity_limit, secondary_cache);
@@ -1367,7 +1463,7 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
1367
1463
  k2.AsSlice(),
1368
1464
  GetHelper(CacheEntryRole::kDataBlock, /*secondary_compatible=*/false),
1369
1465
  /*context*/ this, Cache::Priority::LOW);
1370
- if (strict_capacity_limit || GetParam() == kHyperClock) {
1466
+ if (strict_capacity_limit || IsHyperClock()) {
1371
1467
  ASSERT_NE(handle2, nullptr);
1372
1468
  cache->Release(handle2);
1373
1469
  ASSERT_EQ(secondary_cache->num_inserts(), 1u);
@@ -1392,12 +1488,12 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
1392
1488
  // CORRECTION: this is not quite right. block_1 can be inserted into the block
1393
1489
  // cache because strict_capacity_limit=false, but it is removed from the cache
1394
1490
  // in Release() because of being over-capacity, without demoting to secondary
1395
- // cache. HyperClockCache doesn't check capacity on release (for efficiency)
1396
- // so can demote the over-capacity item to secondary cache. Also, we intend to
1397
- // add support for demotion in Release, but that currently causes too much
1398
- // unit test churn.
1491
+ // cache. FixedHyperClockCache doesn't check capacity on release (for
1492
+ // efficiency) so can demote the over-capacity item to secondary cache. Also, we
1493
+ // intend to add support for demotion in Release, but that currently causes too
1494
+ // much unit test churn.
1399
1495
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness1) {
1400
- if (GetParam() == kHyperClock) {
1496
+ if (IsHyperClock()) {
1401
1497
  // See CORRECTION above
1402
1498
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1403
1499
  return;
@@ -1495,7 +1591,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness1) {
1495
1591
  // insert and cache block_1 in the block cache (this is the different place
1496
1592
  // from TestSecondaryCacheCorrectness1)
1497
1593
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness2) {
1498
- if (GetParam() == kHyperClock) {
1594
+ if (IsHyperClock()) {
1499
1595
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1500
1596
  return;
1501
1597
  }
@@ -1683,7 +1779,7 @@ TEST_P(DBSecondaryCacheTest, SecondaryCacheIntensiveTesting) {
1683
1779
  // if we try to insert block_1 to the block cache, it will always fails. Only
1684
1780
  // block_2 will be successfully inserted into the block cache.
1685
1781
  TEST_P(DBSecondaryCacheTest, SecondaryCacheFailureTest) {
1686
- if (GetParam() == kHyperClock) {
1782
+ if (IsHyperClock()) {
1687
1783
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1688
1784
  return;
1689
1785
  }
@@ -1793,7 +1889,7 @@ TEST_P(BasicSecondaryCacheTest, BasicWaitAllTest) {
1793
1889
  str.length()));
1794
1890
  }
1795
1891
  // Force all entries to be evicted to the secondary cache
1796
- if (GetParam() == kHyperClock) {
1892
+ if (IsHyperClock()) {
1797
1893
  // HCC doesn't respond immediately to SetCapacity
1798
1894
  for (int i = 9000; i < 9030; ++i) {
1799
1895
  ASSERT_OK(cache->Insert(ock.WithOffset(i).AsSlice(), nullptr,
@@ -1848,7 +1944,7 @@ TEST_P(BasicSecondaryCacheTest, BasicWaitAllTest) {
1848
1944
  // a sync point callback in TestSecondaryCache::Lookup. We then control the
1849
1945
  // lookup result by setting the ResultMap.
1850
1946
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheMultiGet) {
1851
- if (GetParam() == kHyperClock) {
1947
+ if (IsHyperClock()) {
1852
1948
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1853
1949
  return;
1854
1950
  }
@@ -1939,8 +2035,9 @@ class CacheWithStats : public CacheWrapper {
1939
2035
 
1940
2036
  Status Insert(const Slice& key, Cache::ObjectPtr value,
1941
2037
  const CacheItemHelper* helper, size_t charge,
1942
- Handle** handle = nullptr,
1943
- Priority priority = Priority::LOW) override {
2038
+ Handle** handle = nullptr, Priority priority = Priority::LOW,
2039
+ const Slice& /*compressed*/ = Slice(),
2040
+ CompressionType /*type*/ = kNoCompression) override {
1944
2041
  insert_count_++;
1945
2042
  return target_->Insert(key, value, helper, charge, handle, priority);
1946
2043
  }
@@ -2033,7 +2130,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadBasic) {
2033
2130
  // we have a new cache it is empty, then, before we do the Get, we do the
2034
2131
  // dumpload
2035
2132
  std::shared_ptr<TestSecondaryCache> secondary_cache =
2036
- std::make_shared<TestSecondaryCache>(2048 * 1024);
2133
+ std::make_shared<TestSecondaryCache>(2048 * 1024, true);
2037
2134
  // This time with secondary cache
2038
2135
  base_cache = NewCache(1024 * 1024 /* capacity */, 0 /* num_shard_bits */,
2039
2136
  false /* strict_capacity_limit */, secondary_cache);
@@ -2189,7 +2286,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadWithFilter) {
2189
2286
  // we have a new cache it is empty, then, before we do the Get, we do the
2190
2287
  // dumpload
2191
2288
  std::shared_ptr<TestSecondaryCache> secondary_cache =
2192
- std::make_shared<TestSecondaryCache>(2048 * 1024);
2289
+ std::make_shared<TestSecondaryCache>(2048 * 1024, true);
2193
2290
  // This time with secondary_cache
2194
2291
  base_cache = NewCache(1024 * 1024 /* capacity */, 0 /* num_shard_bits */,
2195
2292
  false /* strict_capacity_limit */, secondary_cache);
@@ -2349,7 +2446,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionBasic) {
2349
2446
  // with new options, which set the lowest_used_cache_tier to
2350
2447
  // kNonVolatileBlockTier. So secondary cache will be used.
2351
2448
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
2352
- if (GetParam() == kHyperClock) {
2449
+ if (IsHyperClock()) {
2353
2450
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
2354
2451
  return;
2355
2452
  }
@@ -2444,7 +2541,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
2444
2541
  // Two DB test. We create 2 DBs sharing the same block cache and secondary
2445
2542
  // cache. We diable the secondary cache option for DB2.
2446
2543
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionTwoDB) {
2447
- if (GetParam() == kHyperClock) {
2544
+ if (IsHyperClock()) {
2448
2545
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
2449
2546
  return;
2450
2547
  }