@nxtedition/rocksdb 7.0.24 → 7.0.27

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 (146) hide show
  1. package/binding.cc +12 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +5 -0
  3. package/deps/rocksdb/rocksdb/Makefile +6 -2
  4. package/deps/rocksdb/rocksdb/TARGETS +14 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +4 -1
  6. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +20 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +2 -2
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +44 -31
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +491 -722
  10. package/deps/rocksdb/rocksdb/cache/clock_cache.h +468 -2
  11. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -1
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +51 -52
  13. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +28 -16
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +12 -1
  15. package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -0
  16. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +170 -36
  17. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +63 -36
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +4 -6
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +57 -38
  21. package/deps/rocksdb/rocksdb/db/blob/blob_read_request.h +58 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +164 -74
  23. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +42 -29
  24. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +419 -62
  25. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +208 -8
  26. package/deps/rocksdb/rocksdb/db/c.cc +68 -0
  27. package/deps/rocksdb/rocksdb/db/c_test.c +95 -2
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +12 -3
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +92 -15
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +76 -4
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +52 -1
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +30 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +126 -0
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +203 -1584
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +93 -26
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +87 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +314 -0
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +328 -0
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +4 -1
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +174 -33
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +474 -7
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +825 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +46 -0
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +42 -0
  48. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +223 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +255 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +1253 -0
  51. package/deps/rocksdb/rocksdb/db/corruption_test.cc +32 -8
  52. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3 -1
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -8
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +376 -0
  55. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +103 -78
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +4 -6
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +0 -8
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +10 -3
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +21 -6
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +19 -1
  61. package/deps/rocksdb/rocksdb/db/db_iter.cc +91 -14
  62. package/deps/rocksdb/rocksdb/db/db_iter.h +5 -0
  63. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +33 -0
  64. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +79 -0
  65. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +2 -0
  66. package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
  67. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +5 -2
  68. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +185 -0
  69. package/deps/rocksdb/rocksdb/db/dbformat.cc +1 -4
  70. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -8
  71. package/deps/rocksdb/rocksdb/db/internal_stats.cc +71 -29
  72. package/deps/rocksdb/rocksdb/db/internal_stats.h +160 -5
  73. package/deps/rocksdb/rocksdb/db/log_reader.cc +29 -3
  74. package/deps/rocksdb/rocksdb/db/log_reader.h +12 -3
  75. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -3
  76. package/deps/rocksdb/rocksdb/db/version_edit.cc +6 -0
  77. package/deps/rocksdb/rocksdb/db/version_set.cc +93 -129
  78. package/deps/rocksdb/rocksdb/db/version_set.h +4 -4
  79. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -2
  80. package/deps/rocksdb/rocksdb/db/version_set_test.cc +42 -35
  81. package/deps/rocksdb/rocksdb/db/write_batch.cc +10 -2
  82. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -1
  83. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +10 -4
  84. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -3
  85. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -2
  86. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  87. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +5 -1
  88. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +140 -8
  89. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +12 -0
  90. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +46 -7
  91. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +7 -0
  92. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +27 -7
  93. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +8 -0
  94. package/deps/rocksdb/rocksdb/env/env_posix.cc +14 -0
  95. package/deps/rocksdb/rocksdb/env/env_test.cc +130 -1
  96. package/deps/rocksdb/rocksdb/env/fs_posix.cc +7 -1
  97. package/deps/rocksdb/rocksdb/env/io_posix.cc +18 -50
  98. package/deps/rocksdb/rocksdb/env/io_posix.h +53 -6
  99. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +8 -10
  100. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +3 -7
  101. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +239 -259
  102. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +84 -19
  103. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +24 -4
  104. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +1 -1
  105. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +31 -1
  106. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +11 -7
  107. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +2 -0
  108. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +14 -0
  109. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +20 -0
  110. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +37 -13
  111. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +7 -0
  112. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +14 -0
  113. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +9 -0
  114. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +13 -13
  115. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +12 -2
  116. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +38 -0
  117. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +7 -1
  118. package/deps/rocksdb/rocksdb/port/win/env_win.cc +17 -0
  119. package/deps/rocksdb/rocksdb/port/win/env_win.h +8 -0
  120. package/deps/rocksdb/rocksdb/port/win/io_win.cc +6 -3
  121. package/deps/rocksdb/rocksdb/src.mk +5 -0
  122. package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -2
  123. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  124. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +5 -2
  125. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +1 -1
  126. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +15 -12
  127. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +5 -4
  128. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  129. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1 -1
  130. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -4
  131. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +1 -2
  132. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -0
  133. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -2
  134. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +24 -4
  135. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
  136. package/deps/rocksdb/rocksdb/util/compression.h +2 -0
  137. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +18 -1
  138. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +67 -4
  139. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +8 -0
  140. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +15 -12
  141. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -2
  142. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
  143. package/deps/rocksdb/rocksdb.gyp +5 -1
  144. package/package.json +1 -1
  145. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  146. package/prebuilds/linux-x64/node.napi.node +0 -0
package/binding.cc CHANGED
@@ -14,6 +14,7 @@
14
14
  #include <rocksdb/slice_transform.h>
15
15
  #include <rocksdb/table.h>
16
16
  #include <rocksdb/write_batch.h>
17
+ #include <rocksdb/merge_operator.h>
17
18
 
18
19
  #include <array>
19
20
  #include <memory>
@@ -701,6 +702,8 @@ struct OpenWorker final : public Worker {
701
702
 
702
703
  template <typename T, typename U>
703
704
  rocksdb::Status InitOptions(napi_env env, T& columnOptions, const U& options) {
705
+ rocksdb::ConfigOptions configOptions;
706
+
704
707
  const auto memtable_memory_budget = Uint32Property(env, options, "memtableMemoryBudget").value_or(256 * 1024 * 1024);
705
708
 
706
709
  const auto compaction = StringProperty(env, options, "compaction").value_or("level");
@@ -746,18 +749,22 @@ rocksdb::Status InitOptions(napi_env env, T& columnOptions, const U& options) {
746
749
 
747
750
  const auto prefixExtractorOpt = StringProperty(env, options, "prefixExtractor");
748
751
  if (prefixExtractorOpt) {
749
- rocksdb::ConfigOptions configOptions;
750
752
  ROCKS_STATUS_RETURN(
751
753
  rocksdb::SliceTransform::CreateFromString(configOptions, *prefixExtractorOpt, &columnOptions.prefix_extractor));
752
754
  }
753
755
 
754
756
  const auto comparatorOpt = StringProperty(env, options, "comparator");
755
757
  if (comparatorOpt) {
756
- rocksdb::ConfigOptions configOptions;
757
758
  ROCKS_STATUS_RETURN(
758
759
  rocksdb::Comparator::CreateFromString(configOptions, *comparatorOpt, &columnOptions.comparator));
759
760
  }
760
761
 
762
+ const auto mergeOperatorOpt = StringProperty(env, options, "mergeOperator");
763
+ if (mergeOperatorOpt) {
764
+ ROCKS_STATUS_RETURN(
765
+ rocksdb::MergeOperator::CreateFromString(configOptions, *mergeOperatorOpt, &columnOptions.merge_operator));
766
+ }
767
+
761
768
  const auto cacheSize = Uint32Property(env, options, "cacheSize").value_or(8 << 20);
762
769
 
763
770
  rocksdb::BlockBasedTableOptions tableOptions;
@@ -1054,7 +1061,9 @@ struct UpdatesNextWorker final : public rocksdb::WriteBatch::Handler, public Wor
1054
1061
  } else {
1055
1062
  cache_.emplace_back(std::nullopt);
1056
1063
  }
1057
- cache_.emplace_back(GetColumnName(column_family_id));
1064
+ if (!updates_->column_family_id_) {
1065
+ cache_.emplace_back(GetColumnName(column_family_id));
1066
+ }
1058
1067
  return rocksdb::Status::OK();
1059
1068
  }
1060
1069
 
@@ -627,7 +627,11 @@ set(SOURCES
627
627
  db/compaction/compaction_picker_fifo.cc
628
628
  db/compaction/compaction_picker_level.cc
629
629
  db/compaction/compaction_picker_universal.cc
630
+ db/compaction/compaction_service_job.cc
631
+ db/compaction/compaction_state.cc
632
+ db/compaction/compaction_outputs.cc
630
633
  db/compaction/sst_partitioner.cc
634
+ db/compaction/subcompaction_state.cc
631
635
  db/convenience.cc
632
636
  db/db_filesnapshot.cc
633
637
  db/db_impl/compacted_db_impl.cc
@@ -1231,6 +1235,7 @@ if(WITH_TESTS)
1231
1235
  db/compaction/compaction_iterator_test.cc
1232
1236
  db/compaction/compaction_picker_test.cc
1233
1237
  db/compaction/compaction_service_test.cc
1238
+ db/compaction/tiered_compaction_test.cc
1234
1239
  db/comparator_db_test.cc
1235
1240
  db/corruption_test.cc
1236
1241
  db/cuckoo_table_db_test.cc
@@ -136,6 +136,7 @@ CXXFLAGS += $(PLATFORM_SHARED_CFLAGS) -DROCKSDB_DLL
136
136
  CFLAGS += $(PLATFORM_SHARED_CFLAGS) -DROCKSDB_DLL
137
137
  endif
138
138
 
139
+ GIT_COMMAND ?= git
139
140
  ifeq ($(USE_COROUTINES), 1)
140
141
  USE_FOLLY = 1
141
142
  OPT += -DUSE_COROUTINES
@@ -1782,6 +1783,9 @@ write_unprepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_unpre
1782
1783
  timestamped_snapshot_test: $(OBJ_DIR)/utilities/transactions/timestamped_snapshot_test.o $(TEST_LIBRARY) $(LIBRARY)
1783
1784
  $(AM_LINK)
1784
1785
 
1786
+ tiered_compaction_test: $(OBJ_DIR)/db/compaction/tiered_compaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1787
+ $(AM_LINK)
1788
+
1785
1789
  sst_dump: $(OBJ_DIR)/tools/sst_dump.o $(TOOLS_LIBRARY) $(LIBRARY)
1786
1790
  $(AM_LINK)
1787
1791
 
@@ -2356,9 +2360,9 @@ commit_prereq:
2356
2360
  # integration.
2357
2361
  checkout_folly:
2358
2362
  if [ -e third-party/folly ]; then \
2359
- cd third-party/folly && git fetch origin; \
2363
+ cd third-party/folly && ${GIT_COMMAND} fetch origin; \
2360
2364
  else \
2361
- cd third-party && git clone https://github.com/facebook/folly.git; \
2365
+ cd third-party && ${GIT_COMMAND} clone https://github.com/facebook/folly.git; \
2362
2366
  fi
2363
2367
  @# Pin to a particular version for public CI, so that PR authors don't
2364
2368
  @# need to worry about folly breaking our integration. Update periodically
@@ -38,11 +38,15 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
38
38
  "db/compaction/compaction.cc",
39
39
  "db/compaction/compaction_iterator.cc",
40
40
  "db/compaction/compaction_job.cc",
41
+ "db/compaction/compaction_outputs.cc",
41
42
  "db/compaction/compaction_picker.cc",
42
43
  "db/compaction/compaction_picker_fifo.cc",
43
44
  "db/compaction/compaction_picker_level.cc",
44
45
  "db/compaction/compaction_picker_universal.cc",
46
+ "db/compaction/compaction_service_job.cc",
47
+ "db/compaction/compaction_state.cc",
45
48
  "db/compaction/sst_partitioner.cc",
49
+ "db/compaction/subcompaction_state.cc",
46
50
  "db/convenience.cc",
47
51
  "db/db_filesnapshot.cc",
48
52
  "db/db_impl/compacted_db_impl.cc",
@@ -368,11 +372,15 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
368
372
  "db/compaction/compaction.cc",
369
373
  "db/compaction/compaction_iterator.cc",
370
374
  "db/compaction/compaction_job.cc",
375
+ "db/compaction/compaction_outputs.cc",
371
376
  "db/compaction/compaction_picker.cc",
372
377
  "db/compaction/compaction_picker_fifo.cc",
373
378
  "db/compaction/compaction_picker_level.cc",
374
379
  "db/compaction/compaction_picker_universal.cc",
380
+ "db/compaction/compaction_service_job.cc",
381
+ "db/compaction/compaction_state.cc",
375
382
  "db/compaction/sst_partitioner.cc",
383
+ "db/compaction/subcompaction_state.cc",
376
384
  "db/convenience.cc",
377
385
  "db/db_filesnapshot.cc",
378
386
  "db/db_impl/compacted_db_impl.cc",
@@ -5764,6 +5772,12 @@ cpp_unittest_wrapper(name="thread_local_test",
5764
5772
  extra_compiler_flags=[])
5765
5773
 
5766
5774
 
5775
+ cpp_unittest_wrapper(name="tiered_compaction_test",
5776
+ srcs=["db/compaction/tiered_compaction_test.cc"],
5777
+ deps=[":rocksdb_test_lib"],
5778
+ extra_compiler_flags=[])
5779
+
5780
+
5767
5781
  cpp_unittest_wrapper(name="timer_queue_test",
5768
5782
  srcs=["util/timer_queue_test.cc"],
5769
5783
  deps=[":rocksdb_test_lib"],
@@ -13,6 +13,7 @@
13
13
  #include <set>
14
14
  #include <sstream>
15
15
 
16
+ #include "cache/clock_cache.h"
16
17
  #include "cache/fast_lru_cache.h"
17
18
  #include "db/db_impl/db_impl.h"
18
19
  #include "monitoring/histogram.h"
@@ -284,7 +285,9 @@ class CacheBench {
284
285
  }
285
286
 
286
287
  if (FLAGS_cache_type == "clock_cache") {
287
- cache_ = NewClockCache(FLAGS_cache_size, FLAGS_num_shard_bits);
288
+ cache_ = ExperimentalNewClockCache(
289
+ FLAGS_cache_size, FLAGS_value_bytes, FLAGS_num_shard_bits,
290
+ false /*strict_capacity_limit*/, kDefaultCacheMetadataChargePolicy);
288
291
  if (!cache_) {
289
292
  fprintf(stderr, "Clock cache not supported.\n");
290
293
  exit(1);
@@ -84,6 +84,16 @@ class CacheHandleGuard {
84
84
  Cache::Handle* GetCacheHandle() const { return handle_; }
85
85
  T* GetValue() const { return value_; }
86
86
 
87
+ void TransferTo(Cleanable* cleanable) {
88
+ if (cleanable) {
89
+ if (handle_ != nullptr) {
90
+ assert(cache_);
91
+ cleanable->RegisterCleanup(&ReleaseCacheHandle, cache_, handle_);
92
+ }
93
+ }
94
+ ResetFields();
95
+ }
96
+
87
97
  void Reset() {
88
98
  ReleaseHandle();
89
99
  ResetFields();
@@ -105,6 +115,16 @@ class CacheHandleGuard {
105
115
  value_ = nullptr;
106
116
  }
107
117
 
118
+ static void ReleaseCacheHandle(void* arg1, void* arg2) {
119
+ Cache* const cache = static_cast<Cache*>(arg1);
120
+ assert(cache);
121
+
122
+ Cache::Handle* const cache_handle = static_cast<Cache::Handle*>(arg2);
123
+ assert(cache_handle);
124
+
125
+ cache->Release(cache_handle);
126
+ }
127
+
108
128
  private:
109
129
  Cache* cache_ = nullptr;
110
130
  Cache::Handle* handle_ = nullptr;
@@ -147,7 +147,7 @@ TEST(CacheReservationManagerIncreaseReservcationOnFullCacheTest,
147
147
 
148
148
  std::size_t new_mem_used = kSmallCacheCapacity + 1;
149
149
  Status s = test_cache_rev_mng->UpdateCacheReservation(new_mem_used);
150
- EXPECT_EQ(s, Status::Incomplete())
150
+ EXPECT_EQ(s, Status::MemoryLimit())
151
151
  << "Failed to return status to indicate failure of dummy entry insertion "
152
152
  "during cache reservation on full cache";
153
153
  EXPECT_GE(test_cache_rev_mng->GetTotalReservedCacheSize(),
@@ -192,7 +192,7 @@ TEST(CacheReservationManagerIncreaseReservcationOnFullCacheTest,
192
192
  // Create cache full again for subsequent tests
193
193
  new_mem_used = kSmallCacheCapacity + 1;
194
194
  s = test_cache_rev_mng->UpdateCacheReservation(new_mem_used);
195
- EXPECT_EQ(s, Status::Incomplete())
195
+ EXPECT_EQ(s, Status::MemoryLimit())
196
196
  << "Failed to return status to indicate failure of dummy entry insertion "
197
197
  "during cache reservation on full cache";
198
198
  EXPECT_GE(test_cache_rev_mng->GetTotalReservedCacheSize(),
@@ -77,7 +77,7 @@ class CacheTest : public testing::TestWithParam<std::string> {
77
77
  static std::string type_;
78
78
 
79
79
  static void Deleter(const Slice& key, void* v) {
80
- if (type_ == kFast) {
80
+ if (type_ == kFast || type_ == kClock) {
81
81
  current_->deleted_keys_.push_back(DecodeKey16Bytes(key));
82
82
  } else {
83
83
  current_->deleted_keys_.push_back(DecodeKey32Bits(key));
@@ -111,7 +111,9 @@ class CacheTest : public testing::TestWithParam<std::string> {
111
111
  return NewLRUCache(capacity);
112
112
  }
113
113
  if (type == kClock) {
114
- return NewClockCache(capacity);
114
+ return ExperimentalNewClockCache(
115
+ capacity, 1 /*estimated_value_size*/, -1 /*num_shard_bits*/,
116
+ false /*strict_capacity_limit*/, kDefaultCacheMetadataChargePolicy);
115
117
  }
116
118
  if (type == kFast) {
117
119
  return NewFastLRUCache(
@@ -135,8 +137,9 @@ class CacheTest : public testing::TestWithParam<std::string> {
135
137
  return NewLRUCache(co);
136
138
  }
137
139
  if (type == kClock) {
138
- return NewClockCache(capacity, num_shard_bits, strict_capacity_limit,
139
- charge_policy);
140
+ return ExperimentalNewClockCache(capacity, 1 /*estimated_value_size*/,
141
+ num_shard_bits, strict_capacity_limit,
142
+ charge_policy);
140
143
  }
141
144
  if (type == kFast) {
142
145
  return NewFastLRUCache(capacity, 1 /*estimated_value_size*/,
@@ -152,7 +155,8 @@ class CacheTest : public testing::TestWithParam<std::string> {
152
155
  // LRUCache and ClockCache don't, so the encoding depends on
153
156
  // the cache type.
154
157
  std::string EncodeKey(int k) {
155
- if (GetParam() == kFast) {
158
+ auto type = GetParam();
159
+ if (type == kFast || type == kClock) {
156
160
  return EncodeKey16Bytes(k);
157
161
  } else {
158
162
  return EncodeKey32Bits(k);
@@ -160,7 +164,8 @@ class CacheTest : public testing::TestWithParam<std::string> {
160
164
  }
161
165
 
162
166
  int DecodeKey(const Slice& k) {
163
- if (GetParam() == kFast) {
167
+ auto type = GetParam();
168
+ if (type == kFast || type == kClock) {
164
169
  return DecodeKey16Bytes(k);
165
170
  } else {
166
171
  return DecodeKey32Bits(k);
@@ -217,8 +222,9 @@ std::string CacheTest::type_;
217
222
  class LRUCacheTest : public CacheTest {};
218
223
 
219
224
  TEST_P(CacheTest, UsageTest) {
220
- if (GetParam() == kFast) {
221
- ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
225
+ auto type = GetParam();
226
+ if (type == kFast || type == kClock) {
227
+ ROCKSDB_GTEST_BYPASS("FastLRUCache and ClockCache require 16-byte keys.");
222
228
  return;
223
229
  }
224
230
 
@@ -266,8 +272,9 @@ TEST_P(CacheTest, UsageTest) {
266
272
  }
267
273
 
268
274
  TEST_P(CacheTest, PinnedUsageTest) {
269
- if (GetParam() == kFast) {
270
- ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
275
+ auto type = GetParam();
276
+ if (type == kFast || type == kClock) {
277
+ ROCKSDB_GTEST_BYPASS("FastLRUCache and ClockCache require 16-byte keys.");
271
278
  return;
272
279
  }
273
280
 
@@ -492,8 +499,10 @@ TEST_P(CacheTest, EvictionPolicyRef) {
492
499
  Insert(302, 103);
493
500
  Insert(303, 104);
494
501
 
495
- // Insert entries much more than Cache capacity
496
- for (int i = 0; i < kCacheSize * 2; i++) {
502
+ // Insert entries much more than cache capacity.
503
+ double load_factor =
504
+ std::min(fast_lru_cache::kLoadFactor, clock_cache::kLoadFactor);
505
+ for (int i = 0; i < 2 * static_cast<int>(kCacheSize / load_factor); i++) {
497
506
  Insert(1000 + i, 2000 + i);
498
507
  }
499
508
 
@@ -523,8 +532,9 @@ TEST_P(CacheTest, EvictionPolicyRef) {
523
532
  }
524
533
 
525
534
  TEST_P(CacheTest, EvictEmptyCache) {
526
- if (GetParam() == kFast) {
527
- ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
535
+ auto type = GetParam();
536
+ if (type == kFast || type == kClock) {
537
+ ROCKSDB_GTEST_BYPASS("FastLRUCache and ClockCache require 16-byte keys.");
528
538
  return;
529
539
  }
530
540
 
@@ -534,8 +544,9 @@ TEST_P(CacheTest, EvictEmptyCache) {
534
544
  }
535
545
 
536
546
  TEST_P(CacheTest, EraseFromDeleter) {
537
- if (GetParam() == kFast) {
538
- ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
547
+ auto type = GetParam();
548
+ if (type == kFast || type == kClock) {
549
+ ROCKSDB_GTEST_BYPASS("FastLRUCache and ClockCache require 16-byte keys.");
539
550
  return;
540
551
  }
541
552
 
@@ -650,8 +661,10 @@ TEST_P(CacheTest, ReleaseWithoutErase) {
650
661
  }
651
662
 
652
663
  TEST_P(CacheTest, SetCapacity) {
653
- if (GetParam() == kFast) {
654
- ROCKSDB_GTEST_BYPASS("FastLRUCache doesn't support capacity adjustments.");
664
+ auto type = GetParam();
665
+ if (type == kFast || type == kClock) {
666
+ ROCKSDB_GTEST_BYPASS(
667
+ "FastLRUCache and ClockCache don't support capacity adjustments.");
655
668
  return;
656
669
  }
657
670
  // test1: increase capacity
@@ -702,9 +715,11 @@ TEST_P(CacheTest, SetCapacity) {
702
715
  }
703
716
 
704
717
  TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
705
- if (GetParam() == kFast) {
718
+ auto type = GetParam();
719
+ if (type == kFast || type == kClock) {
706
720
  ROCKSDB_GTEST_BYPASS(
707
- "FastLRUCache doesn't support an unbounded number of inserts beyond "
721
+ "FastLRUCache and ClockCache don't support an unbounded number of "
722
+ "inserts beyond "
708
723
  "capacity.");
709
724
  return;
710
725
  }
@@ -727,7 +742,7 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
727
742
  cache->SetStrictCapacityLimit(true);
728
743
  Cache::Handle* handle;
729
744
  s = cache->Insert(extra_key, extra_value, 1, &deleter, &handle);
730
- ASSERT_TRUE(s.IsIncomplete());
745
+ ASSERT_TRUE(s.IsMemoryLimit());
731
746
  ASSERT_EQ(nullptr, handle);
732
747
  ASSERT_EQ(10, cache->GetUsage());
733
748
 
@@ -744,7 +759,7 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
744
759
  ASSERT_NE(nullptr, handles[i]);
745
760
  }
746
761
  s = cache2->Insert(extra_key, extra_value, 1, &deleter, &handle);
747
- ASSERT_TRUE(s.IsIncomplete());
762
+ ASSERT_TRUE(s.IsMemoryLimit());
748
763
  ASSERT_EQ(nullptr, handle);
749
764
  // test insert without handle
750
765
  s = cache2->Insert(extra_key, extra_value, 1, &deleter);
@@ -759,8 +774,10 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
759
774
  }
760
775
 
761
776
  TEST_P(CacheTest, OverCapacity) {
762
- if (GetParam() == kFast) {
763
- ROCKSDB_GTEST_BYPASS("FastLRUCache doesn't support capacity adjustments.");
777
+ auto type = GetParam();
778
+ if (type == kFast || type == kClock) {
779
+ ROCKSDB_GTEST_BYPASS(
780
+ "FastLRUCache and ClockCache don't support capacity adjustments.");
764
781
  return;
765
782
  }
766
783
  size_t n = 10;
@@ -938,15 +955,11 @@ TEST_P(CacheTest, GetChargeAndDeleter) {
938
955
  cache_->Release(h1);
939
956
  }
940
957
 
941
- #ifdef SUPPORT_CLOCK_CACHE
942
- std::shared_ptr<Cache> (*new_clock_cache_func)(
943
- size_t, int, bool, CacheMetadataChargePolicy) = NewClockCache;
958
+ std::shared_ptr<Cache> (*new_clock_cache_func)(size_t, size_t, int, bool,
959
+ CacheMetadataChargePolicy) =
960
+ ExperimentalNewClockCache;
944
961
  INSTANTIATE_TEST_CASE_P(CacheTestInstance, CacheTest,
945
962
  testing::Values(kLRU, kClock, kFast));
946
- #else
947
- INSTANTIATE_TEST_CASE_P(CacheTestInstance, CacheTest,
948
- testing::Values(kLRU, kFast));
949
- #endif // SUPPORT_CLOCK_CACHE
950
963
  INSTANTIATE_TEST_CASE_P(CacheTestInstance, LRUCacheTest,
951
964
  testing::Values(kLRU, kFast));
952
965