@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.
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +402 -345
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +121 -64
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +28 -18
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +2 -1
- package/deps/rocksdb/rocksdb/db/c.cc +563 -673
- package/deps/rocksdb/rocksdb/db/c_test.c +168 -169
- package/deps/rocksdb/rocksdb/db/column_family.cc +16 -15
- package/deps/rocksdb/rocksdb/db/column_family.h +7 -7
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +17 -28
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +114 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/convenience.cc +3 -5
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +10 -14
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +9 -13
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +52 -72
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +1 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +26 -0
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +12 -6
- package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +6 -7
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +10 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +15 -13
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +2 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +7 -4
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +8 -6
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +18 -23
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_test.cc +10 -5
- package/deps/rocksdb/rocksdb/db/db_test2.cc +172 -169
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +68 -66
- package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -3
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +31 -39
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +182 -2
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +43 -40
- package/deps/rocksdb/rocksdb/db/dbformat.h +15 -0
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +35 -34
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +10 -11
- package/deps/rocksdb/rocksdb/db/error_handler.cc +6 -6
- package/deps/rocksdb/rocksdb/db/error_handler.h +93 -94
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.h +3 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -17
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -0
- package/deps/rocksdb/rocksdb/db/file_indexer.h +2 -1
- package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/filename_test.cc +27 -29
- package/deps/rocksdb/rocksdb/db/flush_job.cc +7 -13
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +15 -21
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +7 -6
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +2 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +59 -14
- package/deps/rocksdb/rocksdb/db/internal_stats.h +27 -11
- package/deps/rocksdb/rocksdb/db/job_context.h +5 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +21 -23
- package/deps/rocksdb/rocksdb/db/log_reader.cc +7 -11
- package/deps/rocksdb/rocksdb/db/log_reader.h +4 -6
- package/deps/rocksdb/rocksdb/db/log_test.cc +6 -12
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +0 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +4 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/memtable.cc +34 -22
- package/deps/rocksdb/rocksdb/db/memtable.h +4 -6
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +7 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -13
- package/deps/rocksdb/rocksdb/db/merge_context.h +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +128 -14
- package/deps/rocksdb/rocksdb/db/merge_helper.h +15 -7
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +5 -6
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +55 -43
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +288 -299
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +22 -27
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +7 -8
- package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +4 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +10 -4
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +6 -7
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +22 -22
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +12 -12
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +6 -8
- package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +2 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -5
- package/deps/rocksdb/rocksdb/db/version_edit.h +8 -12
- package/deps/rocksdb/rocksdb/db/version_set.cc +74 -102
- package/deps/rocksdb/rocksdb/db/version_set.h +8 -10
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +0 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -45
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +6 -5
- package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +144 -61
- package/deps/rocksdb/rocksdb/db/write_batch.cc +41 -24
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +2 -7
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +105 -104
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_controller.h +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +8 -6
- package/deps/rocksdb/rocksdb/env/io_posix.h +6 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +134 -65
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +29 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +14 -4
- package/deps/rocksdb/rocksdb/table/get_context.cc +52 -7
- package/deps/rocksdb/rocksdb/table/get_context.h +1 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +13 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +36 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +23 -28
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +19 -17
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +10 -7
- package/index.js +14 -16
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- 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
|
-
|
|
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
|
-
|
|
5640
|
+
TestTxn0(1);
|
|
5641
5641
|
seq = db_impl->TEST_GetLastVisibleSequence();
|
|
5642
5642
|
ASSERT_EQ(exp_seq, seq);
|
|
5643
5643
|
|
|
5644
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
230
|
-
|
|
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
|
-
|
|
246
|
-
|
|
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
|
|
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
|
-
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
void TestTxn2(size_t index) {
|
|
273
269
|
// Commit without prepare. It should write to DB without a commit marker.
|
|
274
|
-
|
|
275
|
-
|
|
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
|
-
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
void TestTxn3(size_t index) {
|
|
306
302
|
// A full 2pc txn that also involves a commit marker.
|
|
307
|
-
|
|
308
|
-
|
|
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
|
-
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
void TestTxn4(size_t index) {
|
|
339
335
|
// A full 2pc txn that also involves a commit marker.
|
|
340
|
-
|
|
341
|
-
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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 (
|
|
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 <
|
|
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(
|
|
1717
|
+
threads.emplace_back(&TransactionTestBase::TestTxn0, this, bi);
|
|
1717
1718
|
break;
|
|
1718
1719
|
case 1:
|
|
1719
|
-
threads.emplace_back(
|
|
1720
|
+
threads.emplace_back(&TransactionTestBase::TestTxn1, this, bi);
|
|
1720
1721
|
break;
|
|
1721
1722
|
case 2:
|
|
1722
|
-
threads.emplace_back(
|
|
1723
|
+
threads.emplace_back(&TransactionTestBase::TestTxn2, this, bi);
|
|
1723
1724
|
break;
|
|
1724
1725
|
case 3:
|
|
1725
|
-
threads.emplace_back(
|
|
1726
|
+
threads.emplace_back(&TransactionTestBase::TestTxn3, this, bi);
|
|
1726
1727
|
break;
|
|
1727
1728
|
case 4:
|
|
1728
|
-
threads.emplace_back(
|
|
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() <=
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1861
|
+
TestTxn3(0);
|
|
1860
1862
|
|
|
1861
1863
|
// Test that a recovered txns will be properly marked committed for the next
|
|
1862
1864
|
// recovery
|
package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc
CHANGED
|
@@ -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(
|
|
668
|
-
|
|
669
|
-
|
|
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(
|
|
676
|
-
|
|
677
|
-
|
|
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
|
-
|
|
257
|
-
|
|
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 = (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
Binary file
|
|
Binary file
|