@nxtedition/rocksdb 7.1.11 → 7.1.14

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 (52) hide show
  1. package/binding.cc +50 -46
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +2 -1
  3. package/deps/rocksdb/rocksdb/TARGETS +2 -0
  4. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +60 -17
  5. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +4 -4
  6. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +81 -37
  7. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +6 -0
  8. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -6
  9. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +10 -8
  10. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +14 -9
  11. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +3 -3
  12. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +69 -0
  13. package/deps/rocksdb/rocksdb/db/flush_job.cc +6 -6
  14. package/deps/rocksdb/rocksdb/db/memtable.cc +19 -7
  15. package/deps/rocksdb/rocksdb/db/memtable.h +8 -16
  16. package/deps/rocksdb/rocksdb/db/memtable_list.cc +27 -16
  17. package/deps/rocksdb/rocksdb/db/memtable_list.h +18 -11
  18. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +70 -55
  19. package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
  20. package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +3 -3
  22. package/deps/rocksdb/rocksdb/db/version_set.cc +530 -257
  23. package/deps/rocksdb/rocksdb/db/version_set.h +32 -2
  24. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -2
  25. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +64 -12
  26. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +18 -0
  27. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -0
  28. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +13 -1
  29. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  30. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +83 -0
  31. package/deps/rocksdb/rocksdb/options/options.cc +4 -2
  32. package/deps/rocksdb/rocksdb/src.mk +1 -0
  33. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -10
  34. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +5 -4
  35. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +10 -28
  36. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +4 -4
  37. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +11 -9
  38. package/deps/rocksdb/rocksdb/table/get_context.cc +34 -22
  39. package/deps/rocksdb/rocksdb/table/get_context.h +6 -3
  40. package/deps/rocksdb/rocksdb/table/multiget_context.h +69 -5
  41. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -2
  42. package/deps/rocksdb/rocksdb/table/table_test.cc +8 -8
  43. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +23 -0
  44. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +27 -7
  45. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -4
  46. package/deps/rocksdb/rocksdb.gyp +1 -0
  47. package/index.js +20 -11
  48. package/package.json +1 -1
  49. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  50. package/prebuilds/darwin-x64/node.napi.node +0 -0
  51. package/prebuilds/linux-x64/node.napi.node +0 -0
  52. package/util.h +14 -12
@@ -238,9 +238,9 @@ TEST_F(MemTableListTest, GetTest) {
238
238
  autovector<MemTable*> to_delete;
239
239
 
240
240
  LookupKey lkey("key1", seq);
241
- bool found = list.current()->Get(
242
- lkey, &value, /*timestamp*/nullptr, &s, &merge_context,
243
- &max_covering_tombstone_seq, ReadOptions());
241
+ bool found = list.current()->Get(lkey, &value, /*columns=*/nullptr,
242
+ /*timestamp=*/nullptr, &s, &merge_context,
243
+ &max_covering_tombstone_seq, ReadOptions());
244
244
  ASSERT_FALSE(found);
245
245
 
246
246
  // Create a MemTable
@@ -266,7 +266,7 @@ TEST_F(MemTableListTest, GetTest) {
266
266
 
267
267
  // Fetch the newly written keys
268
268
  merge_context.Clear();
269
- found = mem->Get(LookupKey("key1", seq), &value,
269
+ found = mem->Get(LookupKey("key1", seq), &value, /*columns*/ nullptr,
270
270
  /*timestamp*/ nullptr, &s, &merge_context,
271
271
  &max_covering_tombstone_seq, ReadOptions(),
272
272
  false /* immutable_memtable */);
@@ -274,7 +274,7 @@ TEST_F(MemTableListTest, GetTest) {
274
274
  ASSERT_EQ(value, "value1");
275
275
 
276
276
  merge_context.Clear();
277
- found = mem->Get(LookupKey("key1", 2), &value,
277
+ found = mem->Get(LookupKey("key1", 2), &value, /*columns*/ nullptr,
278
278
  /*timestamp*/ nullptr, &s, &merge_context,
279
279
  &max_covering_tombstone_seq, ReadOptions(),
280
280
  false /* immutable_memtable */);
@@ -282,7 +282,7 @@ TEST_F(MemTableListTest, GetTest) {
282
282
  ASSERT_TRUE(found && s.IsNotFound());
283
283
 
284
284
  merge_context.Clear();
285
- found = mem->Get(LookupKey("key2", seq), &value,
285
+ found = mem->Get(LookupKey("key2", seq), &value, /*columns*/ nullptr,
286
286
  /*timestamp*/ nullptr, &s, &merge_context,
287
287
  &max_covering_tombstone_seq, ReadOptions(),
288
288
  false /* immutable_memtable */);
@@ -319,29 +319,32 @@ TEST_F(MemTableListTest, GetTest) {
319
319
 
320
320
  // Fetch keys via MemTableList
321
321
  merge_context.Clear();
322
- found = list.current()->Get(
323
- LookupKey("key1", seq), &value, /*timestamp*/nullptr, &s,
324
- &merge_context, &max_covering_tombstone_seq, ReadOptions());
322
+ found =
323
+ list.current()->Get(LookupKey("key1", seq), &value, /*columns=*/nullptr,
324
+ /*timestamp=*/nullptr, &s, &merge_context,
325
+ &max_covering_tombstone_seq, ReadOptions());
325
326
  ASSERT_TRUE(found && s.IsNotFound());
326
327
 
327
328
  merge_context.Clear();
328
- found = list.current()->Get(
329
- LookupKey("key1", saved_seq), &value, /*timestamp*/nullptr,
330
- &s, &merge_context, &max_covering_tombstone_seq, ReadOptions());
329
+ found = list.current()->Get(LookupKey("key1", saved_seq), &value,
330
+ /*columns=*/nullptr, /*timestamp=*/nullptr, &s,
331
+ &merge_context, &max_covering_tombstone_seq,
332
+ ReadOptions());
331
333
  ASSERT_TRUE(s.ok() && found);
332
334
  ASSERT_EQ("value1", value);
333
335
 
334
336
  merge_context.Clear();
335
- found = list.current()->Get(
336
- LookupKey("key2", seq), &value, /*timestamp*/nullptr, &s,
337
- &merge_context, &max_covering_tombstone_seq, ReadOptions());
337
+ found =
338
+ list.current()->Get(LookupKey("key2", seq), &value, /*columns=*/nullptr,
339
+ /*timestamp=*/nullptr, &s, &merge_context,
340
+ &max_covering_tombstone_seq, ReadOptions());
338
341
  ASSERT_TRUE(s.ok() && found);
339
342
  ASSERT_EQ(value, "value2.3");
340
343
 
341
344
  merge_context.Clear();
342
- found = list.current()->Get(
343
- LookupKey("key2", 1), &value, /*timestamp*/nullptr, &s,
344
- &merge_context, &max_covering_tombstone_seq, ReadOptions());
345
+ found = list.current()->Get(LookupKey("key2", 1), &value, /*columns=*/nullptr,
346
+ /*timestamp=*/nullptr, &s, &merge_context,
347
+ &max_covering_tombstone_seq, ReadOptions());
345
348
  ASSERT_FALSE(found);
346
349
 
347
350
  ASSERT_EQ(2, list.NumNotFlushed());
@@ -370,9 +373,9 @@ TEST_F(MemTableListTest, GetFromHistoryTest) {
370
373
  autovector<MemTable*> to_delete;
371
374
 
372
375
  LookupKey lkey("key1", seq);
373
- bool found = list.current()->Get(
374
- lkey, &value, /*timestamp*/nullptr, &s, &merge_context,
375
- &max_covering_tombstone_seq, ReadOptions());
376
+ bool found = list.current()->Get(lkey, &value, /*columns=*/nullptr,
377
+ /*timestamp=*/nullptr, &s, &merge_context,
378
+ &max_covering_tombstone_seq, ReadOptions());
376
379
  ASSERT_FALSE(found);
377
380
 
378
381
  // Create a MemTable
@@ -396,7 +399,7 @@ TEST_F(MemTableListTest, GetFromHistoryTest) {
396
399
 
397
400
  // Fetch the newly written keys
398
401
  merge_context.Clear();
399
- found = mem->Get(LookupKey("key1", seq), &value,
402
+ found = mem->Get(LookupKey("key1", seq), &value, /*columns*/ nullptr,
400
403
  /*timestamp*/ nullptr, &s, &merge_context,
401
404
  &max_covering_tombstone_seq, ReadOptions(),
402
405
  false /* immutable_memtable */);
@@ -404,7 +407,7 @@ TEST_F(MemTableListTest, GetFromHistoryTest) {
404
407
  ASSERT_TRUE(found && s.IsNotFound());
405
408
 
406
409
  merge_context.Clear();
407
- found = mem->Get(LookupKey("key2", seq), &value,
410
+ found = mem->Get(LookupKey("key2", seq), &value, /*columns*/ nullptr,
408
411
  /*timestamp*/ nullptr, &s, &merge_context,
409
412
  &max_covering_tombstone_seq, ReadOptions(),
410
413
  false /* immutable_memtable */);
@@ -420,15 +423,17 @@ TEST_F(MemTableListTest, GetFromHistoryTest) {
420
423
 
421
424
  // Fetch keys via MemTableList
422
425
  merge_context.Clear();
423
- found = list.current()->Get(LookupKey("key1", seq), &value,
424
- /*timestamp*/nullptr, &s, &merge_context,
425
- &max_covering_tombstone_seq, ReadOptions());
426
+ found =
427
+ list.current()->Get(LookupKey("key1", seq), &value, /*columns=*/nullptr,
428
+ /*timestamp=*/nullptr, &s, &merge_context,
429
+ &max_covering_tombstone_seq, ReadOptions());
426
430
  ASSERT_TRUE(found && s.IsNotFound());
427
431
 
428
432
  merge_context.Clear();
429
- found = list.current()->Get(LookupKey("key2", seq), &value,
430
- /*timestamp*/nullptr, &s, &merge_context,
431
- &max_covering_tombstone_seq, ReadOptions());
433
+ found =
434
+ list.current()->Get(LookupKey("key2", seq), &value, /*columns=*/nullptr,
435
+ /*timestamp=*/nullptr, &s, &merge_context,
436
+ &max_covering_tombstone_seq, ReadOptions());
432
437
  ASSERT_TRUE(s.ok() && found);
433
438
  ASSERT_EQ("value2.2", value);
434
439
 
@@ -449,28 +454,32 @@ TEST_F(MemTableListTest, GetFromHistoryTest) {
449
454
 
450
455
  // Verify keys are no longer in MemTableList
451
456
  merge_context.Clear();
452
- found = list.current()->Get(LookupKey("key1", seq), &value,
453
- /*timestamp*/nullptr, &s, &merge_context,
454
- &max_covering_tombstone_seq, ReadOptions());
457
+ found =
458
+ list.current()->Get(LookupKey("key1", seq), &value, /*columns=*/nullptr,
459
+ /*timestamp=*/nullptr, &s, &merge_context,
460
+ &max_covering_tombstone_seq, ReadOptions());
455
461
  ASSERT_FALSE(found);
456
462
 
457
463
  merge_context.Clear();
458
- found = list.current()->Get(LookupKey("key2", seq), &value,
459
- /*timestamp*/nullptr, &s, &merge_context,
460
- &max_covering_tombstone_seq, ReadOptions());
464
+ found =
465
+ list.current()->Get(LookupKey("key2", seq), &value, /*columns=*/nullptr,
466
+ /*timestamp=*/nullptr, &s, &merge_context,
467
+ &max_covering_tombstone_seq, ReadOptions());
461
468
  ASSERT_FALSE(found);
462
469
 
463
470
  // Verify keys are present in history
464
471
  merge_context.Clear();
465
472
  found = list.current()->GetFromHistory(
466
- LookupKey("key1", seq), &value, /*timestamp*/nullptr, &s, &merge_context,
467
- &max_covering_tombstone_seq, ReadOptions());
473
+ LookupKey("key1", seq), &value, /*columns=*/nullptr,
474
+ /*timestamp=*/nullptr, &s, &merge_context, &max_covering_tombstone_seq,
475
+ ReadOptions());
468
476
  ASSERT_TRUE(found && s.IsNotFound());
469
477
 
470
478
  merge_context.Clear();
471
479
  found = list.current()->GetFromHistory(
472
- LookupKey("key2", seq), &value, /*timestamp*/nullptr, &s, &merge_context,
473
- &max_covering_tombstone_seq, ReadOptions());
480
+ LookupKey("key2", seq), &value, /*columns=*/nullptr,
481
+ /*timestamp=*/nullptr, &s, &merge_context, &max_covering_tombstone_seq,
482
+ ReadOptions());
474
483
  ASSERT_TRUE(found);
475
484
  ASSERT_EQ("value2.2", value);
476
485
 
@@ -520,42 +529,48 @@ TEST_F(MemTableListTest, GetFromHistoryTest) {
520
529
 
521
530
  // Verify keys are no longer in MemTableList
522
531
  merge_context.Clear();
523
- found = list.current()->Get(LookupKey("key1", seq), &value,
524
- /*timestamp*/nullptr, &s, &merge_context,
525
- &max_covering_tombstone_seq, ReadOptions());
532
+ found =
533
+ list.current()->Get(LookupKey("key1", seq), &value, /*columns=*/nullptr,
534
+ /*timestamp=*/nullptr, &s, &merge_context,
535
+ &max_covering_tombstone_seq, ReadOptions());
526
536
  ASSERT_FALSE(found);
527
537
 
528
538
  merge_context.Clear();
529
- found = list.current()->Get(LookupKey("key2", seq), &value,
530
- /*timestamp*/nullptr, &s, &merge_context,
531
- &max_covering_tombstone_seq, ReadOptions());
539
+ found =
540
+ list.current()->Get(LookupKey("key2", seq), &value, /*columns=*/nullptr,
541
+ /*timestamp=*/nullptr, &s, &merge_context,
542
+ &max_covering_tombstone_seq, ReadOptions());
532
543
  ASSERT_FALSE(found);
533
544
 
534
545
  merge_context.Clear();
535
- found = list.current()->Get(LookupKey("key3", seq), &value,
536
- /*timestamp*/nullptr, &s, &merge_context,
537
- &max_covering_tombstone_seq, ReadOptions());
546
+ found =
547
+ list.current()->Get(LookupKey("key3", seq), &value, /*columns=*/nullptr,
548
+ /*timestamp=*/nullptr, &s, &merge_context,
549
+ &max_covering_tombstone_seq, ReadOptions());
538
550
  ASSERT_FALSE(found);
539
551
 
540
552
  // Verify that the second memtable's keys are in the history
541
553
  merge_context.Clear();
542
554
  found = list.current()->GetFromHistory(
543
- LookupKey("key1", seq), &value, /*timestamp*/nullptr, &s, &merge_context,
544
- &max_covering_tombstone_seq, ReadOptions());
555
+ LookupKey("key1", seq), &value, /*columns=*/nullptr,
556
+ /*timestamp=*/nullptr, &s, &merge_context, &max_covering_tombstone_seq,
557
+ ReadOptions());
545
558
  ASSERT_TRUE(found && s.IsNotFound());
546
559
 
547
560
  merge_context.Clear();
548
561
  found = list.current()->GetFromHistory(
549
- LookupKey("key3", seq), &value, /*timestamp*/nullptr, &s, &merge_context,
550
- &max_covering_tombstone_seq, ReadOptions());
562
+ LookupKey("key3", seq), &value, /*columns=*/nullptr,
563
+ /*timestamp=*/nullptr, &s, &merge_context, &max_covering_tombstone_seq,
564
+ ReadOptions());
551
565
  ASSERT_TRUE(found);
552
566
  ASSERT_EQ("value3", value);
553
567
 
554
568
  // Verify that key2 from the first memtable is no longer in the history
555
569
  merge_context.Clear();
556
- found = list.current()->Get(LookupKey("key2", seq), &value,
557
- /*timestamp*/nullptr, &s, &merge_context,
558
- &max_covering_tombstone_seq, ReadOptions());
570
+ found =
571
+ list.current()->Get(LookupKey("key2", seq), &value, /*columns=*/nullptr,
572
+ /*timestamp=*/nullptr, &s, &merge_context,
573
+ &max_covering_tombstone_seq, ReadOptions());
559
574
  ASSERT_FALSE(found);
560
575
 
561
576
  // Cleanup
@@ -557,17 +557,15 @@ Status TableCache::MultiGetFilter(
557
557
  if (s.ok()) {
558
558
  s = t->MultiGetFilter(options, prefix_extractor.get(), mget_range);
559
559
  }
560
- if (mget_range->empty()) {
561
- if (s.ok() && !options.ignore_range_deletions) {
562
- // If all the keys have been filtered out by the bloom filter, then
563
- // update the range tombstone sequence numbers for the keys as
564
- // MultiGet() will not be called for this set of keys.
565
- UpdateRangeTombstoneSeqnums(options, t, tombstone_range);
566
- }
567
- if (handle) {
568
- ReleaseHandle(handle);
569
- *table_handle = nullptr;
570
- }
560
+ if (s.ok() && !options.ignore_range_deletions) {
561
+ // Update the range tombstone sequence numbers for the keys here
562
+ // as TableCache::MultiGet may or may not be called, and even if it
563
+ // is, it may be called with fewer keys in the rangedue to filtering.
564
+ UpdateRangeTombstoneSeqnums(options, t, tombstone_range);
565
+ }
566
+ if (mget_range->empty() && handle) {
567
+ ReleaseHandle(handle);
568
+ *table_handle = nullptr;
571
569
  }
572
570
 
573
571
  return s;
@@ -135,7 +135,8 @@ class TableCache {
135
135
  const FileMetaData& file_meta, const MultiGetContext::Range* mget_range,
136
136
  const std::shared_ptr<const SliceTransform>& prefix_extractor = nullptr,
137
137
  HistogramImpl* file_read_hist = nullptr, bool skip_filters = false,
138
- int level = -1, Cache::Handle* table_handle = nullptr);
138
+ bool skip_range_deletions = false, int level = -1,
139
+ Cache::Handle* table_handle = nullptr);
139
140
 
140
141
  // Evict any entry for the specified file number
141
142
  static void Evict(Cache* cache, uint64_t file_number);
@@ -18,8 +18,8 @@ DEFINE_SYNC_AND_ASYNC(Status, TableCache::MultiGet)
18
18
  (const ReadOptions& options, const InternalKeyComparator& internal_comparator,
19
19
  const FileMetaData& file_meta, const MultiGetContext::Range* mget_range,
20
20
  const std::shared_ptr<const SliceTransform>& prefix_extractor,
21
- HistogramImpl* file_read_hist, bool skip_filters, int level,
22
- Cache::Handle* table_handle) {
21
+ HistogramImpl* file_read_hist, bool skip_filters, bool skip_range_deletions,
22
+ int level, Cache::Handle* table_handle) {
23
23
  auto& fd = file_meta.fd;
24
24
  Status s;
25
25
  TableReader* t = fd.table_reader;
@@ -79,7 +79,7 @@ DEFINE_SYNC_AND_ASYNC(Status, TableCache::MultiGet)
79
79
  assert(t);
80
80
  }
81
81
  }
82
- if (s.ok() && !options.ignore_range_deletions) {
82
+ if (s.ok() && !options.ignore_range_deletions && !skip_range_deletions) {
83
83
  UpdateRangeTombstoneSeqnums(options, t, table_range);
84
84
  }
85
85
  if (s.ok()) {