@nxtedition/rocksdb 7.1.14 → 7.1.16

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 (223) hide show
  1. package/binding.cc +1 -0
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +72 -18
  3. package/deps/rocksdb/rocksdb/Makefile +91 -11
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -4
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +5 -0
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +13 -8
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +2 -0
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +116 -57
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +958 -459
  10. package/deps/rocksdb/rocksdb/cache/clock_cache.h +407 -622
  11. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +104 -40
  12. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +23 -8
  13. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +350 -184
  14. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +12 -2
  15. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +2 -0
  16. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +130 -43
  17. package/deps/rocksdb/rocksdb/cache/lru_cache.h +24 -2
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +423 -98
  19. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +19 -2
  20. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +10 -7
  21. package/deps/rocksdb/rocksdb/crash_test.mk +2 -2
  22. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +46 -26
  23. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +9 -3
  24. package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +90 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +56 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -10
  27. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +64 -59
  28. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +11 -8
  29. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +92 -62
  30. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +159 -136
  31. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -13
  32. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +129 -57
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +81 -3
  34. package/deps/rocksdb/rocksdb/db/c.cc +29 -0
  35. package/deps/rocksdb/rocksdb/db/column_family.cc +10 -1
  36. package/deps/rocksdb/rocksdb/db/column_family_test.cc +21 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -36
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +344 -102
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +163 -28
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +52 -17
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +35 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -3
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +167 -11
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +8 -8
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +10 -13
  46. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +0 -117
  47. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +6 -49
  48. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +18 -11
  50. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +4 -10
  51. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +1 -1
  52. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +12 -0
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -93
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +28 -32
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +1 -1
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -9
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +2 -33
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -5
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +11 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -0
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2 -1
  63. package/deps/rocksdb/rocksdb/db/db_iter.cc +76 -138
  64. package/deps/rocksdb/rocksdb/db/db_iter.h +26 -23
  65. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1 -1
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +931 -0
  67. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +2 -2
  68. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -0
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +44 -22
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -14
  71. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +155 -0
  72. package/deps/rocksdb/rocksdb/db/db_write_test.cc +45 -0
  73. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  74. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -0
  75. package/deps/rocksdb/rocksdb/db/experimental.cc +5 -1
  76. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +24 -12
  77. package/deps/rocksdb/rocksdb/db/internal_stats.cc +7 -1
  78. package/deps/rocksdb/rocksdb/db/internal_stats.h +3 -0
  79. package/deps/rocksdb/rocksdb/db/memtable.cc +79 -18
  80. package/deps/rocksdb/rocksdb/db/memtable.h +5 -0
  81. package/deps/rocksdb/rocksdb/db/memtable_list.cc +26 -4
  82. package/deps/rocksdb/rocksdb/db/memtable_list.h +2 -1
  83. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +113 -0
  84. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +110 -0
  85. package/deps/rocksdb/rocksdb/db/{periodic_work_scheduler_test.cc → periodic_task_scheduler_test.cc} +33 -39
  86. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +12 -20
  87. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +6 -5
  88. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +12 -8
  89. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +20 -5
  90. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +14 -0
  91. package/deps/rocksdb/rocksdb/db/repair.cc +17 -8
  92. package/deps/rocksdb/rocksdb/db/repair_test.cc +2 -1
  93. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +49 -66
  94. package/deps/rocksdb/rocksdb/db/table_cache.cc +92 -63
  95. package/deps/rocksdb/rocksdb/db/table_cache.h +16 -9
  96. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  97. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +2 -2
  98. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -3
  99. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
  100. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  101. package/deps/rocksdb/rocksdb/db/version_edit.h +1 -2
  102. package/deps/rocksdb/rocksdb/db/version_set.cc +379 -145
  103. package/deps/rocksdb/rocksdb/db/version_set.h +26 -24
  104. package/deps/rocksdb/rocksdb/db/version_set_test.cc +9 -9
  105. package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
  106. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +10 -2
  107. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +2 -0
  108. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -8
  109. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +5 -8
  110. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +71 -0
  112. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +14 -0
  113. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +23 -0
  114. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +26 -1
  115. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +105 -34
  116. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +16 -8
  117. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -0
  118. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +4 -8
  119. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -8
  120. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +282 -25
  121. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  122. package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -1
  123. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +367 -177
  124. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +144 -56
  125. package/deps/rocksdb/rocksdb/file/filename.cc +3 -3
  126. package/deps/rocksdb/rocksdb/file/filename.h +4 -2
  127. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +415 -0
  128. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +2 -0
  129. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +36 -45
  130. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +21 -3
  131. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +11 -11
  132. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +15 -1
  133. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +163 -68
  134. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -12
  135. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +23 -5
  136. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +21 -17
  137. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +17 -0
  138. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +3 -3
  139. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -6
  140. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  141. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -0
  142. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +3 -3
  143. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -0
  144. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  145. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +3 -0
  146. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -1
  147. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +2 -1
  148. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -2
  149. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +4 -2
  150. package/deps/rocksdb/rocksdb/monitoring/histogram.h +2 -0
  151. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +15 -1
  152. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +17 -0
  153. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +14 -3
  154. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +3 -0
  155. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +50 -0
  156. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
  157. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +31 -32
  158. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -1
  159. package/deps/rocksdb/rocksdb/options/options.cc +2 -2
  160. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
  161. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -0
  162. package/deps/rocksdb/rocksdb/src.mk +4 -2
  163. package/deps/rocksdb/rocksdb/table/block_based/block.h +9 -8
  164. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +110 -99
  165. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +12 -10
  166. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +11 -2
  167. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +138 -83
  168. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +25 -24
  169. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +31 -30
  170. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +16 -13
  171. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +4 -4
  172. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -3
  173. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -3
  174. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +17 -19
  175. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  176. package/deps/rocksdb/rocksdb/table/format.cc +26 -29
  177. package/deps/rocksdb/rocksdb/table/format.h +44 -26
  178. package/deps/rocksdb/rocksdb/table/get_context.cc +17 -12
  179. package/deps/rocksdb/rocksdb/table/internal_iterator.h +7 -0
  180. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +4 -0
  181. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +950 -104
  182. package/deps/rocksdb/rocksdb/table/merging_iterator.h +28 -1
  183. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +3 -2
  184. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -1
  185. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +10 -9
  186. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +22 -20
  187. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +1 -1
  188. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  189. package/deps/rocksdb/rocksdb/table/table_builder.h +9 -21
  190. package/deps/rocksdb/rocksdb/table/table_test.cc +12 -12
  191. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +4 -4
  192. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +1 -0
  193. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +116 -34
  194. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +6 -1
  195. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  196. package/deps/rocksdb/rocksdb/util/autovector.h +12 -0
  197. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +3 -2
  198. package/deps/rocksdb/rocksdb/util/stderr_logger.cc +30 -0
  199. package/deps/rocksdb/rocksdb/util/stderr_logger.h +5 -18
  200. package/deps/rocksdb/rocksdb/util/timer.h +2 -3
  201. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -2
  202. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +1 -1
  203. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +1 -1
  204. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +34 -53
  205. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +9 -14
  206. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -4
  207. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +4 -0
  208. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +1 -1
  209. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +4 -3
  210. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +3 -1
  211. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +26 -8
  212. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +114 -16
  213. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  214. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +59 -0
  215. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +3 -0
  216. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +39 -0
  217. package/deps/rocksdb/rocksdb.gyp +0 -1
  218. package/index.js +6 -10
  219. package/package.json +1 -1
  220. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  221. package/prebuilds/linux-x64/node.napi.node +0 -0
  222. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +0 -168
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +0 -90
@@ -15,7 +15,6 @@
15
15
  #include <string>
16
16
  #include <vector>
17
17
 
18
- #include "cache/clock_cache.h"
19
18
  #include "cache/fast_lru_cache.h"
20
19
  #include "cache/lru_cache.h"
21
20
  #include "port/stack_trace.h"
@@ -23,7 +22,7 @@
23
22
  #include "util/coding.h"
24
23
  #include "util/string_util.h"
25
24
 
26
- // FastLRUCache and ClockCache only support 16-byte keys, so some of
25
+ // FastLRUCache and HyperClockCache only support 16-byte keys, so some of
27
26
  // the tests originally wrote for LRUCache do not work on the other caches.
28
27
  // Those tests were adapted to use 16-byte keys. We kept the original ones.
29
28
  // TODO: Remove the original tests if they ever become unused.
@@ -76,7 +75,7 @@ void EraseDeleter2(const Slice& /*key*/, void* value) {
76
75
  }
77
76
 
78
77
  const std::string kLRU = "lru";
79
- const std::string kClock = "clock";
78
+ const std::string kHyperClock = "hyper_clock";
80
79
  const std::string kFast = "fast";
81
80
 
82
81
  } // anonymous namespace
@@ -87,7 +86,7 @@ class CacheTest : public testing::TestWithParam<std::string> {
87
86
  static std::string type_;
88
87
 
89
88
  static void Deleter(const Slice& key, void* v) {
90
- if (type_ == kFast || type_ == kClock) {
89
+ if (type_ == kFast || type_ == kHyperClock) {
91
90
  current_->deleted_keys_.push_back(DecodeKey16Bytes(key));
92
91
  } else {
93
92
  current_->deleted_keys_.push_back(DecodeKey32Bits(key));
@@ -106,6 +105,8 @@ class CacheTest : public testing::TestWithParam<std::string> {
106
105
  std::shared_ptr<Cache> cache_;
107
106
  std::shared_ptr<Cache> cache2_;
108
107
 
108
+ size_t estimated_value_size_ = 1;
109
+
109
110
  CacheTest()
110
111
  : cache_(NewCache(kCacheSize, kNumShardBits, false)),
111
112
  cache2_(NewCache(kCacheSize2, kNumShardBits2, false)) {
@@ -120,14 +121,14 @@ class CacheTest : public testing::TestWithParam<std::string> {
120
121
  if (type == kLRU) {
121
122
  return NewLRUCache(capacity);
122
123
  }
123
- if (type == kClock) {
124
- return ExperimentalNewClockCache(
125
- capacity, 1 /*estimated_value_size*/, -1 /*num_shard_bits*/,
126
- false /*strict_capacity_limit*/, kDefaultCacheMetadataChargePolicy);
124
+ if (type == kHyperClock) {
125
+ return HyperClockCacheOptions(
126
+ capacity, estimated_value_size_ /*estimated_value_size*/)
127
+ .MakeSharedCache();
127
128
  }
128
129
  if (type == kFast) {
129
130
  return NewFastLRUCache(
130
- capacity, 1 /*estimated_value_size*/, -1 /*num_shard_bits*/,
131
+ capacity, estimated_value_size_, -1 /*num_shard_bits*/,
131
132
  false /*strict_capacity_limit*/, kDefaultCacheMetadataChargePolicy);
132
133
  }
133
134
  return nullptr;
@@ -146,10 +147,11 @@ class CacheTest : public testing::TestWithParam<std::string> {
146
147
  co.metadata_charge_policy = charge_policy;
147
148
  return NewLRUCache(co);
148
149
  }
149
- if (type == kClock) {
150
- return ExperimentalNewClockCache(capacity, 1 /*estimated_value_size*/,
151
- num_shard_bits, strict_capacity_limit,
152
- charge_policy);
150
+ if (type == kHyperClock) {
151
+ return HyperClockCacheOptions(capacity, 1 /*estimated_value_size*/,
152
+ num_shard_bits, strict_capacity_limit,
153
+ nullptr /*allocator*/, charge_policy)
154
+ .MakeSharedCache();
153
155
  }
154
156
  if (type == kFast) {
155
157
  return NewFastLRUCache(capacity, 1 /*estimated_value_size*/,
@@ -161,12 +163,11 @@ class CacheTest : public testing::TestWithParam<std::string> {
161
163
 
162
164
  // These functions encode/decode keys in tests cases that use
163
165
  // int keys.
164
- // Currently, FastLRUCache requires keys to be 16B long, whereas
165
- // LRUCache and ClockCache don't, so the encoding depends on
166
- // the cache type.
166
+ // Currently, HyperClockCache requires keys to be 16B long, whereas
167
+ // LRUCache doesn't, so the encoding depends on the cache type.
167
168
  std::string EncodeKey(int k) {
168
169
  auto type = GetParam();
169
- if (type == kFast || type == kClock) {
170
+ if (type == kFast || type == kHyperClock) {
170
171
  return EncodeKey16Bytes(k);
171
172
  } else {
172
173
  return EncodeKey32Bits(k);
@@ -175,7 +176,7 @@ class CacheTest : public testing::TestWithParam<std::string> {
175
176
 
176
177
  int DecodeKey(const Slice& k) {
177
178
  auto type = GetParam();
178
- if (type == kFast || type == kClock) {
179
+ if (type == kFast || type == kHyperClock) {
179
180
  return DecodeKey16Bytes(k);
180
181
  } else {
181
182
  return DecodeKey32Bits(k);
@@ -239,7 +240,10 @@ TEST_P(CacheTest, UsageTest) {
239
240
  auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
240
241
  auto precise_cache = NewCache(kCapacity, 0, false, kFullChargeCacheMetadata);
241
242
  ASSERT_EQ(0, cache->GetUsage());
242
- ASSERT_EQ(0, precise_cache->GetUsage());
243
+ size_t baseline_meta_usage = precise_cache->GetUsage();
244
+ if (type != kHyperClock) {
245
+ ASSERT_EQ(0, baseline_meta_usage);
246
+ }
243
247
 
244
248
  size_t usage = 0;
245
249
  char value[10] = "abcdef";
@@ -258,13 +262,17 @@ TEST_P(CacheTest, UsageTest) {
258
262
  kv_size, DumbDeleter));
259
263
  usage += kv_size;
260
264
  ASSERT_EQ(usage, cache->GetUsage());
261
- ASSERT_LT(usage, precise_cache->GetUsage());
265
+ if (type == kHyperClock) {
266
+ ASSERT_EQ(baseline_meta_usage + usage, precise_cache->GetUsage());
267
+ } else {
268
+ ASSERT_LT(usage, precise_cache->GetUsage());
269
+ }
262
270
  }
263
271
 
264
272
  cache->EraseUnRefEntries();
265
273
  precise_cache->EraseUnRefEntries();
266
274
  ASSERT_EQ(0, cache->GetUsage());
267
- ASSERT_EQ(0, precise_cache->GetUsage());
275
+ ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
268
276
 
269
277
  // make sure the cache will be overloaded
270
278
  for (size_t i = 1; i < kCapacity; ++i) {
@@ -284,7 +292,15 @@ TEST_P(CacheTest, UsageTest) {
284
292
  ASSERT_GT(kCapacity, cache->GetUsage());
285
293
  ASSERT_GT(kCapacity, precise_cache->GetUsage());
286
294
  ASSERT_LT(kCapacity * 0.95, cache->GetUsage());
287
- ASSERT_LT(kCapacity * 0.95, precise_cache->GetUsage());
295
+ if (type != kHyperClock) {
296
+ ASSERT_LT(kCapacity * 0.95, precise_cache->GetUsage());
297
+ } else {
298
+ // estimated value size of 1 is weird for clock cache, because
299
+ // almost all of the capacity will be used for metadata, and due to only
300
+ // using power of 2 table sizes, we might hit strict occupancy limit
301
+ // before hitting capacity limit.
302
+ ASSERT_LT(kCapacity * 0.80, precise_cache->GetUsage());
303
+ }
288
304
  }
289
305
 
290
306
  // TODO: This test takes longer than expected on ClockCache. This is
@@ -301,6 +317,10 @@ TEST_P(CacheTest, PinnedUsageTest) {
301
317
  const size_t kCapacity = 200000;
302
318
  auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
303
319
  auto precise_cache = NewCache(kCapacity, 8, false, kFullChargeCacheMetadata);
320
+ size_t baseline_meta_usage = precise_cache->GetUsage();
321
+ if (type != kHyperClock) {
322
+ ASSERT_EQ(0, baseline_meta_usage);
323
+ }
304
324
 
305
325
  size_t pinned_usage = 0;
306
326
  char value[10] = "abcdef";
@@ -390,7 +410,7 @@ TEST_P(CacheTest, PinnedUsageTest) {
390
410
  cache->EraseUnRefEntries();
391
411
  precise_cache->EraseUnRefEntries();
392
412
  ASSERT_EQ(0, cache->GetUsage());
393
- ASSERT_EQ(0, precise_cache->GetUsage());
413
+ ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
394
414
  }
395
415
 
396
416
  TEST_P(CacheTest, HitAndMiss) {
@@ -407,16 +427,30 @@ TEST_P(CacheTest, HitAndMiss) {
407
427
  ASSERT_EQ(-1, Lookup(300));
408
428
 
409
429
  Insert(100, 102);
410
- ASSERT_EQ(102, Lookup(100));
430
+ if (GetParam() == kHyperClock) {
431
+ // ClockCache usually doesn't overwrite on Insert
432
+ ASSERT_EQ(101, Lookup(100));
433
+ } else {
434
+ ASSERT_EQ(102, Lookup(100));
435
+ }
411
436
  ASSERT_EQ(201, Lookup(200));
412
437
  ASSERT_EQ(-1, Lookup(300));
413
438
 
414
439
  ASSERT_EQ(1U, deleted_keys_.size());
415
440
  ASSERT_EQ(100, deleted_keys_[0]);
416
- ASSERT_EQ(101, deleted_values_[0]);
441
+ if (GetParam() == kHyperClock) {
442
+ ASSERT_EQ(102, deleted_values_[0]);
443
+ } else {
444
+ ASSERT_EQ(101, deleted_values_[0]);
445
+ }
417
446
  }
418
447
 
419
448
  TEST_P(CacheTest, InsertSameKey) {
449
+ if (GetParam() == kHyperClock) {
450
+ ROCKSDB_GTEST_BYPASS(
451
+ "ClockCache doesn't guarantee Insert overwrite same key.");
452
+ return;
453
+ }
420
454
  Insert(1, 1);
421
455
  Insert(1, 2);
422
456
  ASSERT_EQ(2, Lookup(1));
@@ -442,6 +476,11 @@ TEST_P(CacheTest, Erase) {
442
476
  }
443
477
 
444
478
  TEST_P(CacheTest, EntriesArePinned) {
479
+ if (GetParam() == kHyperClock) {
480
+ ROCKSDB_GTEST_BYPASS(
481
+ "ClockCache doesn't guarantee Insert overwrite same key.");
482
+ return;
483
+ }
445
484
  Insert(100, 101);
446
485
  Cache::Handle* h1 = cache_->Lookup(EncodeKey(100));
447
486
  ASSERT_EQ(101, DecodeValue(cache_->Value(h1)));
@@ -474,7 +513,6 @@ TEST_P(CacheTest, EntriesArePinned) {
474
513
  TEST_P(CacheTest, EvictionPolicy) {
475
514
  Insert(100, 101);
476
515
  Insert(200, 201);
477
-
478
516
  // Frequently used entry must be kept around
479
517
  for (int i = 0; i < 2 * kCacheSize; i++) {
480
518
  Insert(1000+i, 2000+i);
@@ -503,6 +541,12 @@ TEST_P(CacheTest, ExternalRefPinsEntries) {
503
541
  for (int j = 0; j < 2 * kCacheSize + 100; j++) {
504
542
  Insert(1000 + j, 2000 + j);
505
543
  }
544
+ // Clock cache is even more stateful and needs more churn to evict
545
+ if (GetParam() == kHyperClock) {
546
+ for (int j = 0; j < kCacheSize; j++) {
547
+ Insert(11000 + j, 11000 + j);
548
+ }
549
+ }
506
550
  if (i < 2) {
507
551
  ASSERT_EQ(101, Lookup(100));
508
552
  }
@@ -697,9 +741,9 @@ TEST_P(CacheTest, ReleaseWithoutErase) {
697
741
 
698
742
  TEST_P(CacheTest, SetCapacity) {
699
743
  auto type = GetParam();
700
- if (type == kFast || type == kClock) {
744
+ if (type == kFast || type == kHyperClock) {
701
745
  ROCKSDB_GTEST_BYPASS(
702
- "FastLRUCache and ClockCache don't support arbitrary capacity "
746
+ "FastLRUCache and HyperClockCache don't support arbitrary capacity "
703
747
  "adjustments.");
704
748
  return;
705
749
  }
@@ -810,11 +854,6 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
810
854
  }
811
855
 
812
856
  TEST_P(CacheTest, OverCapacity) {
813
- auto type = GetParam();
814
- if (type == kClock) {
815
- ROCKSDB_GTEST_BYPASS("Requires LRU eviction policy.");
816
- return;
817
- }
818
857
  size_t n = 10;
819
858
 
820
859
  // a LRUCache with n entries and one shard only
@@ -842,23 +881,34 @@ TEST_P(CacheTest, OverCapacity) {
842
881
  for (int i = 0; i < static_cast<int>(n + 1); i++) {
843
882
  cache->Release(handles[i]);
844
883
  }
845
- // Make sure eviction is triggered.
846
- cache->SetCapacity(n);
847
884
 
848
- // cache is under capacity now since elements were released
849
- ASSERT_EQ(n, cache->GetUsage());
885
+ if (GetParam() == kHyperClock) {
886
+ // Make sure eviction is triggered.
887
+ ASSERT_OK(cache->Insert(EncodeKey(-1), nullptr, 1, &deleter, &handles[0]));
850
888
 
851
- // element 0 is evicted and the rest is there
852
- // This is consistent with the LRU policy since the element 0
853
- // was released first
854
- for (int i = 0; i < static_cast<int>(n + 1); i++) {
855
- std::string key = EncodeKey(i + 1);
856
- auto h = cache->Lookup(key);
857
- if (h) {
858
- ASSERT_NE(static_cast<size_t>(i), 0U);
859
- cache->Release(h);
860
- } else {
861
- ASSERT_EQ(static_cast<size_t>(i), 0U);
889
+ // cache is under capacity now since elements were released
890
+ ASSERT_GE(n, cache->GetUsage());
891
+
892
+ // clean up
893
+ cache->Release(handles[0]);
894
+ } else {
895
+ // LRUCache checks for over-capacity in Release.
896
+
897
+ // cache is exactly at capacity now with minimal eviction
898
+ ASSERT_EQ(n, cache->GetUsage());
899
+
900
+ // element 0 is evicted and the rest is there
901
+ // This is consistent with the LRU policy since the element 0
902
+ // was released first
903
+ for (int i = 0; i < static_cast<int>(n + 1); i++) {
904
+ std::string key = EncodeKey(i + 1);
905
+ auto h = cache->Lookup(key);
906
+ if (h) {
907
+ ASSERT_NE(static_cast<size_t>(i), 0U);
908
+ cache->Release(h);
909
+ } else {
910
+ ASSERT_EQ(static_cast<size_t>(i), 0U);
911
+ }
862
912
  }
863
913
  }
864
914
  }
@@ -966,19 +1016,31 @@ TEST_P(CacheTest, ApplyToAllEntriesDuringResize) {
966
1016
  }
967
1017
 
968
1018
  TEST_P(CacheTest, DefaultShardBits) {
969
- // test1: set the flag to false. Insert more keys than capacity. See if they
970
- // all go through.
971
- std::shared_ptr<Cache> cache = NewCache(16 * 1024L * 1024L);
1019
+ // Prevent excessive allocation (to save time & space)
1020
+ estimated_value_size_ = 100000;
1021
+ // Implementations use different minimum shard sizes
1022
+ size_t min_shard_size =
1023
+ (GetParam() == kHyperClock ? 32U * 1024U : 512U) * 1024U;
1024
+
1025
+ std::shared_ptr<Cache> cache = NewCache(32U * min_shard_size);
972
1026
  ShardedCache* sc = dynamic_cast<ShardedCache*>(cache.get());
973
1027
  ASSERT_EQ(5, sc->GetNumShardBits());
974
1028
 
975
- cache = NewLRUCache(511 * 1024L, -1, true);
1029
+ cache = NewCache(min_shard_size / 1000U * 999U);
976
1030
  sc = dynamic_cast<ShardedCache*>(cache.get());
977
1031
  ASSERT_EQ(0, sc->GetNumShardBits());
978
1032
 
979
- cache = NewLRUCache(1024L * 1024L * 1024L, -1, true);
1033
+ cache = NewCache(3U * 1024U * 1024U * 1024U);
980
1034
  sc = dynamic_cast<ShardedCache*>(cache.get());
1035
+ // current maximum of 6
981
1036
  ASSERT_EQ(6, sc->GetNumShardBits());
1037
+
1038
+ if constexpr (sizeof(size_t) > 4) {
1039
+ cache = NewCache(128U * min_shard_size);
1040
+ sc = dynamic_cast<ShardedCache*>(cache.get());
1041
+ // current maximum of 6
1042
+ ASSERT_EQ(6, sc->GetNumShardBits());
1043
+ }
982
1044
  }
983
1045
 
984
1046
  TEST_P(CacheTest, GetChargeAndDeleter) {
@@ -990,11 +1052,8 @@ TEST_P(CacheTest, GetChargeAndDeleter) {
990
1052
  cache_->Release(h1);
991
1053
  }
992
1054
 
993
- std::shared_ptr<Cache> (*new_clock_cache_func)(size_t, size_t, int, bool,
994
- CacheMetadataChargePolicy) =
995
- ExperimentalNewClockCache;
996
1055
  INSTANTIATE_TEST_CASE_P(CacheTestInstance, CacheTest,
997
- testing::Values(kLRU, kClock, kFast));
1056
+ testing::Values(kLRU, kHyperClock, kFast));
998
1057
  INSTANTIATE_TEST_CASE_P(CacheTestInstance, LRUCacheTest,
999
1058
  testing::Values(kLRU, kFast));
1000
1059