@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.
- package/binding.cc +50 -46
- package/deps/rocksdb/rocksdb/CMakeLists.txt +2 -1
- package/deps/rocksdb/rocksdb/TARGETS +2 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +60 -17
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +81 -37
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +10 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +14 -9
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +69 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +6 -6
- package/deps/rocksdb/rocksdb/db/memtable.cc +19 -7
- package/deps/rocksdb/rocksdb/db/memtable.h +8 -16
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +27 -16
- package/deps/rocksdb/rocksdb/db/memtable_list.h +18 -11
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +70 -55
- package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
- package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +3 -3
- package/deps/rocksdb/rocksdb/db/version_set.cc +530 -257
- package/deps/rocksdb/rocksdb/db/version_set.h +32 -2
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +64 -12
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +18 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +13 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +83 -0
- package/deps/rocksdb/rocksdb/options/options.cc +4 -2
- package/deps/rocksdb/rocksdb/src.mk +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -10
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +5 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +10 -28
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +4 -4
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +11 -9
- package/deps/rocksdb/rocksdb/table/get_context.cc +34 -22
- package/deps/rocksdb/rocksdb/table/get_context.h +6 -3
- package/deps/rocksdb/rocksdb/table/multiget_context.h +69 -5
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +8 -8
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +23 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +27 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -4
- package/deps/rocksdb/rocksdb.gyp +1 -0
- package/index.js +20 -11
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- 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
|
-
|
|
243
|
-
|
|
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 =
|
|
323
|
-
LookupKey("key1", seq), &value, /*
|
|
324
|
-
|
|
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
|
-
|
|
330
|
-
|
|
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 =
|
|
336
|
-
LookupKey("key2", seq), &value, /*
|
|
337
|
-
|
|
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
|
-
|
|
344
|
-
|
|
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
|
-
|
|
375
|
-
|
|
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 =
|
|
424
|
-
|
|
425
|
-
|
|
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 =
|
|
430
|
-
|
|
431
|
-
|
|
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 =
|
|
453
|
-
|
|
454
|
-
|
|
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 =
|
|
459
|
-
|
|
460
|
-
|
|
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, /*
|
|
467
|
-
&max_covering_tombstone_seq,
|
|
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, /*
|
|
473
|
-
&max_covering_tombstone_seq,
|
|
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 =
|
|
524
|
-
|
|
525
|
-
|
|
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 =
|
|
530
|
-
|
|
531
|
-
|
|
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 =
|
|
536
|
-
|
|
537
|
-
|
|
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, /*
|
|
544
|
-
&max_covering_tombstone_seq,
|
|
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, /*
|
|
550
|
-
&max_covering_tombstone_seq,
|
|
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 =
|
|
557
|
-
|
|
558
|
-
|
|
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 (
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
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
|
-
|
|
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,
|
|
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()) {
|