@nxtedition/rocksdb 7.1.20 → 7.1.21

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 (262) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
  2. package/deps/rocksdb/rocksdb/Makefile +1 -1
  3. package/deps/rocksdb/rocksdb/TARGETS +2 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
  11. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
  13. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
  15. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
  18. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
  19. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
  27. package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
  29. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  47. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  48. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
  49. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
  50. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
  51. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
  60. package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
  61. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
  62. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
  63. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
  64. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
  65. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
  67. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
  72. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
  73. package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
  74. package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
  75. package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
  76. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
  77. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
  78. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
  79. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
  80. package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
  82. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
  83. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
  84. package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
  85. package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
  86. package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
  87. package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
  88. package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
  89. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  90. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  91. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
  92. package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
  93. package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
  94. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
  95. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
  98. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
  99. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  100. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
  102. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
  103. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
  104. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
  105. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
  106. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
  107. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
  108. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
  109. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
  110. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
  111. package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
  112. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
  113. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
  114. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
  116. package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
  117. package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
  118. package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
  120. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
  121. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
  122. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
  123. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
  124. package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
  126. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
  129. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
  130. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
  142. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
  143. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
  144. package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
  145. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
  146. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
  147. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
  148. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
  149. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
  150. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
  151. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
  152. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
  153. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
  154. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
  155. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
  157. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
  160. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
  162. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  164. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
  165. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
  166. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  167. package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
  168. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
  169. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  170. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  172. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
  173. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  174. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  175. package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
  176. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
  177. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  178. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  179. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
  180. package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
  181. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  182. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  183. package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
  184. package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
  185. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
  186. package/deps/rocksdb/rocksdb/src.mk +1 -0
  187. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
  188. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
  189. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
  192. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
  195. package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
  196. package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
  197. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
  198. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
  199. package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
  200. package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
  201. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
  202. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
  203. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
  204. package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
  205. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
  206. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
  207. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  208. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
  209. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
  210. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  211. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
  212. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
  213. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
  214. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
  215. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
  216. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
  217. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
  218. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
  219. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
  220. package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
  221. package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
  222. package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
  223. package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
  224. package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
  225. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
  226. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
  227. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
  228. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
  229. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
  230. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
  231. package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
  232. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
  233. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
  234. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
  235. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
  236. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
  237. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
  239. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
  240. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
  241. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
  242. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
  243. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
  244. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
  245. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
  246. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
  247. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
  248. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
  249. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
  250. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
  251. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
  252. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
  253. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
  254. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
  255. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
  256. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
  257. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
  258. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
  259. package/index.js +12 -4
  260. package/package.json +1 -1
  261. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  262. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -38,21 +38,14 @@ namespace lru_cache {
38
38
  // (refs == 0 && in_cache == true)
39
39
  // 3. Referenced externally AND not in hash table.
40
40
  // In that case the entry is not in the LRU list and not in hash table.
41
- // The entry can be freed when refs becomes 0.
41
+ // The entry must be freed if refs becomes 0 in this state.
42
42
  // (refs >= 1 && in_cache == false)
43
- // 4. The handle is never inserted into the LRUCache (both hash table and LRU
44
- // list) and it doesn't experience the above three states.
45
- // The entry can be freed when refs becomes 0.
46
- // (refs >= 1 && in_cache == false && IS_STANDALONE == true)
47
- // All newly created LRUHandles are in state 1 or 4. If you call
48
- // LRUCacheShard::Release on entry in state 1, it will go into state 2.
49
- // To move from state 1 to state 3, either call LRUCacheShard::Erase or
50
- // LRUCacheShard::Insert with the same key (but possibly different value).
51
- // To move from state 2 to state 1, use LRUCacheShard::Lookup.
52
- // Before destruction, make sure that no handles are in state 1. This means
53
- // that any successful LRUCacheShard::Lookup/LRUCacheShard::Insert have a
54
- // matching LRUCache::Release (to move into state 2) or LRUCacheShard::Erase
55
- // (to move into state 3).
43
+ // If you call LRUCacheShard::Release enough times on an entry in state 1, it
44
+ // will go into state 2. To move from state 1 to state 3, either call
45
+ // LRUCacheShard::Erase or LRUCacheShard::Insert with the same key (but
46
+ // possibly different value). To move from state 2 to state 1, use
47
+ // LRUCacheShard::Lookup.
48
+ // While refs > 0, public properties like value and deleter must not change.
56
49
 
57
50
  struct LRUHandle {
58
51
  void* value;
@@ -60,7 +53,7 @@ struct LRUHandle {
60
53
  Info() {}
61
54
  ~Info() {}
62
55
  Cache::DeleterFn deleter;
63
- const ShardedCache::CacheItemHelper* helper;
56
+ const Cache::CacheItemHelper* helper;
64
57
  } info_;
65
58
  // An entry is not added to the LRUHandleTable until the secondary cache
66
59
  // lookup is complete, so its safe to have this union.
@@ -77,45 +70,47 @@ struct LRUHandle {
77
70
  // The number of external refs to this entry. The cache itself is not counted.
78
71
  uint32_t refs;
79
72
 
80
- enum Flags : uint16_t {
73
+ // Mutable flags - access controlled by mutex
74
+ // The m_ and M_ prefixes (and im_ and IM_ later) are to hopefully avoid
75
+ // checking an M_ flag on im_flags or an IM_ flag on m_flags.
76
+ uint8_t m_flags;
77
+ enum MFlags : uint8_t {
81
78
  // Whether this entry is referenced by the hash table.
82
- IN_CACHE = (1 << 0),
83
- // Whether this entry is high priority entry.
84
- IS_HIGH_PRI = (1 << 1),
85
- // Whether this entry is in high-pri pool.
86
- IN_HIGH_PRI_POOL = (1 << 2),
79
+ M_IN_CACHE = (1 << 0),
87
80
  // Whether this entry has had any lookups (hits).
88
- HAS_HIT = (1 << 3),
81
+ M_HAS_HIT = (1 << 1),
82
+ // Whether this entry is in high-pri pool.
83
+ M_IN_HIGH_PRI_POOL = (1 << 2),
84
+ // Whether this entry is in low-pri pool.
85
+ M_IN_LOW_PRI_POOL = (1 << 3),
86
+ };
87
+
88
+ // "Immutable" flags - only set in single-threaded context and then
89
+ // can be accessed without mutex
90
+ uint8_t im_flags;
91
+ enum ImFlags : uint8_t {
92
+ // Whether this entry is high priority entry.
93
+ IM_IS_HIGH_PRI = (1 << 0),
94
+ // Whether this entry is low priority entry.
95
+ IM_IS_LOW_PRI = (1 << 1),
89
96
  // Can this be inserted into the secondary cache.
90
- IS_SECONDARY_CACHE_COMPATIBLE = (1 << 4),
97
+ IM_IS_SECONDARY_CACHE_COMPATIBLE = (1 << 2),
91
98
  // Is the handle still being read from a lower tier.
92
- IS_PENDING = (1 << 5),
99
+ IM_IS_PENDING = (1 << 3),
93
100
  // Whether this handle is still in a lower tier
94
- IS_IN_SECONDARY_CACHE = (1 << 6),
95
- // Whether this entry is low priority entry.
96
- IS_LOW_PRI = (1 << 7),
97
- // Whether this entry is in low-pri pool.
98
- IN_LOW_PRI_POOL = (1 << 8),
99
- // Whether this entry is not inserted into the cache (both hash table and
100
- // LRU list).
101
- IS_STANDALONE = (1 << 9),
101
+ IM_IS_IN_SECONDARY_CACHE = (1 << 4),
102
+ // Marks result handles that should not be inserted into cache
103
+ IM_IS_STANDALONE = (1 << 5),
102
104
  };
103
105
 
104
- uint16_t flags;
105
-
106
- #ifdef __SANITIZE_THREAD__
107
- // TSAN can report a false data race on flags, where one thread is writing
108
- // to one of the mutable bits and another thread is reading this immutable
109
- // bit. So precisely suppress that TSAN warning, we separate out this bit
110
- // during TSAN runs.
111
- bool is_secondary_cache_compatible_for_tsan;
112
- #endif // __SANITIZE_THREAD__
113
-
114
106
  // Beginning of the key (MUST BE THE LAST FIELD IN THIS STRUCT!)
115
107
  char key_data[1];
116
108
 
117
109
  Slice key() const { return Slice(key_data, key_length); }
118
110
 
111
+ // For HandleImpl concept
112
+ uint32_t GetHash() const { return hash; }
113
+
119
114
  // Increase the reference count by 1.
120
115
  void Ref() { refs++; }
121
116
 
@@ -129,104 +124,94 @@ struct LRUHandle {
129
124
  // Return true if there are external refs, false otherwise.
130
125
  bool HasRefs() const { return refs > 0; }
131
126
 
132
- bool InCache() const { return flags & IN_CACHE; }
133
- bool IsHighPri() const { return flags & IS_HIGH_PRI; }
134
- bool InHighPriPool() const { return flags & IN_HIGH_PRI_POOL; }
135
- bool IsLowPri() const { return flags & IS_LOW_PRI; }
136
- bool InLowPriPool() const { return flags & IN_LOW_PRI_POOL; }
137
- bool HasHit() const { return flags & HAS_HIT; }
127
+ bool InCache() const { return m_flags & M_IN_CACHE; }
128
+ bool IsHighPri() const { return im_flags & IM_IS_HIGH_PRI; }
129
+ bool InHighPriPool() const { return m_flags & M_IN_HIGH_PRI_POOL; }
130
+ bool IsLowPri() const { return im_flags & IM_IS_LOW_PRI; }
131
+ bool InLowPriPool() const { return m_flags & M_IN_LOW_PRI_POOL; }
132
+ bool HasHit() const { return m_flags & M_HAS_HIT; }
138
133
  bool IsSecondaryCacheCompatible() const {
139
- #ifdef __SANITIZE_THREAD__
140
- return is_secondary_cache_compatible_for_tsan;
141
- #else
142
- return flags & IS_SECONDARY_CACHE_COMPATIBLE;
143
- #endif // __SANITIZE_THREAD__
134
+ return im_flags & IM_IS_SECONDARY_CACHE_COMPATIBLE;
135
+ }
136
+ bool IsPending() const { return im_flags & IM_IS_PENDING; }
137
+ bool IsInSecondaryCache() const {
138
+ return im_flags & IM_IS_IN_SECONDARY_CACHE;
144
139
  }
145
- bool IsPending() const { return flags & IS_PENDING; }
146
- bool IsInSecondaryCache() const { return flags & IS_IN_SECONDARY_CACHE; }
147
- bool IsStandalone() const { return flags & IS_STANDALONE; }
140
+ bool IsStandalone() const { return im_flags & IM_IS_STANDALONE; }
148
141
 
149
142
  void SetInCache(bool in_cache) {
150
143
  if (in_cache) {
151
- flags |= IN_CACHE;
144
+ m_flags |= M_IN_CACHE;
152
145
  } else {
153
- flags &= ~IN_CACHE;
146
+ m_flags &= ~M_IN_CACHE;
154
147
  }
155
148
  }
156
149
 
157
150
  void SetPriority(Cache::Priority priority) {
158
151
  if (priority == Cache::Priority::HIGH) {
159
- flags |= IS_HIGH_PRI;
160
- flags &= ~IS_LOW_PRI;
152
+ im_flags |= IM_IS_HIGH_PRI;
153
+ im_flags &= ~IM_IS_LOW_PRI;
161
154
  } else if (priority == Cache::Priority::LOW) {
162
- flags &= ~IS_HIGH_PRI;
163
- flags |= IS_LOW_PRI;
155
+ im_flags &= ~IM_IS_HIGH_PRI;
156
+ im_flags |= IM_IS_LOW_PRI;
164
157
  } else {
165
- flags &= ~IS_HIGH_PRI;
166
- flags &= ~IS_LOW_PRI;
158
+ im_flags &= ~IM_IS_HIGH_PRI;
159
+ im_flags &= ~IM_IS_LOW_PRI;
167
160
  }
168
161
  }
169
162
 
170
163
  void SetInHighPriPool(bool in_high_pri_pool) {
171
164
  if (in_high_pri_pool) {
172
- flags |= IN_HIGH_PRI_POOL;
165
+ m_flags |= M_IN_HIGH_PRI_POOL;
173
166
  } else {
174
- flags &= ~IN_HIGH_PRI_POOL;
167
+ m_flags &= ~M_IN_HIGH_PRI_POOL;
175
168
  }
176
169
  }
177
170
 
178
171
  void SetInLowPriPool(bool in_low_pri_pool) {
179
172
  if (in_low_pri_pool) {
180
- flags |= IN_LOW_PRI_POOL;
173
+ m_flags |= M_IN_LOW_PRI_POOL;
181
174
  } else {
182
- flags &= ~IN_LOW_PRI_POOL;
175
+ m_flags &= ~M_IN_LOW_PRI_POOL;
183
176
  }
184
177
  }
185
178
 
186
- void SetHit() { flags |= HAS_HIT; }
179
+ void SetHit() { m_flags |= M_HAS_HIT; }
187
180
 
188
181
  void SetSecondaryCacheCompatible(bool compat) {
189
182
  if (compat) {
190
- flags |= IS_SECONDARY_CACHE_COMPATIBLE;
183
+ im_flags |= IM_IS_SECONDARY_CACHE_COMPATIBLE;
191
184
  } else {
192
- flags &= ~IS_SECONDARY_CACHE_COMPATIBLE;
185
+ im_flags &= ~IM_IS_SECONDARY_CACHE_COMPATIBLE;
193
186
  }
194
- #ifdef __SANITIZE_THREAD__
195
- is_secondary_cache_compatible_for_tsan = compat;
196
- #endif // __SANITIZE_THREAD__
197
187
  }
198
188
 
199
- void SetIncomplete(bool incomp) {
200
- if (incomp) {
201
- flags |= IS_PENDING;
189
+ void SetIsPending(bool pending) {
190
+ if (pending) {
191
+ im_flags |= IM_IS_PENDING;
202
192
  } else {
203
- flags &= ~IS_PENDING;
193
+ im_flags &= ~IM_IS_PENDING;
204
194
  }
205
195
  }
206
196
 
207
197
  void SetIsInSecondaryCache(bool is_in_secondary_cache) {
208
198
  if (is_in_secondary_cache) {
209
- flags |= IS_IN_SECONDARY_CACHE;
199
+ im_flags |= IM_IS_IN_SECONDARY_CACHE;
210
200
  } else {
211
- flags &= ~IS_IN_SECONDARY_CACHE;
201
+ im_flags &= ~IM_IS_IN_SECONDARY_CACHE;
212
202
  }
213
203
  }
214
204
 
215
205
  void SetIsStandalone(bool is_standalone) {
216
206
  if (is_standalone) {
217
- flags |= IS_STANDALONE;
207
+ im_flags |= IM_IS_STANDALONE;
218
208
  } else {
219
- flags &= ~IS_STANDALONE;
209
+ im_flags &= ~IM_IS_STANDALONE;
220
210
  }
221
211
  }
222
212
 
223
213
  void Free() {
224
214
  assert(refs == 0);
225
- #ifdef __SANITIZE_THREAD__
226
- // Here we can safely assert they are the same without a data race reported
227
- assert(((flags & IS_SECONDARY_CACHE_COMPATIBLE) != 0) ==
228
- is_secondary_cache_compatible_for_tsan);
229
- #endif // __SANITIZE_THREAD__
230
215
  if (!IsSecondaryCacheCompatible() && info_.deleter) {
231
216
  (*info_.deleter)(key(), value);
232
217
  } else if (IsSecondaryCacheCompatible()) {
@@ -280,9 +265,6 @@ struct LRUHandle {
280
265
  // 4.4.3's builtin hashtable.
281
266
  class LRUHandleTable {
282
267
  public:
283
- // If the table uses more hash bits than `max_upper_hash_bits`,
284
- // it will eat into the bits used for sharding, which are constant
285
- // for a given LRUHandleTable.
286
268
  explicit LRUHandleTable(int max_upper_hash_bits);
287
269
  ~LRUHandleTable();
288
270
 
@@ -291,8 +273,8 @@ class LRUHandleTable {
291
273
  LRUHandle* Remove(const Slice& key, uint32_t hash);
292
274
 
293
275
  template <typename T>
294
- void ApplyToEntriesRange(T func, uint32_t index_begin, uint32_t index_end) {
295
- for (uint32_t i = index_begin; i < index_end; i++) {
276
+ void ApplyToEntriesRange(T func, size_t index_begin, size_t index_end) {
277
+ for (size_t i = index_begin; i < index_end; i++) {
296
278
  LRUHandle* h = list_[i];
297
279
  while (h != nullptr) {
298
280
  auto n = h->next_hash;
@@ -331,23 +313,31 @@ class LRUHandleTable {
331
313
  };
332
314
 
333
315
  // A single shard of sharded cache.
334
- class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
316
+ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
335
317
  public:
336
318
  LRUCacheShard(size_t capacity, bool strict_capacity_limit,
337
319
  double high_pri_pool_ratio, double low_pri_pool_ratio,
338
320
  bool use_adaptive_mutex,
339
321
  CacheMetadataChargePolicy metadata_charge_policy,
340
- int max_upper_hash_bits,
341
- const std::shared_ptr<SecondaryCache>& secondary_cache);
342
- virtual ~LRUCacheShard() override = default;
322
+ int max_upper_hash_bits, SecondaryCache* secondary_cache);
323
+
324
+ public: // Type definitions expected as parameter to ShardedCache
325
+ using HandleImpl = LRUHandle;
326
+ using HashVal = uint32_t;
327
+ using HashCref = uint32_t;
328
+
329
+ public: // Function definitions expected as parameter to ShardedCache
330
+ static inline HashVal ComputeHash(const Slice& key) {
331
+ return Lower32of64(GetSliceNPHash64(key));
332
+ }
343
333
 
344
334
  // Separate from constructor so caller can easily make an array of LRUCache
345
335
  // if current usage is more than new capacity, the function will attempt to
346
336
  // free the needed space.
347
- virtual void SetCapacity(size_t capacity) override;
337
+ void SetCapacity(size_t capacity);
348
338
 
349
339
  // Set the flag to reject insertion if cache if full.
350
- virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
340
+ void SetStrictCapacityLimit(bool strict_capacity_limit);
351
341
 
352
342
  // Set percentage of capacity reserved for high-pri cache entries.
353
343
  void SetHighPriorityPoolRatio(double high_pri_pool_ratio);
@@ -356,58 +346,49 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
356
346
  void SetLowPriorityPoolRatio(double low_pri_pool_ratio);
357
347
 
358
348
  // Like Cache methods, but with an extra "hash" parameter.
359
- virtual Status Insert(const Slice& key, uint32_t hash, void* value,
360
- size_t charge, Cache::DeleterFn deleter,
361
- Cache::Handle** handle,
362
- Cache::Priority priority) override {
349
+ inline Status Insert(const Slice& key, uint32_t hash, void* value,
350
+ size_t charge, Cache::DeleterFn deleter,
351
+ LRUHandle** handle, Cache::Priority priority) {
363
352
  return Insert(key, hash, value, charge, deleter, nullptr, handle, priority);
364
353
  }
365
- virtual Status Insert(const Slice& key, uint32_t hash, void* value,
366
- const Cache::CacheItemHelper* helper, size_t charge,
367
- Cache::Handle** handle,
368
- Cache::Priority priority) override {
354
+ inline Status Insert(const Slice& key, uint32_t hash, void* value,
355
+ const Cache::CacheItemHelper* helper, size_t charge,
356
+ LRUHandle** handle, Cache::Priority priority) {
369
357
  assert(helper);
370
358
  return Insert(key, hash, value, charge, nullptr, helper, handle, priority);
371
359
  }
372
360
  // If helper_cb is null, the values of the following arguments don't matter.
373
- virtual Cache::Handle* Lookup(const Slice& key, uint32_t hash,
374
- const ShardedCache::CacheItemHelper* helper,
375
- const ShardedCache::CreateCallback& create_cb,
376
- ShardedCache::Priority priority, bool wait,
377
- Statistics* stats) override;
378
- virtual Cache::Handle* Lookup(const Slice& key, uint32_t hash) override {
361
+ LRUHandle* Lookup(const Slice& key, uint32_t hash,
362
+ const Cache::CacheItemHelper* helper,
363
+ const Cache::CreateCallback& create_cb,
364
+ Cache::Priority priority, bool wait, Statistics* stats);
365
+ inline LRUHandle* Lookup(const Slice& key, uint32_t hash) {
379
366
  return Lookup(key, hash, nullptr, nullptr, Cache::Priority::LOW, true,
380
367
  nullptr);
381
368
  }
382
- virtual bool Release(Cache::Handle* handle, bool /*useful*/,
383
- bool erase_if_last_ref) override {
384
- return Release(handle, erase_if_last_ref);
385
- }
386
- virtual bool IsReady(Cache::Handle* /*handle*/) override;
387
- virtual void Wait(Cache::Handle* /*handle*/) override {}
388
- virtual bool Ref(Cache::Handle* handle) override;
389
- virtual bool Release(Cache::Handle* handle,
390
- bool erase_if_last_ref = false) override;
391
- virtual void Erase(const Slice& key, uint32_t hash) override;
369
+ bool Release(LRUHandle* handle, bool useful, bool erase_if_last_ref);
370
+ bool IsReady(LRUHandle* /*handle*/);
371
+ void Wait(LRUHandle* /*handle*/) {}
372
+ bool Ref(LRUHandle* handle);
373
+ void Erase(const Slice& key, uint32_t hash);
392
374
 
393
375
  // Although in some platforms the update of size_t is atomic, to make sure
394
376
  // GetUsage() and GetPinnedUsage() work correctly under any platform, we'll
395
377
  // protect them with mutex_.
396
378
 
397
- virtual size_t GetUsage() const override;
398
- virtual size_t GetPinnedUsage() const override;
399
- virtual size_t GetOccupancyCount() const override;
400
- virtual size_t GetTableAddressCount() const override;
379
+ size_t GetUsage() const;
380
+ size_t GetPinnedUsage() const;
381
+ size_t GetOccupancyCount() const;
382
+ size_t GetTableAddressCount() const;
401
383
 
402
- virtual void ApplyToSomeEntries(
384
+ void ApplyToSomeEntries(
403
385
  const std::function<void(const Slice& key, void* value, size_t charge,
404
386
  DeleterFn deleter)>& callback,
405
- uint32_t average_entries_per_lock, uint32_t* state) override;
406
-
407
- virtual void EraseUnRefEntries() override;
387
+ size_t average_entries_per_lock, size_t* state);
408
388
 
409
- virtual std::string GetPrintableOptions() const override;
389
+ void EraseUnRefEntries();
410
390
 
391
+ public: // other function definitions
411
392
  void TEST_GetLRUList(LRUHandle** lru, LRUHandle** lru_low_pri,
412
393
  LRUHandle** lru_bottom_pri);
413
394
 
@@ -421,17 +402,19 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
421
402
  // Retrieves low pri pool ratio
422
403
  double GetLowPriPoolRatio();
423
404
 
405
+ void AppendPrintableOptions(std::string& /*str*/) const;
406
+
424
407
  private:
425
408
  friend class LRUCache;
426
409
  // Insert an item into the hash table and, if handle is null, insert into
427
410
  // the LRU list. Older items are evicted as necessary. If the cache is full
428
411
  // and free_handle_on_fail is true, the item is deleted and handle is set to
429
412
  // nullptr.
430
- Status InsertItem(LRUHandle* item, Cache::Handle** handle,
413
+ Status InsertItem(LRUHandle* item, LRUHandle** handle,
431
414
  bool free_handle_on_fail);
432
415
  Status Insert(const Slice& key, uint32_t hash, void* value, size_t charge,
433
416
  DeleterFn deleter, const Cache::CacheItemHelper* helper,
434
- Cache::Handle** handle, Cache::Priority priority);
417
+ LRUHandle** handle, Cache::Priority priority);
435
418
  // Promote an item looked up from the secondary cache to the LRU cache.
436
419
  // The item may be still in the secondary cache.
437
420
  // It is only inserted into the hash table and not the LRU list, and only
@@ -518,14 +501,15 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
518
501
  // don't mind mutex_ invoking the non-const actions.
519
502
  mutable DMutex mutex_;
520
503
 
521
- std::shared_ptr<SecondaryCache> secondary_cache_;
504
+ // Owned by LRUCache
505
+ SecondaryCache* secondary_cache_;
522
506
  };
523
507
 
524
508
  class LRUCache
525
509
  #ifdef NDEBUG
526
510
  final
527
511
  #endif
528
- : public ShardedCache {
512
+ : public ShardedCache<LRUCacheShard> {
529
513
  public:
530
514
  LRUCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit,
531
515
  double high_pri_pool_ratio, double low_pri_pool_ratio,
@@ -533,27 +517,21 @@ class LRUCache
533
517
  bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
534
518
  CacheMetadataChargePolicy metadata_charge_policy =
535
519
  kDontChargeCacheMetadata,
536
- const std::shared_ptr<SecondaryCache>& secondary_cache = nullptr);
537
- virtual ~LRUCache();
538
- virtual const char* Name() const override { return "LRUCache"; }
539
- virtual CacheShard* GetShard(uint32_t shard) override;
540
- virtual const CacheShard* GetShard(uint32_t shard) const override;
541
- virtual void* Value(Handle* handle) override;
542
- virtual size_t GetCharge(Handle* handle) const override;
543
- virtual uint32_t GetHash(Handle* handle) const override;
544
- virtual DeleterFn GetDeleter(Handle* handle) const override;
545
- virtual void DisownData() override;
546
- virtual void WaitAll(std::vector<Handle*>& handles) override;
547
- std::string GetPrintableOptions() const override;
520
+ std::shared_ptr<SecondaryCache> secondary_cache = nullptr);
521
+ const char* Name() const override { return "LRUCache"; }
522
+ void* Value(Handle* handle) override;
523
+ size_t GetCharge(Handle* handle) const override;
524
+ DeleterFn GetDeleter(Handle* handle) const override;
525
+ void WaitAll(std::vector<Handle*>& handles) override;
548
526
 
549
527
  // Retrieves number of elements in LRU, for unit test purpose only.
550
528
  size_t TEST_GetLRUSize();
551
529
  // Retrieves high pri pool ratio.
552
530
  double GetHighPriPoolRatio();
553
531
 
532
+ void AppendPrintableOptions(std::string& str) const override;
533
+
554
534
  private:
555
- LRUCacheShard* shards_ = nullptr;
556
- int num_shards_ = 0;
557
535
  std::shared_ptr<SecondaryCache> secondary_cache_;
558
536
  };
559
537