@nxtedition/rocksdb 7.1.32 → 7.1.34

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 (150) hide show
  1. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +402 -345
  2. package/deps/rocksdb/rocksdb/cache/clock_cache.h +121 -64
  3. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +28 -18
  4. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -0
  5. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
  6. package/deps/rocksdb/rocksdb/db/builder.cc +2 -1
  7. package/deps/rocksdb/rocksdb/db/c.cc +563 -673
  8. package/deps/rocksdb/rocksdb/db/c_test.c +168 -169
  9. package/deps/rocksdb/rocksdb/db/column_family.cc +16 -15
  10. package/deps/rocksdb/rocksdb/db/column_family.h +7 -7
  11. package/deps/rocksdb/rocksdb/db/column_family_test.cc +17 -28
  12. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -9
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -3
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +114 -0
  15. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -3
  16. package/deps/rocksdb/rocksdb/db/convenience.cc +3 -5
  17. package/deps/rocksdb/rocksdb/db/corruption_test.cc +10 -14
  18. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +9 -13
  19. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +2 -2
  21. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +14 -16
  22. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +52 -72
  23. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +12 -12
  25. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -2
  26. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +3 -3
  27. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +1 -12
  28. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +3 -0
  29. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +26 -0
  30. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/db_iter.cc +12 -6
  32. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  33. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +6 -7
  34. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +10 -8
  35. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +15 -13
  36. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -9
  37. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +4 -4
  38. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +1 -1
  39. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +2 -4
  40. package/deps/rocksdb/rocksdb/db/db_options_test.cc +4 -4
  41. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +7 -4
  42. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +7 -5
  43. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +8 -6
  45. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +18 -23
  46. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -5
  47. package/deps/rocksdb/rocksdb/db/db_test.cc +10 -5
  48. package/deps/rocksdb/rocksdb/db/db_test2.cc +172 -169
  49. package/deps/rocksdb/rocksdb/db/db_test_util.cc +68 -66
  50. package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -3
  51. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +31 -39
  52. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +182 -2
  53. package/deps/rocksdb/rocksdb/db/db_write_test.cc +43 -40
  54. package/deps/rocksdb/rocksdb/db/dbformat.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +35 -34
  56. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +10 -11
  57. package/deps/rocksdb/rocksdb/db/error_handler.cc +6 -6
  58. package/deps/rocksdb/rocksdb/db/error_handler.h +93 -94
  59. package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -1
  60. package/deps/rocksdb/rocksdb/db/event_helpers.h +3 -3
  61. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -17
  62. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2 -2
  63. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -2
  64. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -0
  65. package/deps/rocksdb/rocksdb/db/file_indexer.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +4 -2
  67. package/deps/rocksdb/rocksdb/db/filename_test.cc +27 -29
  68. package/deps/rocksdb/rocksdb/db/flush_job.cc +7 -13
  69. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -2
  70. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +15 -21
  71. package/deps/rocksdb/rocksdb/db/forward_iterator.h +7 -6
  72. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +4 -2
  73. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +2 -2
  74. package/deps/rocksdb/rocksdb/db/internal_stats.cc +59 -14
  75. package/deps/rocksdb/rocksdb/db/internal_stats.h +27 -11
  76. package/deps/rocksdb/rocksdb/db/job_context.h +5 -6
  77. package/deps/rocksdb/rocksdb/db/listener_test.cc +21 -23
  78. package/deps/rocksdb/rocksdb/db/log_reader.cc +7 -11
  79. package/deps/rocksdb/rocksdb/db/log_reader.h +4 -6
  80. package/deps/rocksdb/rocksdb/db/log_test.cc +6 -12
  81. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  82. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +0 -1
  83. package/deps/rocksdb/rocksdb/db/lookup_key.h +4 -1
  84. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -1
  85. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +3 -5
  86. package/deps/rocksdb/rocksdb/db/memtable.cc +34 -22
  87. package/deps/rocksdb/rocksdb/db/memtable.h +4 -6
  88. package/deps/rocksdb/rocksdb/db/memtable_list.cc +7 -0
  89. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -13
  90. package/deps/rocksdb/rocksdb/db/merge_context.h +1 -0
  91. package/deps/rocksdb/rocksdb/db/merge_helper.cc +128 -14
  92. package/deps/rocksdb/rocksdb/db/merge_helper.h +15 -7
  93. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +2 -1
  94. package/deps/rocksdb/rocksdb/db/merge_operator.cc +5 -6
  95. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -3
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -1
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +55 -43
  98. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +288 -299
  99. package/deps/rocksdb/rocksdb/db/prefix_test.cc +22 -27
  100. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +1 -1
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/repair.cc +7 -8
  103. package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -4
  104. package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +4 -5
  105. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +10 -4
  106. package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -4
  107. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +6 -7
  108. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +22 -22
  109. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +12 -12
  110. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +6 -8
  111. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +2 -0
  112. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -3
  113. package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -5
  114. package/deps/rocksdb/rocksdb/db/version_edit.h +8 -12
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +74 -102
  116. package/deps/rocksdb/rocksdb/db/version_set.h +8 -10
  117. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +0 -5
  118. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -45
  119. package/deps/rocksdb/rocksdb/db/wal_manager.cc +6 -5
  120. package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -2
  121. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +4 -3
  122. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +144 -61
  123. package/deps/rocksdb/rocksdb/db/write_batch.cc +41 -24
  124. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +2 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +105 -104
  126. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -1
  129. package/deps/rocksdb/rocksdb/db/write_thread.cc +8 -6
  130. package/deps/rocksdb/rocksdb/env/io_posix.h +6 -0
  131. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +134 -65
  132. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +29 -0
  133. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  134. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1 -4
  135. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -0
  136. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -0
  137. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +14 -4
  138. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -7
  139. package/deps/rocksdb/rocksdb/table/get_context.h +1 -2
  140. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +13 -0
  141. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +36 -4
  142. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6 -6
  143. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +23 -28
  144. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +11 -1
  145. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +19 -17
  146. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +10 -7
  147. package/index.js +14 -16
  148. package/package.json +1 -1
  149. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  150. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -5619,7 +5619,7 @@ TEST_P(TransactionStressTest, SeqAdvanceTest) {
5619
5619
  size_t branch = 0;
5620
5620
  auto seq = db_impl->GetLatestSequenceNumber();
5621
5621
  exp_seq = seq;
5622
- txn_t0(0);
5622
+ TestTxn0(0);
5623
5623
  seq = db_impl->TEST_GetLastVisibleSequence();
5624
5624
  ASSERT_EQ(exp_seq, seq);
5625
5625
 
@@ -5637,11 +5637,11 @@ TEST_P(TransactionStressTest, SeqAdvanceTest) {
5637
5637
  }
5638
5638
 
5639
5639
  // Doing it twice might detect some bugs
5640
- txn_t0(1);
5640
+ TestTxn0(1);
5641
5641
  seq = db_impl->TEST_GetLastVisibleSequence();
5642
5642
  ASSERT_EQ(exp_seq, seq);
5643
5643
 
5644
- txn_t1(0);
5644
+ TestTxn1(0);
5645
5645
  seq = db_impl->TEST_GetLastVisibleSequence();
5646
5646
  ASSERT_EQ(exp_seq, seq);
5647
5647
 
@@ -5658,7 +5658,7 @@ TEST_P(TransactionStressTest, SeqAdvanceTest) {
5658
5658
  ASSERT_EQ(exp_seq, seq);
5659
5659
  }
5660
5660
 
5661
- txn_t3(0);
5661
+ TestTxn3(0);
5662
5662
  seq = db_impl->TEST_GetLastVisibleSequence();
5663
5663
  ASSERT_EQ(exp_seq, seq);
5664
5664
 
@@ -5675,7 +5675,7 @@ TEST_P(TransactionStressTest, SeqAdvanceTest) {
5675
5675
  ASSERT_EQ(exp_seq, seq);
5676
5676
  }
5677
5677
 
5678
- txn_t4(0);
5678
+ TestTxn4(0);
5679
5679
  seq = db_impl->TEST_GetLastVisibleSequence();
5680
5680
 
5681
5681
  ASSERT_EQ(exp_seq, seq);
@@ -5693,7 +5693,7 @@ TEST_P(TransactionStressTest, SeqAdvanceTest) {
5693
5693
  ASSERT_EQ(exp_seq, seq);
5694
5694
  }
5695
5695
 
5696
- txn_t2(0);
5696
+ TestTxn2(0);
5697
5697
  seq = db_impl->TEST_GetLastVisibleSequence();
5698
5698
  ASSERT_EQ(exp_seq, seq);
5699
5699
 
@@ -223,12 +223,10 @@ class TransactionTestBase : public ::testing::Test {
223
223
  std::atomic<size_t> expected_commits = {0};
224
224
  // Without Prepare, the commit does not write to WAL
225
225
  std::atomic<size_t> with_empty_commits = {0};
226
- std::function<void(size_t, Status)> txn_t0_with_status = [&](size_t index,
227
- Status exp_s) {
226
+ void TestTxn0(size_t index) {
228
227
  // Test DB's internal txn. It involves no prepare phase nor a commit marker.
229
- WriteOptions wopts;
230
- auto s = db->Put(wopts, "key" + std::to_string(index), "value");
231
- ASSERT_EQ(exp_s, s);
228
+ auto s = db->Put(WriteOptions(), "key" + std::to_string(index), "value");
229
+ ASSERT_OK(s);
232
230
  if (txn_db_options.write_policy == TxnDBWritePolicy::WRITE_COMMITTED) {
233
231
  // Consume one seq per key
234
232
  exp_seq++;
@@ -241,11 +239,9 @@ class TransactionTestBase : public ::testing::Test {
241
239
  }
242
240
  }
243
241
  with_empty_commits++;
244
- };
245
- std::function<void(size_t)> txn_t0 = [&](size_t index) {
246
- return txn_t0_with_status(index, Status::OK());
247
- };
248
- std::function<void(size_t)> txn_t1 = [&](size_t index) {
242
+ }
243
+
244
+ void TestTxn1(size_t index) {
249
245
  // Testing directly writing a write batch. Functionality-wise it is
250
246
  // equivalent to commit without prepare.
251
247
  WriteBatch wb;
@@ -253,8 +249,7 @@ class TransactionTestBase : public ::testing::Test {
253
249
  ASSERT_OK(wb.Put("k1" + istr, "v1"));
254
250
  ASSERT_OK(wb.Put("k2" + istr, "v2"));
255
251
  ASSERT_OK(wb.Put("k3" + istr, "v3"));
256
- WriteOptions wopts;
257
- auto s = db->Write(wopts, &wb);
252
+ auto s = db->Write(WriteOptions(), &wb);
258
253
  if (txn_db_options.write_policy == TxnDBWritePolicy::WRITE_COMMITTED) {
259
254
  // Consume one seq per key
260
255
  exp_seq += 3;
@@ -268,12 +263,12 @@ class TransactionTestBase : public ::testing::Test {
268
263
  }
269
264
  ASSERT_OK(s);
270
265
  with_empty_commits++;
271
- };
272
- std::function<void(size_t)> txn_t2 = [&](size_t index) {
266
+ }
267
+
268
+ void TestTxn2(size_t index) {
273
269
  // Commit without prepare. It should write to DB without a commit marker.
274
- TransactionOptions txn_options;
275
- WriteOptions write_options;
276
- Transaction* txn = db->BeginTransaction(write_options, txn_options);
270
+ Transaction* txn =
271
+ db->BeginTransaction(WriteOptions(), TransactionOptions());
277
272
  auto istr = std::to_string(index);
278
273
  ASSERT_OK(txn->SetName("xid" + istr));
279
274
  ASSERT_OK(txn->Put(Slice("foo" + istr), Slice("bar")));
@@ -301,12 +296,12 @@ class TransactionTestBase : public ::testing::Test {
301
296
  }
302
297
  delete txn;
303
298
  with_empty_commits++;
304
- };
305
- std::function<void(size_t)> txn_t3 = [&](size_t index) {
299
+ }
300
+
301
+ void TestTxn3(size_t index) {
306
302
  // A full 2pc txn that also involves a commit marker.
307
- TransactionOptions txn_options;
308
- WriteOptions write_options;
309
- Transaction* txn = db->BeginTransaction(write_options, txn_options);
303
+ Transaction* txn =
304
+ db->BeginTransaction(WriteOptions(), TransactionOptions());
310
305
  auto istr = std::to_string(index);
311
306
  ASSERT_OK(txn->SetName("xid" + istr));
312
307
  ASSERT_OK(txn->Put(Slice("foo" + istr), Slice("bar")));
@@ -334,12 +329,12 @@ class TransactionTestBase : public ::testing::Test {
334
329
  exp_seq++;
335
330
  }
336
331
  delete txn;
337
- };
338
- std::function<void(size_t)> txn_t4 = [&](size_t index) {
332
+ }
333
+
334
+ void TestTxn4(size_t index) {
339
335
  // A full 2pc txn that also involves a commit marker.
340
- TransactionOptions txn_options;
341
- WriteOptions write_options;
342
- Transaction* txn = db->BeginTransaction(write_options, txn_options);
336
+ Transaction* txn =
337
+ db->BeginTransaction(WriteOptions(), TransactionOptions());
343
338
  auto istr = std::to_string(index);
344
339
  ASSERT_OK(txn->SetName("xid" + istr));
345
340
  ASSERT_OK(txn->Put(Slice("foo" + istr), Slice("bar")));
@@ -375,7 +370,7 @@ class TransactionTestBase : public ::testing::Test {
375
370
  }
376
371
  }
377
372
  delete txn;
378
- };
373
+ }
379
374
 
380
375
  // Test that we can change write policy after a clean shutdown (which would
381
376
  // empty the WAL)
@@ -320,6 +320,7 @@ TEST_P(WriteCommittedTxnWithTsTest, Merge) {
320
320
 
321
321
  ColumnFamilyOptions cf_options;
322
322
  cf_options.comparator = test::BytewiseComparatorWithU64TsWrapper();
323
+ cf_options.merge_operator = MergeOperators::CreateStringAppendOperator();
323
324
  const std::string test_cf_name = "test_cf";
324
325
  ColumnFamilyHandle* cfh = nullptr;
325
326
  assert(db);
@@ -338,8 +339,17 @@ TEST_P(WriteCommittedTxnWithTsTest, Merge) {
338
339
  NewTxn(WriteOptions(), TransactionOptions()));
339
340
  assert(txn);
340
341
  ASSERT_OK(txn->Put(handles_[1], "foo", "bar"));
341
- ASSERT_TRUE(txn->Merge(handles_[1], "foo", "1").IsInvalidArgument());
342
+ ASSERT_OK(txn->Merge(handles_[1], "foo", "1"));
343
+ ASSERT_OK(txn->SetCommitTimestamp(24));
344
+ ASSERT_OK(txn->Commit());
342
345
  txn.reset();
346
+ {
347
+ std::string value;
348
+ const Status s =
349
+ GetFromDb(ReadOptions(), handles_[1], "foo", /*ts=*/24, &value);
350
+ ASSERT_OK(s);
351
+ ASSERT_EQ("bar,1", value);
352
+ }
343
353
  }
344
354
 
345
355
  TEST_P(WriteCommittedTxnWithTsTest, GetForUpdate) {
@@ -1684,22 +1684,23 @@ TEST_P(SeqAdvanceConcurrentTest, SeqAdvanceConcurrent) {
1684
1684
  expected_commits = 0;
1685
1685
  std::vector<port::Thread> threads;
1686
1686
 
1687
- linked = 0;
1687
+ linked.store(0, std::memory_order_release);
1688
1688
  std::atomic<bool> batch_formed(false);
1689
1689
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1690
1690
  "WriteThread::EnterAsBatchGroupLeader:End",
1691
1691
  [&](void* /*arg*/) { batch_formed = true; });
1692
1692
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1693
1693
  "WriteThread::JoinBatchGroup:Wait", [&](void* /*arg*/) {
1694
- linked++;
1695
- if (linked == 1) {
1694
+ size_t orig_linked = linked.fetch_add(1, std::memory_order_acq_rel);
1695
+ if (orig_linked == 0) {
1696
1696
  // Wait until the others are linked too.
1697
- while (linked < first_group_size) {
1697
+ while (linked.load(std::memory_order_acquire) < first_group_size) {
1698
1698
  }
1699
- } else if (linked == 1 + first_group_size) {
1699
+ } else if (orig_linked == first_group_size) {
1700
1700
  // Make the 2nd batch of the rest of writes plus any followup
1701
1701
  // commits from the first batch
1702
- while (linked < txn_cnt + commit_writes) {
1702
+ while (linked.load(std::memory_order_acquire) <
1703
+ txn_cnt + commit_writes) {
1703
1704
  }
1704
1705
  }
1705
1706
  // Then we will have one or more batches consisting of follow-up
@@ -1713,32 +1714,33 @@ TEST_P(SeqAdvanceConcurrentTest, SeqAdvanceConcurrent) {
1713
1714
  size_t d = (n % base[bi + 1]) / base[bi];
1714
1715
  switch (d) {
1715
1716
  case 0:
1716
- threads.emplace_back(txn_t0, bi);
1717
+ threads.emplace_back(&TransactionTestBase::TestTxn0, this, bi);
1717
1718
  break;
1718
1719
  case 1:
1719
- threads.emplace_back(txn_t1, bi);
1720
+ threads.emplace_back(&TransactionTestBase::TestTxn1, this, bi);
1720
1721
  break;
1721
1722
  case 2:
1722
- threads.emplace_back(txn_t2, bi);
1723
+ threads.emplace_back(&TransactionTestBase::TestTxn2, this, bi);
1723
1724
  break;
1724
1725
  case 3:
1725
- threads.emplace_back(txn_t3, bi);
1726
+ threads.emplace_back(&TransactionTestBase::TestTxn3, this, bi);
1726
1727
  break;
1727
1728
  case 4:
1728
- threads.emplace_back(txn_t3, bi);
1729
+ threads.emplace_back(&TransactionTestBase::TestTxn3, this, bi);
1729
1730
  break;
1730
1731
  default:
1731
1732
  FAIL();
1732
1733
  }
1733
1734
  // wait to be linked
1734
- while (linked.load() <= bi) {
1735
+ while (linked.load(std::memory_order_acquire) <= bi) {
1735
1736
  }
1736
1737
  // after a queue of size first_group_size
1737
1738
  if (bi + 1 == first_group_size) {
1738
1739
  while (!batch_formed) {
1739
1740
  }
1740
1741
  // to make it more deterministic, wait until the commits are linked
1741
- while (linked.load() <= bi + expected_commits) {
1742
+ while (linked.load(std::memory_order_acquire) <=
1743
+ bi + expected_commits) {
1742
1744
  }
1743
1745
  }
1744
1746
  }
@@ -1792,7 +1794,7 @@ TEST_P(WritePreparedTransactionTest, BasicRecovery) {
1792
1794
  ASSERT_OK(ReOpen());
1793
1795
  WritePreparedTxnDB* wp_db = dynamic_cast<WritePreparedTxnDB*>(db);
1794
1796
 
1795
- txn_t0(0);
1797
+ TestTxn0(0);
1796
1798
 
1797
1799
  TransactionOptions txn_options;
1798
1800
  WriteOptions write_options;
@@ -1807,7 +1809,7 @@ TEST_P(WritePreparedTransactionTest, BasicRecovery) {
1807
1809
  ASSERT_OK(s);
1808
1810
  auto prep_seq_0 = txn0->GetId();
1809
1811
 
1810
- txn_t1(0);
1812
+ TestTxn1(0);
1811
1813
 
1812
1814
  index++;
1813
1815
  Transaction* txn1 = db->BeginTransaction(write_options, txn_options);
@@ -1820,7 +1822,7 @@ TEST_P(WritePreparedTransactionTest, BasicRecovery) {
1820
1822
  ASSERT_OK(s);
1821
1823
  auto prep_seq_1 = txn1->GetId();
1822
1824
 
1823
- txn_t2(0);
1825
+ TestTxn2(0);
1824
1826
 
1825
1827
  ReadOptions ropt;
1826
1828
  PinnableSlice pinnable_val;
@@ -1856,7 +1858,7 @@ TEST_P(WritePreparedTransactionTest, BasicRecovery) {
1856
1858
  ASSERT_TRUE(s.IsNotFound());
1857
1859
  pinnable_val.Reset();
1858
1860
 
1859
- txn_t3(0);
1861
+ TestTxn3(0);
1860
1862
 
1861
1863
  // Test that a recovered txns will be properly marked committed for the next
1862
1864
  // recovery
@@ -664,22 +664,25 @@ Status WriteBatchWithIndexInternal::MergeKey(const Slice& key,
664
664
  Statistics* statistics = immutable_db_options.statistics.get();
665
665
  Logger* logger = immutable_db_options.info_log.get();
666
666
  SystemClock* clock = immutable_db_options.clock;
667
- return MergeHelper::TimedFullMerge(merge_operator, key, value,
668
- context.GetOperands(), result, logger,
669
- statistics, clock);
667
+ return MergeHelper::TimedFullMerge(
668
+ merge_operator, key, value, context.GetOperands(), result, logger,
669
+ statistics, clock, /* result_operand */ nullptr,
670
+ /* update_num_ops_stats */ false);
670
671
  } else if (db_options_ != nullptr) {
671
672
  Statistics* statistics = db_options_->statistics.get();
672
673
  Env* env = db_options_->env;
673
674
  Logger* logger = db_options_->info_log.get();
674
675
  SystemClock* clock = env->GetSystemClock().get();
675
- return MergeHelper::TimedFullMerge(merge_operator, key, value,
676
- context.GetOperands(), result, logger,
677
- statistics, clock);
676
+ return MergeHelper::TimedFullMerge(
677
+ merge_operator, key, value, context.GetOperands(), result, logger,
678
+ statistics, clock, /* result_operand */ nullptr,
679
+ /* update_num_ops_stats */ false);
678
680
  } else {
679
681
  const auto cf_opts = cfh->cfd()->ioptions();
680
682
  return MergeHelper::TimedFullMerge(
681
683
  merge_operator, key, value, context.GetOperands(), result,
682
- cf_opts->logger, cf_opts->stats, cf_opts->clock);
684
+ cf_opts->logger, cf_opts->stats, cf_opts->clock,
685
+ /* result_operand */ nullptr, /* update_num_ops_stats */ false);
683
686
  }
684
687
  } else {
685
688
  return Status::InvalidArgument("Must provide a column_family");
package/index.js CHANGED
@@ -208,11 +208,7 @@ class RocksLevel extends AbstractLevel {
208
208
  this[kUnref]()
209
209
 
210
210
  if (!err) {
211
- this.emit('update', {
212
- rows: batch.toArray(),
213
- count: batch.length,
214
- sequence: sequence
215
- })
211
+ this.emit('update', { batch, sequence })
216
212
  }
217
213
 
218
214
  callback(err)
@@ -233,11 +229,7 @@ class RocksLevel extends AbstractLevel {
233
229
 
234
230
  // TODO (fix)
235
231
  // if (!err) {
236
- // this.emit('update', {
237
- // rows: batch.toArray(),
238
- // count: batch.length,
239
- // sequence: sequence
240
- // })
232
+ // this.emit('update', { batch, sequence })
241
233
  // }
242
234
 
243
235
  callback(err)
@@ -253,9 +245,9 @@ class RocksLevel extends AbstractLevel {
253
245
  return new Iterator(this, this[kContext], options ?? EMPTY)
254
246
  }
255
247
 
256
- get identity () {
257
- return binding.db_get_identity(this[kContext])
258
- }
248
+ get identity () {
249
+ return binding.db_get_identity(this[kContext])
250
+ }
259
251
 
260
252
  getProperty (property) {
261
253
  if (typeof property !== 'string') {
@@ -366,7 +358,13 @@ class RocksLevel extends AbstractLevel {
366
358
  objectMode: true,
367
359
  readableHighWaterMark: 8192,
368
360
  construct (callback) {
369
- this._next = (update) => {
361
+ this._next = ({ batch, sequence }) => {
362
+ const update = {
363
+ rows: batch.toArray(options),
364
+ count: batch.length,
365
+ sequence
366
+ }
367
+
370
368
  if (!this.push(update)) {
371
369
  this.push(null)
372
370
  db.off('update', this._next)
@@ -401,7 +399,7 @@ class RocksLevel extends AbstractLevel {
401
399
  first = false
402
400
  }
403
401
 
404
- // TODO (Fix): What if since > sequence && since < sequence + count
402
+ // TODO (Fix): What if since > sequence && since < sequence + count
405
403
  if (update.sequence + update.count > since) {
406
404
  yield update
407
405
  }
@@ -428,7 +426,7 @@ class RocksLevel extends AbstractLevel {
428
426
  first = false
429
427
  }
430
428
 
431
- // TODO (Fix): What if since > sequence && since < sequence + count
429
+ // TODO (Fix): What if since > sequence && since < sequence + count
432
430
  if (update.sequence + update.count > since) {
433
431
  yield update
434
432
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/rocksdb",
3
- "version": "7.1.32",
3
+ "version": "7.1.34",
4
4
  "description": "A low-level Node.js RocksDB binding",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
Binary file