@nxtedition/rocksdb 8.2.7 → 9.0.0

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 (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -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 = shard.GetTableAddressCount() + 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,7 +553,7 @@ 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 {
@@ -551,122 +561,123 @@ TEST_F(ClockCacheTest, Limits) {
551
561
  }
552
562
 
553
563
  // Regardless, we didn't allow table to actually get full
554
- EXPECT_LT(shard_->GetOccupancyCount(), shard_->GetTableAddressCount());
564
+ EXPECT_LT(shard.GetOccupancyCount(), shard.GetTableAddressCount());
555
565
 
556
566
  // Release handles
557
567
  for (size_t i = 0; i < n; ++i) {
558
568
  if (ha[i]) {
559
- shard_->Release(ha[i]);
569
+ shard.Release(ha[i]);
560
570
  }
561
571
  }
562
572
  }
563
573
  }
564
574
  }
565
575
 
566
- TEST_F(ClockCacheTest, ClockEvictionTest) {
576
+ TYPED_TEST(ClockCacheTest, ClockEvictionTest) {
567
577
  for (bool strict_capacity_limit : {false, true}) {
568
578
  SCOPED_TRACE("strict_capacity_limit = " +
569
579
  std::to_string(strict_capacity_limit));
570
580
 
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));
581
+ this->NewShard(6, strict_capacity_limit);
582
+ auto& shard = *this->shard_;
583
+ EXPECT_OK(this->Insert('a', Cache::Priority::BOTTOM));
584
+ EXPECT_OK(this->Insert('b', Cache::Priority::LOW));
585
+ EXPECT_OK(this->Insert('c', Cache::Priority::HIGH));
586
+ EXPECT_OK(this->Insert('d', Cache::Priority::BOTTOM));
587
+ EXPECT_OK(this->Insert('e', Cache::Priority::LOW));
588
+ EXPECT_OK(this->Insert('f', Cache::Priority::HIGH));
589
+
590
+ EXPECT_TRUE(this->Lookup('a', /*use*/ false));
591
+ EXPECT_TRUE(this->Lookup('b', /*use*/ false));
592
+ EXPECT_TRUE(this->Lookup('c', /*use*/ false));
593
+ EXPECT_TRUE(this->Lookup('d', /*use*/ false));
594
+ EXPECT_TRUE(this->Lookup('e', /*use*/ false));
595
+ EXPECT_TRUE(this->Lookup('f', /*use*/ false));
585
596
 
586
597
  // 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));
598
+ EXPECT_OK(this->Insert('g', Cache::Priority::LOW));
599
+ EXPECT_OK(this->Insert('h', Cache::Priority::LOW));
600
+
601
+ EXPECT_FALSE(this->Lookup('a', /*use*/ false));
602
+ EXPECT_TRUE(this->Lookup('b', /*use*/ false));
603
+ EXPECT_TRUE(this->Lookup('c', /*use*/ false));
604
+ EXPECT_FALSE(this->Lookup('d', /*use*/ false));
605
+ EXPECT_TRUE(this->Lookup('e', /*use*/ false));
606
+ EXPECT_TRUE(this->Lookup('f', /*use*/ false));
596
607
  // Mark g & h useful
597
- EXPECT_TRUE(Lookup('g', /*use*/ true));
598
- EXPECT_TRUE(Lookup('h', /*use*/ true));
608
+ EXPECT_TRUE(this->Lookup('g', /*use*/ true));
609
+ EXPECT_TRUE(this->Lookup('h', /*use*/ true));
599
610
 
600
611
  // Then old LOW entries
601
- EXPECT_OK(Insert('i', Cache::Priority::LOW));
602
- EXPECT_OK(Insert('j', Cache::Priority::LOW));
612
+ EXPECT_OK(this->Insert('i', Cache::Priority::LOW));
613
+ EXPECT_OK(this->Insert('j', Cache::Priority::LOW));
603
614
 
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));
615
+ EXPECT_FALSE(this->Lookup('b', /*use*/ false));
616
+ EXPECT_TRUE(this->Lookup('c', /*use*/ false));
617
+ EXPECT_FALSE(this->Lookup('e', /*use*/ false));
618
+ EXPECT_TRUE(this->Lookup('f', /*use*/ false));
608
619
  // 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));
620
+ EXPECT_TRUE(this->Lookup('g', /*use*/ true));
621
+ EXPECT_TRUE(this->Lookup('h', /*use*/ true));
622
+ EXPECT_TRUE(this->Lookup('i', /*use*/ false));
623
+ EXPECT_TRUE(this->Lookup('j', /*use*/ false));
613
624
 
614
625
  // 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));
626
+ EXPECT_OK(this->Insert('k', Cache::Priority::LOW));
627
+ EXPECT_OK(this->Insert('l', Cache::Priority::LOW));
628
+
629
+ EXPECT_FALSE(this->Lookup('c', /*use*/ false));
630
+ EXPECT_FALSE(this->Lookup('f', /*use*/ false));
631
+ EXPECT_TRUE(this->Lookup('g', /*use*/ false));
632
+ EXPECT_TRUE(this->Lookup('h', /*use*/ false));
633
+ EXPECT_TRUE(this->Lookup('i', /*use*/ false));
634
+ EXPECT_TRUE(this->Lookup('j', /*use*/ false));
635
+ EXPECT_TRUE(this->Lookup('k', /*use*/ false));
636
+ EXPECT_TRUE(this->Lookup('l', /*use*/ false));
626
637
 
627
638
  // Then the (roughly) least recently useful
628
- EXPECT_OK(Insert('m', Cache::Priority::HIGH));
629
- EXPECT_OK(Insert('n', Cache::Priority::HIGH));
639
+ EXPECT_OK(this->Insert('m', Cache::Priority::HIGH));
640
+ EXPECT_OK(this->Insert('n', Cache::Priority::HIGH));
630
641
 
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));
642
+ EXPECT_TRUE(this->Lookup('g', /*use*/ false));
643
+ EXPECT_TRUE(this->Lookup('h', /*use*/ false));
644
+ EXPECT_FALSE(this->Lookup('i', /*use*/ false));
645
+ EXPECT_FALSE(this->Lookup('j', /*use*/ false));
646
+ EXPECT_TRUE(this->Lookup('k', /*use*/ false));
647
+ EXPECT_TRUE(this->Lookup('l', /*use*/ false));
637
648
 
638
649
  // Now try changing capacity down
639
- shard_->SetCapacity(4);
650
+ shard.SetCapacity(4);
640
651
  // 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));
652
+ EXPECT_OK(this->Insert('o', Cache::Priority::LOW));
653
+ EXPECT_OK(this->Insert('p', Cache::Priority::LOW));
654
+
655
+ EXPECT_FALSE(this->Lookup('g', /*use*/ false));
656
+ EXPECT_FALSE(this->Lookup('h', /*use*/ false));
657
+ EXPECT_FALSE(this->Lookup('k', /*use*/ false));
658
+ EXPECT_FALSE(this->Lookup('l', /*use*/ false));
659
+ EXPECT_TRUE(this->Lookup('m', /*use*/ false));
660
+ EXPECT_TRUE(this->Lookup('n', /*use*/ false));
661
+ EXPECT_TRUE(this->Lookup('o', /*use*/ false));
662
+ EXPECT_TRUE(this->Lookup('p', /*use*/ false));
652
663
 
653
664
  // 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));
665
+ EXPECT_TRUE(this->Lookup('m', /*use*/ true));
666
+ EXPECT_TRUE(this->Lookup('n', /*use*/ true));
667
+ shard.SetCapacity(6);
668
+ EXPECT_OK(this->Insert('q', Cache::Priority::HIGH));
669
+ EXPECT_OK(this->Insert('r', Cache::Priority::HIGH));
670
+ EXPECT_OK(this->Insert('s', Cache::Priority::HIGH));
671
+ EXPECT_OK(this->Insert('t', Cache::Priority::HIGH));
672
+
673
+ EXPECT_FALSE(this->Lookup('o', /*use*/ false));
674
+ EXPECT_FALSE(this->Lookup('p', /*use*/ false));
675
+ EXPECT_TRUE(this->Lookup('m', /*use*/ false));
676
+ EXPECT_TRUE(this->Lookup('n', /*use*/ false));
677
+ EXPECT_TRUE(this->Lookup('q', /*use*/ false));
678
+ EXPECT_TRUE(this->Lookup('r', /*use*/ false));
679
+ EXPECT_TRUE(this->Lookup('s', /*use*/ false));
680
+ EXPECT_TRUE(this->Lookup('t', /*use*/ false));
670
681
  }
671
682
  }
672
683
 
@@ -682,113 +693,178 @@ const Cache::CacheItemHelper kDeleteCounterHelper{
682
693
  } // namespace
683
694
 
684
695
  // Testing calls to CorrectNearOverflow in Release
685
- TEST_F(ClockCacheTest, ClockCounterOverflowTest) {
686
- NewShard(6, /*strict_capacity_limit*/ false);
696
+ TYPED_TEST(ClockCacheTest, ClockCounterOverflowTest) {
697
+ this->NewShard(6, /*strict_capacity_limit*/ false);
698
+ auto& shard = *this->shard_;
699
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
700
+
687
701
  HandleImpl* h;
688
702
  DeleteCounter val;
689
- UniqueId64x2 hkey = TestHashedKey('x');
690
- ASSERT_OK(shard_->Insert(TestKey(hkey), hkey, &val, &kDeleteCounterHelper, 1,
691
- &h, Cache::Priority::HIGH));
703
+ UniqueId64x2 hkey = this->TestHashedKey('x');
704
+ ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, &val, &kDeleteCounterHelper,
705
+ 1, &h, Cache::Priority::HIGH));
692
706
 
693
707
  // Some large number outstanding
694
- shard_->TEST_RefN(h, 123456789);
708
+ shard.TEST_RefN(h, 123456789);
695
709
  // Simulate many lookup/ref + release, plenty to overflow counters
696
710
  for (int i = 0; i < 10000; ++i) {
697
- shard_->TEST_RefN(h, 1234567);
698
- shard_->TEST_ReleaseN(h, 1234567);
711
+ shard.TEST_RefN(h, 1234567);
712
+ shard.TEST_ReleaseN(h, 1234567);
699
713
  }
700
714
  // Mark it invisible (to reach a different CorrectNearOverflow() in Release)
701
- shard_->Erase(TestKey(hkey), hkey);
715
+ shard.Erase(this->TestKey(hkey), hkey);
702
716
  // Simulate many more lookup/ref + release (one-by-one would be too
703
717
  // expensive for unit test)
704
718
  for (int i = 0; i < 10000; ++i) {
705
- shard_->TEST_RefN(h, 1234567);
706
- shard_->TEST_ReleaseN(h, 1234567);
719
+ shard.TEST_RefN(h, 1234567);
720
+ shard.TEST_ReleaseN(h, 1234567);
707
721
  }
708
722
  // Free all but last 1
709
- shard_->TEST_ReleaseN(h, 123456789);
723
+ shard.TEST_ReleaseN(h, 123456789);
710
724
  // Still alive
711
725
  ASSERT_EQ(val.deleted, 0);
712
726
  // Free last ref, which will finalize erasure
713
- shard_->Release(h);
727
+ shard.Release(h);
714
728
  // Deleted
715
729
  ASSERT_EQ(val.deleted, 1);
716
730
  }
717
731
 
732
+ TYPED_TEST(ClockCacheTest, ClockTableFull) {
733
+ // Force clock cache table to fill up (not usually allowed) in order
734
+ // to test full probe sequence that is theoretically possible due to
735
+ // parallel operations
736
+ this->NewShard(6, /*strict_capacity_limit*/ false);
737
+ auto& shard = *this->shard_;
738
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
739
+
740
+ size_t size = shard.GetTableAddressCount();
741
+ ASSERT_LE(size + 3, 256); // for using char keys
742
+ // Modify occupancy and capacity limits to attempt insert on full
743
+ shard.TEST_MutableOccupancyLimit() = size + 100;
744
+ shard.SetCapacity(size + 100);
745
+
746
+ DeleteCounter val;
747
+ std::vector<HandleImpl*> handles;
748
+ // NOTE: the three extra insertions should create standalone entries
749
+ for (size_t i = 0; i < size + 3; ++i) {
750
+ UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i));
751
+ ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, &val,
752
+ &kDeleteCounterHelper, 1, &handles.emplace_back(),
753
+ Cache::Priority::HIGH));
754
+ }
755
+
756
+ for (size_t i = 0; i < size + 3; ++i) {
757
+ UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i));
758
+ HandleImpl* h = shard.Lookup(this->TestKey(hkey), hkey);
759
+ if (i < size) {
760
+ ASSERT_NE(h, nullptr);
761
+ shard.Release(h);
762
+ } else {
763
+ // Standalone entries not visible by lookup
764
+ ASSERT_EQ(h, nullptr);
765
+ }
766
+ }
767
+
768
+ for (size_t i = 0; i < size + 3; ++i) {
769
+ ASSERT_NE(handles[i], nullptr);
770
+ shard.Release(handles[i]);
771
+ if (i < size) {
772
+ // Everything still in cache
773
+ ASSERT_EQ(val.deleted, 0);
774
+ } else {
775
+ // Standalone entries freed on release
776
+ ASSERT_EQ(val.deleted, i + 1 - size);
777
+ }
778
+ }
779
+
780
+ for (size_t i = size + 3; i > 0; --i) {
781
+ UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i - 1));
782
+ shard.Erase(this->TestKey(hkey), hkey);
783
+ if (i - 1 > size) {
784
+ ASSERT_EQ(val.deleted, 3);
785
+ } else {
786
+ ASSERT_EQ(val.deleted, 3 + size - (i - 1));
787
+ }
788
+ }
789
+ }
790
+
718
791
  // This test is mostly to exercise some corner case logic, by forcing two
719
792
  // keys to have the same hash, and more
720
- TEST_F(ClockCacheTest, CollidingInsertEraseTest) {
721
- NewShard(6, /*strict_capacity_limit*/ false);
793
+ TYPED_TEST(ClockCacheTest, CollidingInsertEraseTest) {
794
+ this->NewShard(6, /*strict_capacity_limit*/ false);
795
+ auto& shard = *this->shard_;
796
+ using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
797
+
722
798
  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);
799
+ UniqueId64x2 hkey1 = this->TestHashedKey('x');
800
+ Slice key1 = this->TestKey(hkey1);
801
+ UniqueId64x2 hkey2 = this->TestHashedKey('y');
802
+ Slice key2 = this->TestKey(hkey2);
803
+ UniqueId64x2 hkey3 = this->TestHashedKey('z');
804
+ Slice key3 = this->TestKey(hkey3);
729
805
  HandleImpl* h1;
730
- ASSERT_OK(shard_->Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, &h1,
731
- Cache::Priority::HIGH));
806
+ ASSERT_OK(shard.Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, &h1,
807
+ Cache::Priority::HIGH));
732
808
  HandleImpl* h2;
733
- ASSERT_OK(shard_->Insert(key2, hkey2, &val, &kDeleteCounterHelper, 1, &h2,
734
- Cache::Priority::HIGH));
809
+ ASSERT_OK(shard.Insert(key2, hkey2, &val, &kDeleteCounterHelper, 1, &h2,
810
+ Cache::Priority::HIGH));
735
811
  HandleImpl* h3;
736
- ASSERT_OK(shard_->Insert(key3, hkey3, &val, &kDeleteCounterHelper, 1, &h3,
737
- Cache::Priority::HIGH));
812
+ ASSERT_OK(shard.Insert(key3, hkey3, &val, &kDeleteCounterHelper, 1, &h3,
813
+ Cache::Priority::HIGH));
738
814
 
739
815
  // Can repeatedly lookup+release despite the hash collision
740
816
  HandleImpl* tmp_h;
741
817
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
742
- tmp_h = shard_->Lookup(key1, hkey1);
818
+ tmp_h = shard.Lookup(key1, hkey1);
743
819
  ASSERT_EQ(h1, tmp_h);
744
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
820
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
745
821
 
746
- tmp_h = shard_->Lookup(key2, hkey2);
822
+ tmp_h = shard.Lookup(key2, hkey2);
747
823
  ASSERT_EQ(h2, tmp_h);
748
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
824
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
749
825
 
750
- tmp_h = shard_->Lookup(key3, hkey3);
826
+ tmp_h = shard.Lookup(key3, hkey3);
751
827
  ASSERT_EQ(h3, tmp_h);
752
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
828
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
753
829
  }
754
830
 
755
831
  // Make h1 invisible
756
- shard_->Erase(key1, hkey1);
832
+ shard.Erase(key1, hkey1);
757
833
  // Redundant erase
758
- shard_->Erase(key1, hkey1);
834
+ shard.Erase(key1, hkey1);
759
835
 
760
836
  // All still alive
761
837
  ASSERT_EQ(val.deleted, 0);
762
838
 
763
839
  // Invisible to Lookup
764
- tmp_h = shard_->Lookup(key1, hkey1);
840
+ tmp_h = shard.Lookup(key1, hkey1);
765
841
  ASSERT_EQ(nullptr, tmp_h);
766
842
 
767
843
  // Can still find h2, h3
768
844
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
769
- tmp_h = shard_->Lookup(key2, hkey2);
845
+ tmp_h = shard.Lookup(key2, hkey2);
770
846
  ASSERT_EQ(h2, tmp_h);
771
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
847
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
772
848
 
773
- tmp_h = shard_->Lookup(key3, hkey3);
849
+ tmp_h = shard.Lookup(key3, hkey3);
774
850
  ASSERT_EQ(h3, tmp_h);
775
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
851
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
776
852
  }
777
853
 
778
854
  // 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);
855
+ ASSERT_OK(shard.Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, nullptr,
856
+ Cache::Priority::HIGH));
857
+ tmp_h = shard.Lookup(key1, hkey1);
782
858
  // Found but distinct handle
783
859
  ASSERT_NE(nullptr, tmp_h);
784
860
  ASSERT_NE(h1, tmp_h);
785
- ASSERT_TRUE(shard_->Release(tmp_h, /*erase_if_last_ref*/ true));
861
+ ASSERT_TRUE(shard.Release(tmp_h, /*erase_if_last_ref*/ true));
786
862
 
787
863
  // tmp_h deleted
788
864
  ASSERT_EQ(val.deleted--, 1);
789
865
 
790
866
  // Release last ref on h1 (already invisible)
791
- ASSERT_TRUE(shard_->Release(h1, /*erase_if_last_ref*/ false));
867
+ ASSERT_TRUE(shard.Release(h1, /*erase_if_last_ref*/ false));
792
868
 
793
869
  // h1 deleted
794
870
  ASSERT_EQ(val.deleted--, 1);
@@ -796,57 +872,57 @@ TEST_F(ClockCacheTest, CollidingInsertEraseTest) {
796
872
 
797
873
  // Can still find h2, h3
798
874
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
799
- tmp_h = shard_->Lookup(key2, hkey2);
875
+ tmp_h = shard.Lookup(key2, hkey2);
800
876
  ASSERT_EQ(h2, tmp_h);
801
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
877
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
802
878
 
803
- tmp_h = shard_->Lookup(key3, hkey3);
879
+ tmp_h = shard.Lookup(key3, hkey3);
804
880
  ASSERT_EQ(h3, tmp_h);
805
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
881
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
806
882
  }
807
883
 
808
884
  // Release last ref on h2
809
- ASSERT_FALSE(shard_->Release(h2, /*erase_if_last_ref*/ false));
885
+ ASSERT_FALSE(shard.Release(h2, /*erase_if_last_ref*/ false));
810
886
 
811
887
  // h2 still not deleted (unreferenced in cache)
812
888
  ASSERT_EQ(val.deleted, 0);
813
889
 
814
890
  // Can still find it
815
- tmp_h = shard_->Lookup(key2, hkey2);
891
+ tmp_h = shard.Lookup(key2, hkey2);
816
892
  ASSERT_EQ(h2, tmp_h);
817
893
 
818
894
  // Release last ref on h2, with erase
819
- ASSERT_TRUE(shard_->Release(h2, /*erase_if_last_ref*/ true));
895
+ ASSERT_TRUE(shard.Release(h2, /*erase_if_last_ref*/ true));
820
896
 
821
897
  // h2 deleted
822
898
  ASSERT_EQ(val.deleted--, 1);
823
- tmp_h = shard_->Lookup(key2, hkey2);
899
+ tmp_h = shard.Lookup(key2, hkey2);
824
900
  ASSERT_EQ(nullptr, tmp_h);
825
901
 
826
902
  // Can still find h3
827
903
  for (bool erase_if_last_ref : {true, false}) { // but not last ref
828
- tmp_h = shard_->Lookup(key3, hkey3);
904
+ tmp_h = shard.Lookup(key3, hkey3);
829
905
  ASSERT_EQ(h3, tmp_h);
830
- ASSERT_FALSE(shard_->Release(tmp_h, erase_if_last_ref));
906
+ ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
831
907
  }
832
908
 
833
909
  // Release last ref on h3, without erase
834
- ASSERT_FALSE(shard_->Release(h3, /*erase_if_last_ref*/ false));
910
+ ASSERT_FALSE(shard.Release(h3, /*erase_if_last_ref*/ false));
835
911
 
836
912
  // h3 still not deleted (unreferenced in cache)
837
913
  ASSERT_EQ(val.deleted, 0);
838
914
 
839
915
  // Explicit erase
840
- shard_->Erase(key3, hkey3);
916
+ shard.Erase(key3, hkey3);
841
917
 
842
918
  // h3 deleted
843
919
  ASSERT_EQ(val.deleted--, 1);
844
- tmp_h = shard_->Lookup(key3, hkey3);
920
+ tmp_h = shard.Lookup(key3, hkey3);
845
921
  ASSERT_EQ(nullptr, tmp_h);
846
922
  }
847
923
 
848
924
  // This uses the public API to effectively test CalcHashBits etc.
849
- TEST_F(ClockCacheTest, TableSizesTest) {
925
+ TYPED_TEST(ClockCacheTest, TableSizesTest) {
850
926
  for (size_t est_val_size : {1U, 5U, 123U, 2345U, 345678U}) {
851
927
  SCOPED_TRACE("est_val_size = " + std::to_string(est_val_size));
852
928
  for (double est_count : {1.1, 2.2, 511.9, 512.1, 2345.0}) {
@@ -859,8 +935,10 @@ TEST_F(ClockCacheTest, TableSizesTest) {
859
935
  /*memory_allocator*/ nullptr, kDontChargeCacheMetadata)
860
936
  .MakeSharedCache();
861
937
  // 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);
938
+ EXPECT_GE(cache->GetTableAddressCount(),
939
+ est_count / FixedHyperClockTable::kLoadFactor);
940
+ EXPECT_LE(cache->GetTableAddressCount(),
941
+ est_count / FixedHyperClockTable::kLoadFactor * 2.0);
864
942
  EXPECT_EQ(cache->GetUsage(), 0);
865
943
 
866
944
  // kFullChargeMetaData
@@ -877,9 +955,10 @@ TEST_F(ClockCacheTest, TableSizesTest) {
877
955
  double est_count_after_meta =
878
956
  (capacity - cache->GetUsage()) * 1.0 / est_val_size;
879
957
  EXPECT_GE(cache->GetTableAddressCount(),
880
- est_count_after_meta / kLoadFactor);
881
- EXPECT_LE(cache->GetTableAddressCount(),
882
- est_count_after_meta / kLoadFactor * 2.0);
958
+ est_count_after_meta / FixedHyperClockTable::kLoadFactor);
959
+ EXPECT_LE(
960
+ cache->GetTableAddressCount(),
961
+ est_count_after_meta / FixedHyperClockTable::kLoadFactor * 2.0);
883
962
  }
884
963
  }
885
964
  }
@@ -917,7 +996,8 @@ class TestSecondaryCache : public SecondaryCache {
917
996
  void ResetInjectFailure() { inject_failure_ = false; }
918
997
 
919
998
  Status Insert(const Slice& key, Cache::ObjectPtr value,
920
- const Cache::CacheItemHelper* helper) override {
999
+ const Cache::CacheItemHelper* helper,
1000
+ bool /*force_insert*/) override {
921
1001
  if (inject_failure_) {
922
1002
  return Status::Corruption("Insertion Data Corrupted");
923
1003
  }
@@ -1367,7 +1447,7 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
1367
1447
  k2.AsSlice(),
1368
1448
  GetHelper(CacheEntryRole::kDataBlock, /*secondary_compatible=*/false),
1369
1449
  /*context*/ this, Cache::Priority::LOW);
1370
- if (strict_capacity_limit || GetParam() == kHyperClock) {
1450
+ if (strict_capacity_limit || IsHyperClock()) {
1371
1451
  ASSERT_NE(handle2, nullptr);
1372
1452
  cache->Release(handle2);
1373
1453
  ASSERT_EQ(secondary_cache->num_inserts(), 1u);
@@ -1392,12 +1472,12 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
1392
1472
  // CORRECTION: this is not quite right. block_1 can be inserted into the block
1393
1473
  // cache because strict_capacity_limit=false, but it is removed from the cache
1394
1474
  // 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.
1475
+ // cache. FixedHyperClockCache doesn't check capacity on release (for
1476
+ // efficiency) so can demote the over-capacity item to secondary cache. Also, we
1477
+ // intend to add support for demotion in Release, but that currently causes too
1478
+ // much unit test churn.
1399
1479
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness1) {
1400
- if (GetParam() == kHyperClock) {
1480
+ if (IsHyperClock()) {
1401
1481
  // See CORRECTION above
1402
1482
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1403
1483
  return;
@@ -1495,7 +1575,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness1) {
1495
1575
  // insert and cache block_1 in the block cache (this is the different place
1496
1576
  // from TestSecondaryCacheCorrectness1)
1497
1577
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness2) {
1498
- if (GetParam() == kHyperClock) {
1578
+ if (IsHyperClock()) {
1499
1579
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1500
1580
  return;
1501
1581
  }
@@ -1683,7 +1763,7 @@ TEST_P(DBSecondaryCacheTest, SecondaryCacheIntensiveTesting) {
1683
1763
  // if we try to insert block_1 to the block cache, it will always fails. Only
1684
1764
  // block_2 will be successfully inserted into the block cache.
1685
1765
  TEST_P(DBSecondaryCacheTest, SecondaryCacheFailureTest) {
1686
- if (GetParam() == kHyperClock) {
1766
+ if (IsHyperClock()) {
1687
1767
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1688
1768
  return;
1689
1769
  }
@@ -1793,7 +1873,7 @@ TEST_P(BasicSecondaryCacheTest, BasicWaitAllTest) {
1793
1873
  str.length()));
1794
1874
  }
1795
1875
  // Force all entries to be evicted to the secondary cache
1796
- if (GetParam() == kHyperClock) {
1876
+ if (IsHyperClock()) {
1797
1877
  // HCC doesn't respond immediately to SetCapacity
1798
1878
  for (int i = 9000; i < 9030; ++i) {
1799
1879
  ASSERT_OK(cache->Insert(ock.WithOffset(i).AsSlice(), nullptr,
@@ -1848,7 +1928,7 @@ TEST_P(BasicSecondaryCacheTest, BasicWaitAllTest) {
1848
1928
  // a sync point callback in TestSecondaryCache::Lookup. We then control the
1849
1929
  // lookup result by setting the ResultMap.
1850
1930
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheMultiGet) {
1851
- if (GetParam() == kHyperClock) {
1931
+ if (IsHyperClock()) {
1852
1932
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
1853
1933
  return;
1854
1934
  }
@@ -2349,7 +2429,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionBasic) {
2349
2429
  // with new options, which set the lowest_used_cache_tier to
2350
2430
  // kNonVolatileBlockTier. So secondary cache will be used.
2351
2431
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
2352
- if (GetParam() == kHyperClock) {
2432
+ if (IsHyperClock()) {
2353
2433
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
2354
2434
  return;
2355
2435
  }
@@ -2444,7 +2524,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
2444
2524
  // Two DB test. We create 2 DBs sharing the same block cache and secondary
2445
2525
  // cache. We diable the secondary cache option for DB2.
2446
2526
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionTwoDB) {
2447
- if (GetParam() == kHyperClock) {
2527
+ if (IsHyperClock()) {
2448
2528
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
2449
2529
  return;
2450
2530
  }