@nxtedition/rocksdb 7.1.5 → 7.1.6

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 (66) hide show
  1. package/binding.cc +32 -14
  2. package/deps/rocksdb/rocksdb/cache/cache.cc +4 -0
  3. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +6 -8
  4. package/deps/rocksdb/rocksdb/cache/cache_key.cc +184 -164
  5. package/deps/rocksdb/rocksdb/cache/cache_key.h +38 -29
  6. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +4 -4
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +4 -2
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +11 -9
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +1 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +28 -18
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +86 -17
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +48 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +356 -153
  14. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +3 -7
  15. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +4 -5
  16. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -3
  17. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +12 -4
  18. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +69 -0
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +6 -1
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +4 -1
  21. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +222 -182
  22. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +239 -23
  23. package/deps/rocksdb/rocksdb/db/db_test2.cc +6 -2
  24. package/deps/rocksdb/rocksdb/db/event_helpers.cc +2 -1
  25. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +6 -0
  26. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -0
  27. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  28. package/deps/rocksdb/rocksdb/db/kv_checksum.h +8 -4
  29. package/deps/rocksdb/rocksdb/db/memtable.cc +173 -33
  30. package/deps/rocksdb/rocksdb/db/memtable.h +10 -0
  31. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  32. package/deps/rocksdb/rocksdb/db/version_set.cc +37 -18
  33. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -1
  34. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
  35. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +6 -0
  36. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +2 -0
  37. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +15 -0
  38. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +31 -6
  39. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/options/cf_options.cc +4 -0
  41. package/deps/rocksdb/rocksdb/options/cf_options.h +4 -0
  42. package/deps/rocksdb/rocksdb/options/options_helper.cc +2 -0
  43. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
  44. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -6
  45. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +1 -0
  46. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +2 -4
  47. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -7
  48. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +2 -1
  49. package/deps/rocksdb/rocksdb/table/unique_id.cc +22 -24
  50. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +2 -1
  51. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +7 -0
  52. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +27 -3
  53. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -1
  54. package/deps/rocksdb/rocksdb/util/async_file_reader.h +3 -3
  55. package/deps/rocksdb/rocksdb/util/coro_utils.h +2 -1
  56. package/deps/rocksdb/rocksdb/util/hash_test.cc +67 -0
  57. package/deps/rocksdb/rocksdb/util/math.h +41 -0
  58. package/deps/rocksdb/rocksdb/util/math128.h +6 -0
  59. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +2 -1
  60. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +3 -6
  61. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +5 -0
  62. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +6 -0
  63. package/index.js +15 -6
  64. package/package.json +1 -1
  65. package/prebuilds/darwin-x64/node.napi.node +0 -0
  66. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -74,7 +74,7 @@ struct LRUHandle {
74
74
  // The number of external refs to this entry. The cache itself is not counted.
75
75
  uint32_t refs;
76
76
 
77
- enum Flags : uint8_t {
77
+ enum Flags : uint16_t {
78
78
  // Whether this entry is referenced by the hash table.
79
79
  IN_CACHE = (1 << 0),
80
80
  // Whether this entry is high priority entry.
@@ -89,9 +89,13 @@ struct LRUHandle {
89
89
  IS_PENDING = (1 << 5),
90
90
  // Whether this handle is still in a lower tier
91
91
  IS_IN_SECONDARY_CACHE = (1 << 6),
92
+ // Whether this entry is low priority entry.
93
+ IS_LOW_PRI = (1 << 7),
94
+ // Whether this entry is in low-pri pool.
95
+ IN_LOW_PRI_POOL = (1 << 8),
92
96
  };
93
97
 
94
- uint8_t flags;
98
+ uint16_t flags;
95
99
 
96
100
  #ifdef __SANITIZE_THREAD__
97
101
  // TSAN can report a false data race on flags, where one thread is writing
@@ -122,6 +126,8 @@ struct LRUHandle {
122
126
  bool InCache() const { return flags & IN_CACHE; }
123
127
  bool IsHighPri() const { return flags & IS_HIGH_PRI; }
124
128
  bool InHighPriPool() const { return flags & IN_HIGH_PRI_POOL; }
129
+ bool IsLowPri() const { return flags & IS_LOW_PRI; }
130
+ bool InLowPriPool() const { return flags & IN_LOW_PRI_POOL; }
125
131
  bool HasHit() const { return flags & HAS_HIT; }
126
132
  bool IsSecondaryCacheCompatible() const {
127
133
  #ifdef __SANITIZE_THREAD__
@@ -144,8 +150,13 @@ struct LRUHandle {
144
150
  void SetPriority(Cache::Priority priority) {
145
151
  if (priority == Cache::Priority::HIGH) {
146
152
  flags |= IS_HIGH_PRI;
153
+ flags &= ~IS_LOW_PRI;
154
+ } else if (priority == Cache::Priority::LOW) {
155
+ flags &= ~IS_HIGH_PRI;
156
+ flags |= IS_LOW_PRI;
147
157
  } else {
148
158
  flags &= ~IS_HIGH_PRI;
159
+ flags &= ~IS_LOW_PRI;
149
160
  }
150
161
  }
151
162
 
@@ -157,6 +168,14 @@ struct LRUHandle {
157
168
  }
158
169
  }
159
170
 
171
+ void SetInLowPriPool(bool in_low_pri_pool) {
172
+ if (in_low_pri_pool) {
173
+ flags |= IN_LOW_PRI_POOL;
174
+ } else {
175
+ flags &= ~IN_LOW_PRI_POOL;
176
+ }
177
+ }
178
+
160
179
  void SetHit() { flags |= HAS_HIT; }
161
180
 
162
181
  void SetSecondaryCacheCompatible(bool compat) {
@@ -298,7 +317,8 @@ class LRUHandleTable {
298
317
  class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
299
318
  public:
300
319
  LRUCacheShard(size_t capacity, bool strict_capacity_limit,
301
- double high_pri_pool_ratio, bool use_adaptive_mutex,
320
+ double high_pri_pool_ratio, double low_pri_pool_ratio,
321
+ bool use_adaptive_mutex,
302
322
  CacheMetadataChargePolicy metadata_charge_policy,
303
323
  int max_upper_hash_bits,
304
324
  const std::shared_ptr<SecondaryCache>& secondary_cache);
@@ -315,6 +335,9 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
315
335
  // Set percentage of capacity reserved for high-pri cache entries.
316
336
  void SetHighPriorityPoolRatio(double high_pri_pool_ratio);
317
337
 
338
+ // Set percentage of capacity reserved for low-pri cache entries.
339
+ void SetLowPriorityPoolRatio(double low_pri_pool_ratio);
340
+
318
341
  // Like Cache methods, but with an extra "hash" parameter.
319
342
  virtual Status Insert(const Slice& key, uint32_t hash, void* value,
320
343
  size_t charge, Cache::DeleterFn deleter,
@@ -366,15 +389,19 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
366
389
 
367
390
  virtual std::string GetPrintableOptions() const override;
368
391
 
369
- void TEST_GetLRUList(LRUHandle** lru, LRUHandle** lru_low_pri);
392
+ void TEST_GetLRUList(LRUHandle** lru, LRUHandle** lru_low_pri,
393
+ LRUHandle** lru_bottom_pri);
370
394
 
371
- // Retrieves number of elements in LRU, for unit test purpose only.
372
- // Not threadsafe.
395
+ // Retrieves number of elements in LRU, for unit test purpose only.
396
+ // Not threadsafe.
373
397
  size_t TEST_GetLRUSize();
374
398
 
375
- // Retrieves high pri pool ratio
399
+ // Retrieves high pri pool ratio
376
400
  double GetHighPriPoolRatio();
377
401
 
402
+ // Retrieves low pri pool ratio
403
+ double GetLowPriPoolRatio();
404
+
378
405
  private:
379
406
  friend class LRUCache;
380
407
  // Insert an item into the hash table and, if handle is null, insert into
@@ -414,6 +441,9 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
414
441
  // Memory size for entries in high-pri pool.
415
442
  size_t high_pri_pool_usage_;
416
443
 
444
+ // Memory size for entries in low-pri pool.
445
+ size_t low_pri_pool_usage_;
446
+
417
447
  // Whether to reject insertion if cache reaches its full capacity.
418
448
  bool strict_capacity_limit_;
419
449
 
@@ -424,6 +454,13 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
424
454
  // Remember the value to avoid recomputing each time.
425
455
  double high_pri_pool_capacity_;
426
456
 
457
+ // Ratio of capacity reserved for low priority cache entries.
458
+ double low_pri_pool_ratio_;
459
+
460
+ // Low-pri pool size, equals to capacity * low_pri_pool_ratio.
461
+ // Remember the value to avoid recomputing each time.
462
+ double low_pri_pool_capacity_;
463
+
427
464
  // Dummy head of LRU list.
428
465
  // lru.prev is newest entry, lru.next is oldest entry.
429
466
  // LRU contains items which can be evicted, ie reference only by cache
@@ -432,6 +469,9 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
432
469
  // Pointer to head of low-pri pool in LRU list.
433
470
  LRUHandle* lru_low_pri_;
434
471
 
472
+ // Pointer to head of bottom-pri pool in LRU list.
473
+ LRUHandle* lru_bottom_pri_;
474
+
435
475
  // ------------^^^^^^^^^^^^^-----------
436
476
  // Not frequently modified data members
437
477
  // ------------------------------------
@@ -466,7 +506,7 @@ class LRUCache
466
506
  : public ShardedCache {
467
507
  public:
468
508
  LRUCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit,
469
- double high_pri_pool_ratio,
509
+ double high_pri_pool_ratio, double low_pri_pool_ratio,
470
510
  std::shared_ptr<MemoryAllocator> memory_allocator = nullptr,
471
511
  bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
472
512
  CacheMetadataChargePolicy metadata_charge_policy =