@nxtedition/rocksdb 8.1.17 → 8.2.0-alpha.2

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 (147) hide show
  1. package/binding.cc +32 -2
  2. package/binding.gyp +8 -0
  3. package/deps/liburing/liburing.gyp +20 -0
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +4 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +7 -0
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +43 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +8 -5
  8. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +1 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +1 -1
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +12 -48
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +26 -18
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -62
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +119 -44
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +34 -29
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +3 -3
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -2
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +148 -209
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +118 -284
  19. package/deps/rocksdb/rocksdb/cache/lru_cache.h +23 -71
  20. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +351 -392
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +5 -2
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +296 -0
  23. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +52 -0
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +22 -19
  25. package/deps/rocksdb/rocksdb/cache/typed_cache.h +56 -20
  26. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -0
  27. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +4 -0
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +3 -3
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +19 -25
  30. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +216 -0
  31. package/deps/rocksdb/rocksdb/db/c.cc +90 -1
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +8 -7
  33. package/deps/rocksdb/rocksdb/db/column_family.h +0 -6
  34. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +5 -0
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +24 -7
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +18 -12
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -1
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +245 -302
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +5 -0
  42. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +75 -15
  43. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +2 -3
  44. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -5
  45. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +91 -1
  46. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5 -12
  47. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +16 -4
  48. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +47 -24
  49. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +4 -2
  50. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +1 -1
  51. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +32 -3
  52. package/deps/rocksdb/rocksdb/db/db_iter.cc +28 -29
  53. package/deps/rocksdb/rocksdb/db/db_iter.h +0 -3
  54. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +176 -0
  55. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +391 -2
  56. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +26 -0
  57. package/deps/rocksdb/rocksdb/db/db_write_test.cc +13 -5
  58. package/deps/rocksdb/rocksdb/db/dbformat.h +3 -1
  59. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +0 -1
  60. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +0 -6
  61. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +3 -0
  62. package/deps/rocksdb/rocksdb/db/forward_iterator.h +1 -1
  63. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +4 -0
  64. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +68 -40
  65. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +3 -3
  66. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +115 -0
  67. package/deps/rocksdb/rocksdb/db/internal_stats.cc +169 -72
  68. package/deps/rocksdb/rocksdb/db/internal_stats.h +36 -7
  69. package/deps/rocksdb/rocksdb/db/memtable.cc +6 -4
  70. package/deps/rocksdb/rocksdb/db/merge_helper.cc +4 -0
  71. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +151 -0
  72. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +47 -16
  73. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +10 -8
  74. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +91 -93
  75. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +1 -2
  76. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +1 -1
  77. package/deps/rocksdb/rocksdb/db/version_set.cc +30 -14
  78. package/deps/rocksdb/rocksdb/db/version_set.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/write_stall_stats.cc +179 -0
  80. package/deps/rocksdb/rocksdb/db/write_stall_stats.h +47 -0
  81. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +109 -7
  82. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +147 -12
  83. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +31 -0
  84. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -0
  85. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -1
  86. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +42 -59
  87. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +7 -4
  88. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +7 -0
  89. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +6 -10
  90. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +6 -0
  91. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
  92. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +127 -36
  93. package/deps/rocksdb/rocksdb/env/fs_posix.cc +8 -0
  94. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +35 -0
  95. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +29 -8
  96. package/deps/rocksdb/rocksdb/file/file_util.cc +14 -10
  97. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +183 -63
  98. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +159 -66
  99. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +3 -1
  100. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +52 -5
  101. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +3 -3
  102. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +134 -73
  103. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -3
  104. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -0
  105. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +0 -6
  106. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +7 -0
  107. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +2 -2
  108. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +6 -1
  109. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +3 -3
  110. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -0
  111. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +28 -0
  112. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  113. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +39 -0
  114. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -0
  115. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +9 -1
  116. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -2
  117. package/deps/rocksdb/rocksdb/port/stack_trace.cc +17 -7
  118. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -0
  119. package/deps/rocksdb/rocksdb/src.mk +4 -0
  120. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +38 -34
  121. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +11 -12
  122. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +5 -5
  123. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +126 -132
  124. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +16 -16
  125. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +0 -16
  126. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -1
  127. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  128. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -4
  129. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
  130. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  131. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +370 -0
  132. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +44 -0
  133. package/deps/rocksdb/rocksdb/table/get_context.cc +4 -2
  134. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +555 -267
  135. package/deps/rocksdb/rocksdb/table/merging_iterator.h +10 -5
  136. package/deps/rocksdb/rocksdb/table/table_test.cc +113 -70
  137. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +96 -0
  138. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +117 -0
  139. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +5 -3
  140. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +3 -3
  141. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +1 -1
  142. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +9 -2
  143. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -1
  144. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +11 -0
  145. package/deps/rocksdb/rocksdb.gyp +7 -1
  146. package/package.json +1 -1
  147. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -16,7 +16,6 @@
16
16
  #include "port/likely.h"
17
17
  #include "port/malloc.h"
18
18
  #include "port/port.h"
19
- #include "rocksdb/secondary_cache.h"
20
19
  #include "util/autovector.h"
21
20
  #include "util/distributed_mutex.h"
22
21
 
@@ -51,12 +50,7 @@ namespace lru_cache {
51
50
  struct LRUHandle {
52
51
  Cache::ObjectPtr value;
53
52
  const Cache::CacheItemHelper* helper;
54
- // An entry is not added to the LRUHandleTable until the secondary cache
55
- // lookup is complete, so its safe to have this union.
56
- union {
57
- LRUHandle* next_hash;
58
- SecondaryCacheResultHandle* sec_handle;
59
- };
53
+ LRUHandle* next_hash;
60
54
  LRUHandle* next;
61
55
  LRUHandle* prev;
62
56
  size_t total_charge; // TODO(opt): Only allow uint32_t?
@@ -89,12 +83,8 @@ struct LRUHandle {
89
83
  IM_IS_HIGH_PRI = (1 << 0),
90
84
  // Whether this entry is low priority entry.
91
85
  IM_IS_LOW_PRI = (1 << 1),
92
- // Is the handle still being read from a lower tier.
93
- IM_IS_PENDING = (1 << 2),
94
- // Whether this handle is still in a lower tier
95
- IM_IS_IN_SECONDARY_CACHE = (1 << 3),
96
86
  // Marks result handles that should not be inserted into cache
97
- IM_IS_STANDALONE = (1 << 4),
87
+ IM_IS_STANDALONE = (1 << 2),
98
88
  };
99
89
 
100
90
  // Beginning of the key (MUST BE THE LAST FIELD IN THIS STRUCT!)
@@ -124,11 +114,6 @@ struct LRUHandle {
124
114
  bool IsLowPri() const { return im_flags & IM_IS_LOW_PRI; }
125
115
  bool InLowPriPool() const { return m_flags & M_IN_LOW_PRI_POOL; }
126
116
  bool HasHit() const { return m_flags & M_HAS_HIT; }
127
- bool IsSecondaryCacheCompatible() const { return helper->size_cb != nullptr; }
128
- bool IsPending() const { return im_flags & IM_IS_PENDING; }
129
- bool IsInSecondaryCache() const {
130
- return im_flags & IM_IS_IN_SECONDARY_CACHE;
131
- }
132
117
  bool IsStandalone() const { return im_flags & IM_IS_STANDALONE; }
133
118
 
134
119
  void SetInCache(bool in_cache) {
@@ -170,22 +155,6 @@ struct LRUHandle {
170
155
 
171
156
  void SetHit() { m_flags |= M_HAS_HIT; }
172
157
 
173
- void SetIsPending(bool pending) {
174
- if (pending) {
175
- im_flags |= IM_IS_PENDING;
176
- } else {
177
- im_flags &= ~IM_IS_PENDING;
178
- }
179
- }
180
-
181
- void SetIsInSecondaryCache(bool is_in_secondary_cache) {
182
- if (is_in_secondary_cache) {
183
- im_flags |= IM_IS_IN_SECONDARY_CACHE;
184
- } else {
185
- im_flags &= ~IM_IS_IN_SECONDARY_CACHE;
186
- }
187
- }
188
-
189
158
  void SetIsStandalone(bool is_standalone) {
190
159
  if (is_standalone) {
191
160
  im_flags |= IM_IS_STANDALONE;
@@ -196,14 +165,6 @@ struct LRUHandle {
196
165
 
197
166
  void Free(MemoryAllocator* allocator) {
198
167
  assert(refs == 0);
199
-
200
- if (UNLIKELY(IsPending())) {
201
- assert(sec_handle != nullptr);
202
- SecondaryCacheResultHandle* tmp_sec_handle = sec_handle;
203
- tmp_sec_handle->Wait();
204
- value = tmp_sec_handle->Value();
205
- delete tmp_sec_handle;
206
- }
207
168
  assert(helper);
208
169
  if (helper->del_cb) {
209
170
  helper->del_cb(value, allocator);
@@ -303,12 +264,14 @@ class LRUHandleTable {
303
264
  // A single shard of sharded cache.
304
265
  class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
305
266
  public:
267
+ // NOTE: the eviction_callback ptr is saved, as is it assumed to be kept
268
+ // alive in Cache.
306
269
  LRUCacheShard(size_t capacity, bool strict_capacity_limit,
307
270
  double high_pri_pool_ratio, double low_pri_pool_ratio,
308
271
  bool use_adaptive_mutex,
309
272
  CacheMetadataChargePolicy metadata_charge_policy,
310
273
  int max_upper_hash_bits, MemoryAllocator* allocator,
311
- SecondaryCache* secondary_cache);
274
+ const Cache::EvictionCallback* eviction_callback);
312
275
 
313
276
  public: // Type definitions expected as parameter to ShardedCache
314
277
  using HandleImpl = LRUHandle;
@@ -339,14 +302,17 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
339
302
  const Cache::CacheItemHelper* helper, size_t charge,
340
303
  LRUHandle** handle, Cache::Priority priority);
341
304
 
305
+ LRUHandle* CreateStandalone(const Slice& key, uint32_t hash,
306
+ Cache::ObjectPtr obj,
307
+ const Cache::CacheItemHelper* helper,
308
+ size_t charge, bool allow_uncharged);
309
+
342
310
  LRUHandle* Lookup(const Slice& key, uint32_t hash,
343
311
  const Cache::CacheItemHelper* helper,
344
312
  Cache::CreateContext* create_context,
345
- Cache::Priority priority, bool wait, Statistics* stats);
313
+ Cache::Priority priority, Statistics* stats);
346
314
 
347
315
  bool Release(LRUHandle* handle, bool useful, bool erase_if_last_ref);
348
- bool IsReady(LRUHandle* /*handle*/);
349
- void Wait(LRUHandle* /*handle*/) {}
350
316
  bool Ref(LRUHandle* handle);
351
317
  void Erase(const Slice& key, uint32_t hash);
352
318
 
@@ -386,20 +352,10 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
386
352
  private:
387
353
  friend class LRUCache;
388
354
  // Insert an item into the hash table and, if handle is null, insert into
389
- // the LRU list. Older items are evicted as necessary. If the cache is full
390
- // and free_handle_on_fail is true, the item is deleted and handle is set to
391
- // nullptr.
392
- Status InsertItem(LRUHandle* item, LRUHandle** handle,
393
- bool free_handle_on_fail);
394
- // Promote an item looked up from the secondary cache to the LRU cache.
395
- // The item may be still in the secondary cache.
396
- // It is only inserted into the hash table and not the LRU list, and only
397
- // if the cache is not at full capacity, as is the case during Insert. The
398
- // caller should hold a reference on the LRUHandle. When the caller releases
399
- // the last reference, the item is added to the LRU list.
400
- // The item is promoted to the high pri or low pri pool as specified by the
401
- // caller in Lookup.
402
- void Promote(LRUHandle* e);
355
+ // the LRU list. Older items are evicted as necessary. Frees `item` on
356
+ // non-OK status.
357
+ Status InsertItem(LRUHandle* item, LRUHandle** handle);
358
+
403
359
  void LRU_Remove(LRUHandle* e);
404
360
  void LRU_Insert(LRUHandle* e);
405
361
 
@@ -413,8 +369,11 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
413
369
  // holding the mutex_.
414
370
  void EvictFromLRU(size_t charge, autovector<LRUHandle*>* deleted);
415
371
 
416
- // Try to insert the evicted handles into the secondary cache.
417
- void TryInsertIntoSecondaryCache(autovector<LRUHandle*> evicted_handles);
372
+ void NotifyEvicted(const autovector<LRUHandle*>& evicted_handles);
373
+
374
+ LRUHandle* CreateHandle(const Slice& key, uint32_t hash,
375
+ Cache::ObjectPtr value,
376
+ const Cache::CacheItemHelper* helper, size_t charge);
418
377
 
419
378
  // Initialized before use.
420
379
  size_t capacity_;
@@ -477,8 +436,8 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
477
436
  // don't mind mutex_ invoking the non-const actions.
478
437
  mutable DMutex mutex_;
479
438
 
480
- // Owned by LRUCache
481
- SecondaryCache* secondary_cache_;
439
+ // A reference to Cache::eviction_callback_
440
+ const Cache::EvictionCallback& eviction_callback_;
482
441
  };
483
442
 
484
443
  class LRUCache
@@ -492,23 +451,16 @@ class LRUCache
492
451
  std::shared_ptr<MemoryAllocator> memory_allocator = nullptr,
493
452
  bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
494
453
  CacheMetadataChargePolicy metadata_charge_policy =
495
- kDontChargeCacheMetadata,
496
- std::shared_ptr<SecondaryCache> secondary_cache = nullptr);
454
+ kDontChargeCacheMetadata);
497
455
  const char* Name() const override { return "LRUCache"; }
498
456
  ObjectPtr Value(Handle* handle) override;
499
457
  size_t GetCharge(Handle* handle) const override;
500
458
  const CacheItemHelper* GetCacheItemHelper(Handle* handle) const override;
501
- void WaitAll(std::vector<Handle*>& handles) override;
502
459
 
503
460
  // Retrieves number of elements in LRU, for unit test purpose only.
504
461
  size_t TEST_GetLRUSize();
505
462
  // Retrieves high pri pool ratio.
506
463
  double GetHighPriPoolRatio();
507
-
508
- void AppendPrintableOptions(std::string& str) const override;
509
-
510
- private:
511
- std::shared_ptr<SecondaryCache> secondary_cache_;
512
464
  };
513
465
 
514
466
  } // namespace lru_cache