@nxtedition/rocksdb 9.0.0 → 10.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 (307) hide show
  1. package/binding.cc +244 -177
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -9
  3. package/deps/rocksdb/rocksdb/Makefile +15 -6
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +17 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
  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 +16 -4
  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 +2024 -14
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +202 -7
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
  19. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +314 -25
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +29 -4
  22. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -3
  24. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  27. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  28. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +25 -11
  29. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  30. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -1
  32. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  34. package/deps/rocksdb/rocksdb/db/builder.cc +3 -3
  35. package/deps/rocksdb/rocksdb/db/c.cc +64 -0
  36. package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
  37. package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
  38. package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
  39. package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  53. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
  54. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
  55. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
  58. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
  71. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  72. package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
  73. package/deps/rocksdb/rocksdb/db/db_iter.h +10 -2
  74. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  75. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  76. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  77. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +187 -1
  78. package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
  79. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
  80. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  82. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  83. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  84. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -1
  85. package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
  86. package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
  87. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
  88. package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
  89. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
  90. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
  91. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  93. package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
  94. package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
  96. package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
  97. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
  98. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
  99. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
  100. package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
  101. package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
  103. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  105. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  106. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  107. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  108. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +3 -0
  109. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  110. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  112. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  113. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  114. package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
  115. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
  116. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  117. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  118. package/deps/rocksdb/rocksdb/db/table_cache.cc +32 -19
  119. package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
  121. package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
  122. package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
  123. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  124. package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
  125. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  126. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  127. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  128. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  129. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  130. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  131. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +44 -20
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +15 -10
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -1
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +14 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
  150. package/deps/rocksdb/rocksdb/env/env.cc +5 -0
  151. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
  152. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
  153. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
  154. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
  155. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
  157. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
  158. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
  160. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
  162. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
  163. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
  164. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
  165. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  166. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  167. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +4 -0
  168. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  169. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  170. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  173. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +79 -8
  174. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  176. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  177. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +14 -3
  178. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +0 -2
  186. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  188. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  189. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  190. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  191. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  192. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
  193. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
  194. package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
  195. package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
  196. package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
  197. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  198. package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
  199. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  200. package/deps/rocksdb/rocksdb/port/README +10 -0
  201. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  202. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  203. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  204. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -0
  205. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  206. package/deps/rocksdb/rocksdb/src.mk +7 -1
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  208. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
  209. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
  210. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
  211. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
  212. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
  213. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  214. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +14 -9
  215. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  217. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -12
  218. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
  219. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
  220. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  221. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  222. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  223. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
  225. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
  226. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  228. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
  229. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  230. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
  231. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  232. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  233. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  234. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  235. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +12 -0
  236. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
  237. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
  239. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  240. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  241. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  242. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  243. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  246. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
  247. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
  248. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  249. package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
  250. package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
  251. package/deps/rocksdb/rocksdb/util/compression.h +9 -3
  252. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  253. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  254. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  255. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  256. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  257. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  258. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  259. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  260. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  261. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  262. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -0
  263. package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
  264. package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
  265. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
  266. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  267. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  268. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
  269. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  270. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
  271. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  272. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
  273. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  274. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +9 -0
  275. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  276. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  277. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
  278. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  279. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
  280. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
  281. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  282. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
  283. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
  284. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
  285. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
  286. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
  287. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
  288. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  289. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  290. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +105 -8
  291. package/deps/rocksdb/rocksdb.gyp +4 -2
  292. package/index.js +38 -55
  293. package/package.json +4 -4
  294. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  295. package/util.h +7 -1
  296. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  297. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  298. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  299. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  300. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  301. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  302. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  303. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  304. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  305. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
  306. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  307. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include "memory/memory_allocator_impl.h"
13
13
  #include "monitoring/perf_context_imp.h"
14
+ #include "util/coding.h"
14
15
  #include "util/compression.h"
15
16
  #include "util/string_util.h"
16
17
 
@@ -25,18 +26,20 @@ CompressedSecondaryCache::CompressedSecondaryCache(
25
26
  cache_))),
26
27
  disable_cache_(opts.capacity == 0) {}
27
28
 
28
- CompressedSecondaryCache::~CompressedSecondaryCache() {
29
- assert(cache_res_mgr_->GetTotalReservedCacheSize() == 0);
30
- }
29
+ CompressedSecondaryCache::~CompressedSecondaryCache() {}
31
30
 
32
31
  std::unique_ptr<SecondaryCacheResultHandle> CompressedSecondaryCache::Lookup(
33
32
  const Slice& key, const Cache::CacheItemHelper* helper,
34
33
  Cache::CreateContext* create_context, bool /*wait*/, bool advise_erase,
35
34
  bool& kept_in_sec_cache) {
36
35
  assert(helper);
36
+ // This is a minor optimization. Its ok to skip it in TSAN in order to
37
+ // avoid a false positive.
38
+ #ifndef __SANITIZE_THREAD__
37
39
  if (disable_cache_) {
38
40
  return nullptr;
39
41
  }
42
+ #endif
40
43
 
41
44
  std::unique_ptr<SecondaryCacheResultHandle> handle;
42
45
  kept_in_sec_cache = false;
@@ -54,40 +57,65 @@ std::unique_ptr<SecondaryCacheResultHandle> CompressedSecondaryCache::Lookup(
54
57
  CacheAllocationPtr* ptr{nullptr};
55
58
  CacheAllocationPtr merged_value;
56
59
  size_t handle_value_charge{0};
60
+ const char* data_ptr = nullptr;
61
+ CacheTier source = CacheTier::kVolatileCompressedTier;
62
+ CompressionType type = cache_options_.compression_type;
57
63
  if (cache_options_.enable_custom_split_merge) {
58
64
  CacheValueChunk* value_chunk_ptr =
59
65
  reinterpret_cast<CacheValueChunk*>(handle_value);
60
66
  merged_value = MergeChunksIntoValue(value_chunk_ptr, handle_value_charge);
61
67
  ptr = &merged_value;
68
+ data_ptr = ptr->get();
62
69
  } else {
70
+ uint32_t type_32 = static_cast<uint32_t>(type);
71
+ uint32_t source_32 = static_cast<uint32_t>(source);
63
72
  ptr = reinterpret_cast<CacheAllocationPtr*>(handle_value);
64
73
  handle_value_charge = cache_->GetCharge(lru_handle);
74
+ data_ptr = ptr->get();
75
+ data_ptr = GetVarint32Ptr(data_ptr, data_ptr + 1,
76
+ static_cast<uint32_t*>(&type_32));
77
+ type = static_cast<CompressionType>(type_32);
78
+ data_ptr = GetVarint32Ptr(data_ptr, data_ptr + 1,
79
+ static_cast<uint32_t*>(&source_32));
80
+ source = static_cast<CacheTier>(source_32);
81
+ handle_value_charge -= (data_ptr - ptr->get());
65
82
  }
66
83
  MemoryAllocator* allocator = cache_options_.memory_allocator.get();
67
84
 
68
85
  Status s;
69
86
  Cache::ObjectPtr value{nullptr};
70
87
  size_t charge{0};
71
- if (cache_options_.compression_type == kNoCompression ||
72
- cache_options_.do_not_compress_roles.Contains(helper->role)) {
73
- s = helper->create_cb(Slice(ptr->get(), handle_value_charge),
74
- create_context, allocator, &value, &charge);
75
- } else {
76
- UncompressionContext uncompression_context(cache_options_.compression_type);
77
- UncompressionInfo uncompression_info(uncompression_context,
78
- UncompressionDict::GetEmptyDict(),
79
- cache_options_.compression_type);
80
-
81
- size_t uncompressed_size{0};
82
- CacheAllocationPtr uncompressed = UncompressData(
83
- uncompression_info, (char*)ptr->get(), handle_value_charge,
84
- &uncompressed_size, cache_options_.compress_format_version, allocator);
85
-
86
- if (!uncompressed) {
87
- cache_->Release(lru_handle, /*erase_if_last_ref=*/true);
88
- return nullptr;
88
+ if (source == CacheTier::kVolatileCompressedTier) {
89
+ if (cache_options_.compression_type == kNoCompression ||
90
+ cache_options_.do_not_compress_roles.Contains(helper->role)) {
91
+ s = helper->create_cb(Slice(data_ptr, handle_value_charge),
92
+ kNoCompression, CacheTier::kVolatileTier,
93
+ create_context, allocator, &value, &charge);
94
+ } else {
95
+ UncompressionContext uncompression_context(
96
+ cache_options_.compression_type);
97
+ UncompressionInfo uncompression_info(uncompression_context,
98
+ UncompressionDict::GetEmptyDict(),
99
+ cache_options_.compression_type);
100
+
101
+ size_t uncompressed_size{0};
102
+ CacheAllocationPtr uncompressed =
103
+ UncompressData(uncompression_info, (char*)data_ptr,
104
+ handle_value_charge, &uncompressed_size,
105
+ cache_options_.compress_format_version, allocator);
106
+
107
+ if (!uncompressed) {
108
+ cache_->Release(lru_handle, /*erase_if_last_ref=*/true);
109
+ return nullptr;
110
+ }
111
+ s = helper->create_cb(Slice(uncompressed.get(), uncompressed_size),
112
+ kNoCompression, CacheTier::kVolatileTier,
113
+ create_context, allocator, &value, &charge);
89
114
  }
90
- s = helper->create_cb(Slice(uncompressed.get(), uncompressed_size),
115
+ } else {
116
+ // The item was not compressed by us. Let the helper create_cb
117
+ // uncompress it
118
+ s = helper->create_cb(Slice(data_ptr, handle_value_charge), type, source,
91
119
  create_context, allocator, &value, &charge);
92
120
  }
93
121
 
@@ -112,45 +140,56 @@ std::unique_ptr<SecondaryCacheResultHandle> CompressedSecondaryCache::Lookup(
112
140
  return handle;
113
141
  }
114
142
 
115
- Status CompressedSecondaryCache::Insert(const Slice& key,
116
- Cache::ObjectPtr value,
117
- const Cache::CacheItemHelper* helper,
118
- bool force_insert) {
119
- if (value == nullptr) {
120
- return Status::InvalidArgument();
143
+ bool CompressedSecondaryCache::MaybeInsertDummy(const Slice& key) {
144
+ auto internal_helper = GetHelper(cache_options_.enable_custom_split_merge);
145
+ Cache::Handle* lru_handle = cache_->Lookup(key);
146
+ if (lru_handle == nullptr) {
147
+ PERF_COUNTER_ADD(compressed_sec_cache_insert_dummy_count, 1);
148
+ // Insert a dummy handle if the handle is evicted for the first time.
149
+ cache_->Insert(key, /*obj=*/nullptr, internal_helper, /*charge=*/0)
150
+ .PermitUncheckedError();
151
+ return true;
152
+ } else {
153
+ cache_->Release(lru_handle, /*erase_if_last_ref=*/false);
121
154
  }
122
155
 
123
- if (disable_cache_) {
156
+ return false;
157
+ }
158
+
159
+ Status CompressedSecondaryCache::InsertInternal(
160
+ const Slice& key, Cache::ObjectPtr value,
161
+ const Cache::CacheItemHelper* helper, CompressionType type,
162
+ CacheTier source) {
163
+ if (source != CacheTier::kVolatileCompressedTier &&
164
+ cache_options_.enable_custom_split_merge) {
165
+ // We don't support custom split/merge for the tiered case
124
166
  return Status::OK();
125
167
  }
126
168
 
127
169
  auto internal_helper = GetHelper(cache_options_.enable_custom_split_merge);
128
- if (!force_insert) {
129
- Cache::Handle* lru_handle = cache_->Lookup(key);
130
- if (lru_handle == nullptr) {
131
- PERF_COUNTER_ADD(compressed_sec_cache_insert_dummy_count, 1);
132
- // Insert a dummy handle if the handle is evicted for the first time.
133
- return cache_->Insert(key, /*obj=*/nullptr, internal_helper,
134
- /*charge=*/0);
135
- } else {
136
- cache_->Release(lru_handle, /*erase_if_last_ref=*/false);
137
- }
138
- }
139
-
140
- size_t size = (*helper->size_cb)(value);
170
+ char header[10];
171
+ char* payload = header;
172
+ payload = EncodeVarint32(payload, static_cast<uint32_t>(type));
173
+ payload = EncodeVarint32(payload, static_cast<uint32_t>(source));
174
+
175
+ size_t header_size = payload - header;
176
+ size_t data_size = (*helper->size_cb)(value);
177
+ size_t total_size = data_size + header_size;
141
178
  CacheAllocationPtr ptr =
142
- AllocateBlock(size, cache_options_.memory_allocator.get());
179
+ AllocateBlock(total_size, cache_options_.memory_allocator.get());
180
+ char* data_ptr = ptr.get() + header_size;
143
181
 
144
- Status s = (*helper->saveto_cb)(value, 0, size, ptr.get());
182
+ Status s = (*helper->saveto_cb)(value, 0, data_size, data_ptr);
145
183
  if (!s.ok()) {
146
184
  return s;
147
185
  }
148
- Slice val(ptr.get(), size);
186
+ Slice val(data_ptr, data_size);
149
187
 
150
188
  std::string compressed_val;
151
189
  if (cache_options_.compression_type != kNoCompression &&
190
+ type == kNoCompression &&
152
191
  !cache_options_.do_not_compress_roles.Contains(helper->role)) {
153
- PERF_COUNTER_ADD(compressed_sec_cache_uncompressed_bytes, size);
192
+ PERF_COUNTER_ADD(compressed_sec_cache_uncompressed_bytes, data_size);
154
193
  CompressionOptions compression_opts;
155
194
  CompressionContext compression_context(cache_options_.compression_type,
156
195
  compression_opts);
@@ -168,12 +207,14 @@ Status CompressedSecondaryCache::Insert(const Slice& key,
168
207
  }
169
208
 
170
209
  val = Slice(compressed_val);
171
- size = compressed_val.size();
172
- PERF_COUNTER_ADD(compressed_sec_cache_compressed_bytes, size);
210
+ data_size = compressed_val.size();
211
+ total_size = header_size + data_size;
212
+ PERF_COUNTER_ADD(compressed_sec_cache_compressed_bytes, data_size);
173
213
 
174
214
  if (!cache_options_.enable_custom_split_merge) {
175
- ptr = AllocateBlock(size, cache_options_.memory_allocator.get());
176
- memcpy(ptr.get(), compressed_val.data(), size);
215
+ ptr = AllocateBlock(total_size, cache_options_.memory_allocator.get());
216
+ data_ptr = ptr.get() + header_size;
217
+ memcpy(data_ptr, compressed_val.data(), data_size);
177
218
  }
178
219
  }
179
220
 
@@ -184,9 +225,43 @@ Status CompressedSecondaryCache::Insert(const Slice& key,
184
225
  SplitValueIntoChunks(val, cache_options_.compression_type, charge);
185
226
  return cache_->Insert(key, value_chunks_head, internal_helper, charge);
186
227
  } else {
228
+ std::memcpy(ptr.get(), header, header_size);
187
229
  CacheAllocationPtr* buf = new CacheAllocationPtr(std::move(ptr));
188
- return cache_->Insert(key, buf, internal_helper, size);
230
+ return cache_->Insert(key, buf, internal_helper, total_size);
231
+ }
232
+ }
233
+
234
+ Status CompressedSecondaryCache::Insert(const Slice& key,
235
+ Cache::ObjectPtr value,
236
+ const Cache::CacheItemHelper* helper,
237
+ bool force_insert) {
238
+ if (value == nullptr) {
239
+ return Status::InvalidArgument();
240
+ }
241
+
242
+ if (!force_insert && MaybeInsertDummy(key)) {
243
+ return Status::OK();
189
244
  }
245
+
246
+ return InsertInternal(key, value, helper, kNoCompression,
247
+ CacheTier::kVolatileCompressedTier);
248
+ }
249
+
250
+ Status CompressedSecondaryCache::InsertSaved(
251
+ const Slice& key, const Slice& saved, CompressionType type = kNoCompression,
252
+ CacheTier source = CacheTier::kVolatileTier) {
253
+ if (type == kNoCompression) {
254
+ return Status::OK();
255
+ }
256
+
257
+ auto slice_helper = &kSliceCacheItemHelper;
258
+ if (MaybeInsertDummy(key)) {
259
+ return Status::OK();
260
+ }
261
+
262
+ return InsertInternal(
263
+ key, static_cast<Cache::ObjectPtr>(const_cast<Slice*>(&saved)),
264
+ slice_helper, type, source);
190
265
  }
191
266
 
192
267
  void CompressedSecondaryCache::Erase(const Slice& key) { cache_->Erase(key); }
@@ -80,6 +80,9 @@ class CompressedSecondaryCache : public SecondaryCache {
80
80
  const Cache::CacheItemHelper* helper,
81
81
  bool force_insert) override;
82
82
 
83
+ Status InsertSaved(const Slice& key, const Slice& saved, CompressionType type,
84
+ CacheTier source) override;
85
+
83
86
  std::unique_ptr<SecondaryCacheResultHandle> Lookup(
84
87
  const Slice& key, const Cache::CacheItemHelper* helper,
85
88
  Cache::CreateContext* create_context, bool /*wait*/, bool advise_erase,
@@ -130,6 +133,12 @@ class CompressedSecondaryCache : public SecondaryCache {
130
133
  CacheAllocationPtr MergeChunksIntoValue(const void* chunks_head,
131
134
  size_t& charge);
132
135
 
136
+ bool MaybeInsertDummy(const Slice& key);
137
+
138
+ Status InsertInternal(const Slice& key, Cache::ObjectPtr value,
139
+ const Cache::CacheItemHelper* helper,
140
+ CompressionType type, CacheTier source);
141
+
133
142
  // TODO: clean up to use cleaner interfaces in typed_cache.h
134
143
  const Cache::CacheItemHelper* GetHelper(bool enable_custom_split_merge) const;
135
144
  std::shared_ptr<Cache> cache_;
@@ -989,11 +989,11 @@ class CompressedSecCacheTestWithTiered
989
989
  CompressedSecCacheTestWithTiered() {
990
990
  LRUCacheOptions lru_opts;
991
991
  HyperClockCacheOptions hcc_opts(
992
- /*_capacity=*/70 << 20,
992
+ /*_capacity=*/0,
993
993
  /*_estimated_entry_charge=*/256 << 10,
994
994
  /*_num_shard_bits=*/0);
995
- TieredVolatileCacheOptions opts;
996
- lru_opts.capacity = 70 << 20;
995
+ TieredCacheOptions opts;
996
+ lru_opts.capacity = 0;
997
997
  lru_opts.num_shard_bits = 0;
998
998
  lru_opts.high_pri_pool_ratio = 0;
999
999
  opts.cache_type = std::get<0>(GetParam());
@@ -1004,9 +1004,11 @@ class CompressedSecCacheTestWithTiered
1004
1004
  }
1005
1005
  opts.adm_policy = std::get<1>(GetParam());
1006
1006
  ;
1007
- opts.comp_cache_opts.capacity = 30 << 20;
1007
+ opts.comp_cache_opts.capacity = 0;
1008
1008
  opts.comp_cache_opts.num_shard_bits = 0;
1009
- cache_ = NewTieredVolatileCache(opts);
1009
+ opts.total_capacity = 100 << 20;
1010
+ opts.compressed_secondary_ratio = 0.3;
1011
+ cache_ = NewTieredCache(opts);
1010
1012
  cache_res_mgr_ =
1011
1013
  std::make_shared<CacheReservationManagerImpl<CacheEntryRole::kMisc>>(
1012
1014
  cache_);
@@ -1023,7 +1025,7 @@ class CompressedSecCacheTestWithTiered
1023
1025
  protected:
1024
1026
  CacheReservationManager* cache_res_mgr() { return cache_res_mgr_.get(); }
1025
1027
 
1026
- Cache* GetTieredCache() { return cache_.get(); }
1028
+ std::shared_ptr<Cache> GetTieredCache() { return cache_; }
1027
1029
 
1028
1030
  Cache* GetCache() {
1029
1031
  return static_cast_with_check<CacheWithSecondaryAdapter, Cache>(
@@ -1110,7 +1112,7 @@ TEST_P(CompressedSecCacheTestWithTiered, AdmissionPolicy) {
1110
1112
  return;
1111
1113
  }
1112
1114
 
1113
- Cache* tiered_cache = GetTieredCache();
1115
+ Cache* tiered_cache = GetTieredCache().get();
1114
1116
  Cache* cache = GetCache();
1115
1117
  std::vector<CacheKey> keys;
1116
1118
  std::vector<std::string> vals;
@@ -1165,6 +1167,199 @@ TEST_P(CompressedSecCacheTestWithTiered, AdmissionPolicy) {
1165
1167
  ASSERT_EQ(handle1, nullptr);
1166
1168
  }
1167
1169
 
1170
+ TEST_P(CompressedSecCacheTestWithTiered, DynamicUpdate) {
1171
+ CompressedSecondaryCache* sec_cache =
1172
+ reinterpret_cast<CompressedSecondaryCache*>(GetSecondaryCache());
1173
+ std::shared_ptr<Cache> tiered_cache = GetTieredCache();
1174
+
1175
+ // Use EXPECT_PRED3 instead of EXPECT_NEAR to void too many size_t to
1176
+ // double explicit casts
1177
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (30 << 20),
1178
+ GetPercent(30 << 20, 1));
1179
+ size_t sec_capacity;
1180
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1181
+ ASSERT_EQ(sec_capacity, (30 << 20));
1182
+
1183
+ ASSERT_OK(UpdateTieredCache(tiered_cache, 130 << 20));
1184
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (39 << 20),
1185
+ GetPercent(39 << 20, 1));
1186
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1187
+ ASSERT_EQ(sec_capacity, (39 << 20));
1188
+
1189
+ ASSERT_OK(UpdateTieredCache(tiered_cache, 70 << 20));
1190
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (21 << 20),
1191
+ GetPercent(21 << 20, 1));
1192
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1193
+ ASSERT_EQ(sec_capacity, (21 << 20));
1194
+
1195
+ ASSERT_OK(UpdateTieredCache(tiered_cache, 100 << 20));
1196
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (30 << 20),
1197
+ GetPercent(30 << 20, 1));
1198
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1199
+ ASSERT_EQ(sec_capacity, (30 << 20));
1200
+
1201
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.4));
1202
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (40 << 20),
1203
+ GetPercent(40 << 20, 1));
1204
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1205
+ ASSERT_EQ(sec_capacity, (40 << 20));
1206
+
1207
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.2));
1208
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (20 << 20),
1209
+ GetPercent(20 << 20, 1));
1210
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1211
+ ASSERT_EQ(sec_capacity, (20 << 20));
1212
+
1213
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 1.0));
1214
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (100 << 20),
1215
+ GetPercent(100 << 20, 1));
1216
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1217
+ ASSERT_EQ(sec_capacity, 100 << 20);
1218
+
1219
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.0));
1220
+ // Only check usage for LRU cache. HCC shows a 64KB usage for some reason
1221
+ if (std::get<0>(GetParam()) == PrimaryCacheType::kCacheTypeLRU) {
1222
+ ASSERT_EQ(GetCache()->GetUsage(), 0);
1223
+ }
1224
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1225
+ ASSERT_EQ(sec_capacity, 0);
1226
+
1227
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.3));
1228
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (30 << 20),
1229
+ GetPercent(30 << 20, 1));
1230
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1231
+ ASSERT_EQ(sec_capacity, (30 << 20));
1232
+ }
1233
+
1234
+ TEST_P(CompressedSecCacheTestWithTiered, DynamicUpdateWithReservation) {
1235
+ CompressedSecondaryCache* sec_cache =
1236
+ reinterpret_cast<CompressedSecondaryCache*>(GetSecondaryCache());
1237
+ std::shared_ptr<Cache> tiered_cache = GetTieredCache();
1238
+
1239
+ ASSERT_OK(cache_res_mgr()->UpdateCacheReservation(10 << 20));
1240
+ // Use EXPECT_PRED3 instead of EXPECT_NEAR to void too many size_t to
1241
+ // double explicit casts
1242
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (37 << 20),
1243
+ GetPercent(37 << 20, 1));
1244
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (3 << 20),
1245
+ GetPercent(3 << 20, 1));
1246
+ size_t sec_capacity;
1247
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1248
+ ASSERT_EQ(sec_capacity, (30 << 20));
1249
+
1250
+ ASSERT_OK(UpdateTieredCache(tiered_cache, 70 << 20));
1251
+ // Only check usage for LRU cache. HCC is slightly off for some reason
1252
+ if (std::get<0>(GetParam()) == PrimaryCacheType::kCacheTypeLRU) {
1253
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (28 << 20),
1254
+ GetPercent(28 << 20, 1));
1255
+ }
1256
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (3 << 20),
1257
+ GetPercent(3 << 20, 1));
1258
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1259
+ ASSERT_EQ(sec_capacity, (21 << 20));
1260
+
1261
+ ASSERT_OK(UpdateTieredCache(tiered_cache, 130 << 20));
1262
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (46 << 20),
1263
+ GetPercent(46 << 20, 1));
1264
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (3 << 20),
1265
+ GetPercent(3 << 20, 1));
1266
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1267
+ ASSERT_EQ(sec_capacity, (39 << 20));
1268
+
1269
+ ASSERT_OK(UpdateTieredCache(tiered_cache, 100 << 20));
1270
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (37 << 20),
1271
+ GetPercent(37 << 20, 1));
1272
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (3 << 20),
1273
+ GetPercent(3 << 20, 1));
1274
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1275
+ ASSERT_EQ(sec_capacity, (30 << 20));
1276
+
1277
+ ASSERT_OK(tiered_cache->GetSecondaryCacheCapacity(sec_capacity));
1278
+ ASSERT_EQ(sec_capacity, 30 << 20);
1279
+ size_t sec_usage;
1280
+ ASSERT_OK(tiered_cache->GetSecondaryCachePinnedUsage(sec_usage));
1281
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_usage, 3 << 20,
1282
+ GetPercent(3 << 20, 1));
1283
+
1284
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.39));
1285
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (45 << 20),
1286
+ GetPercent(45 << 20, 1));
1287
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (4 << 20),
1288
+ GetPercent(4 << 20, 1));
1289
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1290
+ ASSERT_EQ(sec_capacity, (39 << 20));
1291
+
1292
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.2));
1293
+ // Only check usage for LRU cache. HCC is slightly off for some reason
1294
+ if (std::get<0>(GetParam()) == PrimaryCacheType::kCacheTypeLRU) {
1295
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (28 << 20),
1296
+ GetPercent(28 << 20, 1));
1297
+ }
1298
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (2 << 20),
1299
+ GetPercent(2 << 20, 1));
1300
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1301
+ ASSERT_EQ(sec_capacity, (20 << 20));
1302
+
1303
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 1.0));
1304
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (100 << 20),
1305
+ GetPercent(100 << 20, 1));
1306
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (10 << 20),
1307
+ GetPercent(10 << 20, 1));
1308
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1309
+ ASSERT_EQ(sec_capacity, 100 << 20);
1310
+
1311
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.0));
1312
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (10 << 20),
1313
+ GetPercent(10 << 20, 1));
1314
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1315
+ ASSERT_EQ(sec_capacity, 0);
1316
+
1317
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.3));
1318
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (37 << 20),
1319
+ GetPercent(37 << 20, 1));
1320
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (3 << 20),
1321
+ GetPercent(3 << 20, 1));
1322
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1323
+ ASSERT_EQ(sec_capacity, 30 << 20);
1324
+
1325
+ ASSERT_OK(cache_res_mgr()->UpdateCacheReservation(0));
1326
+ }
1327
+
1328
+ TEST_P(CompressedSecCacheTestWithTiered, ReservationOverCapacity) {
1329
+ CompressedSecondaryCache* sec_cache =
1330
+ reinterpret_cast<CompressedSecondaryCache*>(GetSecondaryCache());
1331
+ std::shared_ptr<Cache> tiered_cache = GetTieredCache();
1332
+
1333
+ ASSERT_OK(cache_res_mgr()->UpdateCacheReservation(110 << 20));
1334
+ // Use EXPECT_PRED3 instead of EXPECT_NEAR to void too many size_t to
1335
+ // double explicit casts
1336
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (110 << 20),
1337
+ GetPercent(110 << 20, 1));
1338
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (30 << 20),
1339
+ GetPercent(30 << 20, 1));
1340
+ size_t sec_capacity;
1341
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1342
+ ASSERT_EQ(sec_capacity, (30 << 20));
1343
+
1344
+ ASSERT_OK(UpdateTieredCache(tiered_cache, -1, 0.39));
1345
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (110 << 20),
1346
+ GetPercent(110 << 20, 1));
1347
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (39 << 20),
1348
+ GetPercent(39 << 20, 1));
1349
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1350
+ ASSERT_EQ(sec_capacity, (39 << 20));
1351
+
1352
+ ASSERT_OK(cache_res_mgr()->UpdateCacheReservation(90 << 20));
1353
+ EXPECT_PRED3(CacheUsageWithinBounds, GetCache()->GetUsage(), (94 << 20),
1354
+ GetPercent(94 << 20, 1));
1355
+ EXPECT_PRED3(CacheUsageWithinBounds, sec_cache->TEST_GetUsage(), (35 << 20),
1356
+ GetPercent(35 << 20, 1));
1357
+ ASSERT_OK(sec_cache->GetCapacity(sec_capacity));
1358
+ ASSERT_EQ(sec_capacity, (39 << 20));
1359
+
1360
+ ASSERT_OK(cache_res_mgr()->UpdateCacheReservation(0));
1361
+ }
1362
+
1168
1363
  INSTANTIATE_TEST_CASE_P(
1169
1364
  CompressedSecCacheTests, CompressedSecCacheTestWithTiered,
1170
1365
  ::testing::Values(