@nxtedition/rocksdb 7.0.0-alpha.6 → 7.0.0
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 +37 -36
- package/deps/rocksdb/rocksdb/CMakeLists.txt +10 -3
- package/deps/rocksdb/rocksdb/Makefile +8 -1
- package/deps/rocksdb/rocksdb/TARGETS +14 -0
- package/deps/rocksdb/rocksdb/cache/cache.cc +50 -2
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +9 -3
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +111 -33
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +71 -31
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +31 -30
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +21 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +35 -38
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +22 -9
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +48 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +78 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +7 -5
- package/deps/rocksdb/rocksdb/db/c.cc +777 -108
- package/deps/rocksdb/rocksdb/db/c_test.c +290 -30
- package/deps/rocksdb/rocksdb/db/column_family.cc +13 -0
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +24 -36
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +18 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +6 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +38 -40
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +14 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +253 -24
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +9 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +67 -10
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +83 -7
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +68 -0
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +40 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +94 -23
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +17 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +263 -58
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +186 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +24 -28
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +116 -83
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +13 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +71 -34
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +72 -33
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +629 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +438 -10
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +43 -2
- package/deps/rocksdb/rocksdb/db/db_test.cc +41 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +41 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +90 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +109 -16
- package/deps/rocksdb/rocksdb/db/dbformat.h +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +54 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +3 -3
- package/deps/rocksdb/rocksdb/db/log_reader.cc +22 -4
- package/deps/rocksdb/rocksdb/db/log_reader.h +4 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +4 -0
- package/deps/rocksdb/rocksdb/db/post_memtable_callback.h +25 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +65 -2
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +3 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +52 -0
- package/deps/rocksdb/rocksdb/db/version_set.h +57 -43
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +14 -4
- package/deps/rocksdb/rocksdb/db/wal_manager.h +16 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +141 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +55 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +292 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +42 -19
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +28 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +6 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +11 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +74 -167
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -9
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -9
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +117 -10
- package/deps/rocksdb/rocksdb/env/composite_env.cc +7 -0
- package/deps/rocksdb/rocksdb/env/env.cc +4 -0
- package/deps/rocksdb/rocksdb/env/env_posix.cc +3 -3
- package/deps/rocksdb/rocksdb/env/env_test.cc +5 -5
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +45 -0
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +14 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/env/io_posix.cc +50 -24
- package/deps/rocksdb/rocksdb/env/io_posix.h +9 -7
- package/deps/rocksdb/rocksdb/env/mock_env.cc +9 -3
- package/deps/rocksdb/rocksdb/file/file_util.cc +4 -1
- package/deps/rocksdb/rocksdb/file/filename.cc +14 -0
- package/deps/rocksdb/rocksdb/file/line_file_reader.cc +9 -4
- package/deps/rocksdb/rocksdb/file/line_file_reader.h +3 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +157 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -1
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +68 -32
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +20 -6
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +10 -6
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +4 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +16 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +231 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +4 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +13 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +4 -20
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +31 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +4 -20
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +34 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +74 -0
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +36 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +16 -3
- package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
- package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -2
- package/deps/rocksdb/rocksdb/logging/log_buffer.h +1 -1
- package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -3
- package/deps/rocksdb/rocksdb/memory/arena.cc +0 -1
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +61 -73
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +6 -5
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +6 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +7 -3
- package/deps/rocksdb/rocksdb/options/cf_options.cc +6 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +3 -0
- package/deps/rocksdb/rocksdb/options/options.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +1 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +4 -0
- package/deps/rocksdb/rocksdb/port/port_posix.h +0 -2
- package/deps/rocksdb/rocksdb/port/sys_time.h +27 -11
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -1
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +16 -0
- package/deps/rocksdb/rocksdb/port/win/io_win.h +11 -2
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +1 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -16
- package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +2 -2
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +2 -2
- package/deps/rocksdb/rocksdb/rocksdb.pc.in +4 -5
- package/deps/rocksdb/rocksdb/src.mk +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +7 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +39 -43
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +42 -34
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.cc +7 -13
- package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.h +9 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +6 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +8 -5
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -14
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +2 -0
- package/deps/rocksdb/rocksdb/table/format.h +1 -3
- package/deps/rocksdb/rocksdb/table/get_context.cc +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -0
- package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +3 -4
- package/deps/rocksdb/rocksdb/table/table_test.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +102 -6
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +19 -2
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +2 -4
- package/deps/rocksdb/rocksdb/util/autovector.h +11 -1
- package/deps/rocksdb/rocksdb/util/cleanable.cc +1 -0
- package/deps/rocksdb/rocksdb/util/compression.h +5 -7
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +14 -8
- package/deps/rocksdb/rocksdb/util/string_util.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -63
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +14 -0
- package/deps/rocksdb/rocksdb/utilities/counted_fs.h +7 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +8 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +6 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +34 -21
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +31 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +63 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +40 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +426 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +37 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +16 -18
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +18 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +61 -0
- package/deps/rocksdb/rocksdb.gyp +1 -0
- package/index.js +5 -2
- 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
|
@@ -30,7 +30,7 @@ Status DBImpl::Put(const WriteOptions& o, ColumnFamilyHandle* column_family,
|
|
|
30
30
|
|
|
31
31
|
Status DBImpl::Put(const WriteOptions& o, ColumnFamilyHandle* column_family,
|
|
32
32
|
const Slice& key, const Slice& ts, const Slice& val) {
|
|
33
|
-
const Status s =
|
|
33
|
+
const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
|
|
34
34
|
if (!s.ok()) {
|
|
35
35
|
return s;
|
|
36
36
|
}
|
|
@@ -63,7 +63,7 @@ Status DBImpl::Delete(const WriteOptions& write_options,
|
|
|
63
63
|
Status DBImpl::Delete(const WriteOptions& write_options,
|
|
64
64
|
ColumnFamilyHandle* column_family, const Slice& key,
|
|
65
65
|
const Slice& ts) {
|
|
66
|
-
const Status s =
|
|
66
|
+
const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
|
|
67
67
|
if (!s.ok()) {
|
|
68
68
|
return s;
|
|
69
69
|
}
|
|
@@ -83,7 +83,7 @@ Status DBImpl::SingleDelete(const WriteOptions& write_options,
|
|
|
83
83
|
Status DBImpl::SingleDelete(const WriteOptions& write_options,
|
|
84
84
|
ColumnFamilyHandle* column_family, const Slice& key,
|
|
85
85
|
const Slice& ts) {
|
|
86
|
-
const Status s =
|
|
86
|
+
const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
|
|
87
87
|
if (!s.ok()) {
|
|
88
88
|
return s;
|
|
89
89
|
}
|
|
@@ -126,7 +126,8 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
126
126
|
uint64_t* log_used, uint64_t log_ref,
|
|
127
127
|
bool disable_memtable, uint64_t* seq_used,
|
|
128
128
|
size_t batch_cnt,
|
|
129
|
-
PreReleaseCallback* pre_release_callback
|
|
129
|
+
PreReleaseCallback* pre_release_callback,
|
|
130
|
+
PostMemTableCallback* post_memtable_callback) {
|
|
130
131
|
assert(!seq_per_batch_ || batch_cnt != 0);
|
|
131
132
|
if (my_batch == nullptr) {
|
|
132
133
|
return Status::InvalidArgument("Batch is nullptr!");
|
|
@@ -185,6 +186,15 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
185
186
|
return Status::NotSupported(
|
|
186
187
|
"pipelined_writes is not compatible with unordered_write");
|
|
187
188
|
}
|
|
189
|
+
if (immutable_db_options_.enable_pipelined_write &&
|
|
190
|
+
post_memtable_callback != nullptr) {
|
|
191
|
+
return Status::NotSupported(
|
|
192
|
+
"pipelined write currently does not honor post_memtable_callback");
|
|
193
|
+
}
|
|
194
|
+
if (seq_per_batch_ && post_memtable_callback != nullptr) {
|
|
195
|
+
return Status::NotSupported(
|
|
196
|
+
"seq_per_batch currently does not honor post_memtable_callback");
|
|
197
|
+
}
|
|
188
198
|
// Otherwise IsLatestPersistentState optimization does not make sense
|
|
189
199
|
assert(!WriteBatchInternal::IsLatestPersistentState(my_batch) ||
|
|
190
200
|
disable_memtable);
|
|
@@ -241,7 +251,8 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
241
251
|
|
|
242
252
|
PERF_TIMER_GUARD(write_pre_and_post_process_time);
|
|
243
253
|
WriteThread::Writer w(write_options, my_batch, callback, log_ref,
|
|
244
|
-
disable_memtable, batch_cnt, pre_release_callback
|
|
254
|
+
disable_memtable, batch_cnt, pre_release_callback,
|
|
255
|
+
post_memtable_callback);
|
|
245
256
|
StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
|
|
246
257
|
|
|
247
258
|
write_thread_.JoinBatchGroup(&w);
|
|
@@ -268,6 +279,16 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
268
279
|
// we're responsible for exit batch group
|
|
269
280
|
// TODO(myabandeh): propagate status to write_group
|
|
270
281
|
auto last_sequence = w.write_group->last_sequence;
|
|
282
|
+
for (auto* tmp_w : *(w.write_group)) {
|
|
283
|
+
assert(tmp_w);
|
|
284
|
+
if (tmp_w->post_memtable_callback) {
|
|
285
|
+
Status tmp_s =
|
|
286
|
+
(*tmp_w->post_memtable_callback)(last_sequence, disable_memtable);
|
|
287
|
+
// TODO: propagate the execution status of post_memtable_callback to
|
|
288
|
+
// caller.
|
|
289
|
+
assert(tmp_s.ok());
|
|
290
|
+
}
|
|
291
|
+
}
|
|
271
292
|
versions_->SetLastSequence(last_sequence);
|
|
272
293
|
MemTableInsertStatusCheck(w.status);
|
|
273
294
|
write_thread_.ExitAsBatchGroupFollower(&w);
|
|
@@ -319,7 +340,11 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
319
340
|
|
|
320
341
|
PERF_TIMER_START(write_pre_and_post_process_time);
|
|
321
342
|
}
|
|
343
|
+
|
|
322
344
|
log::Writer* log_writer = logs_.back().writer;
|
|
345
|
+
LogFileNumberSize& log_file_number_size = alive_log_files_.back();
|
|
346
|
+
|
|
347
|
+
assert(log_writer->get_log_number() == log_file_number_size.number);
|
|
323
348
|
|
|
324
349
|
mutex_.Unlock();
|
|
325
350
|
|
|
@@ -419,7 +444,8 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
419
444
|
if (status.ok() && !write_options.disableWAL) {
|
|
420
445
|
PERF_TIMER_GUARD(write_wal_time);
|
|
421
446
|
io_s = WriteToWAL(write_group, log_writer, log_used, need_log_sync,
|
|
422
|
-
need_log_dir_sync, last_sequence + 1
|
|
447
|
+
need_log_dir_sync, last_sequence + 1,
|
|
448
|
+
log_file_number_size);
|
|
423
449
|
}
|
|
424
450
|
} else {
|
|
425
451
|
if (status.ok() && !write_options.disableWAL) {
|
|
@@ -545,6 +571,16 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
|
|
|
545
571
|
}
|
|
546
572
|
if (should_exit_batch_group) {
|
|
547
573
|
if (status.ok()) {
|
|
574
|
+
for (auto* tmp_w : write_group) {
|
|
575
|
+
assert(tmp_w);
|
|
576
|
+
if (tmp_w->post_memtable_callback) {
|
|
577
|
+
Status tmp_s =
|
|
578
|
+
(*tmp_w->post_memtable_callback)(last_sequence, disable_memtable);
|
|
579
|
+
// TODO: propagate the execution status of post_memtable_callback to
|
|
580
|
+
// caller.
|
|
581
|
+
assert(tmp_s.ok());
|
|
582
|
+
}
|
|
583
|
+
}
|
|
548
584
|
// Note: if we are to resume after non-OK statuses we need to revisit how
|
|
549
585
|
// we reacts to non-OK statuses here.
|
|
550
586
|
versions_->SetLastSequence(last_sequence);
|
|
@@ -586,6 +622,10 @@ Status DBImpl::PipelinedWriteImpl(const WriteOptions& write_options,
|
|
|
586
622
|
w.status = PreprocessWrite(write_options, &need_log_sync, &write_context);
|
|
587
623
|
PERF_TIMER_START(write_pre_and_post_process_time);
|
|
588
624
|
log::Writer* log_writer = logs_.back().writer;
|
|
625
|
+
LogFileNumberSize& log_file_number_size = alive_log_files_.back();
|
|
626
|
+
|
|
627
|
+
assert(log_writer->get_log_number() == log_file_number_size.number);
|
|
628
|
+
|
|
589
629
|
mutex_.Unlock();
|
|
590
630
|
|
|
591
631
|
// This can set non-OK status if callback fail.
|
|
@@ -649,8 +689,9 @@ Status DBImpl::PipelinedWriteImpl(const WriteOptions& write_options,
|
|
|
649
689
|
wal_write_group.size - 1);
|
|
650
690
|
RecordTick(stats_, WRITE_DONE_BY_OTHER, wal_write_group.size - 1);
|
|
651
691
|
}
|
|
652
|
-
io_s =
|
|
653
|
-
|
|
692
|
+
io_s =
|
|
693
|
+
WriteToWAL(wal_write_group, log_writer, log_used, need_log_sync,
|
|
694
|
+
need_log_dir_sync, current_sequence, log_file_number_size);
|
|
654
695
|
w.status = io_s;
|
|
655
696
|
}
|
|
656
697
|
|
|
@@ -1041,12 +1082,18 @@ Status DBImpl::PreprocessWrite(const WriteOptions& write_options,
|
|
|
1041
1082
|
|
|
1042
1083
|
PERF_TIMER_GUARD(write_scheduling_flushes_compactions_time);
|
|
1043
1084
|
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1085
|
+
if (UNLIKELY(status.ok() && total_log_size_ > GetMaxTotalWalSize())) {
|
|
1086
|
+
assert(versions_);
|
|
1087
|
+
const ColumnFamilySet* const column_families =
|
|
1088
|
+
versions_->GetColumnFamilySet();
|
|
1089
|
+
assert(column_families);
|
|
1090
|
+
size_t num_cfs = column_families->NumberOfColumnFamilies();
|
|
1091
|
+
|
|
1092
|
+
assert(num_cfs >= 1);
|
|
1093
|
+
if (num_cfs > 1) {
|
|
1094
|
+
WaitForPendingWrites();
|
|
1095
|
+
status = SwitchWAL(write_context);
|
|
1096
|
+
}
|
|
1050
1097
|
}
|
|
1051
1098
|
|
|
1052
1099
|
if (UNLIKELY(status.ok() && write_buffer_manager_->ShouldFlush())) {
|
|
@@ -1172,17 +1219,9 @@ IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
|
|
|
1172
1219
|
log::Writer* log_writer, uint64_t* log_used,
|
|
1173
1220
|
uint64_t* log_size,
|
|
1174
1221
|
Env::IOPriority rate_limiter_priority,
|
|
1175
|
-
|
|
1222
|
+
LogFileNumberSize& log_file_number_size) {
|
|
1176
1223
|
assert(log_size != nullptr);
|
|
1177
1224
|
|
|
1178
|
-
// Assert mutex explicitly.
|
|
1179
|
-
if (with_db_mutex) {
|
|
1180
|
-
mutex_.AssertHeld();
|
|
1181
|
-
} else if (two_write_queues_) {
|
|
1182
|
-
log_write_mutex_.AssertHeld();
|
|
1183
|
-
assert(with_log_mutex);
|
|
1184
|
-
}
|
|
1185
|
-
|
|
1186
1225
|
Slice log_entry = WriteBatchInternal::Contents(&merged_batch);
|
|
1187
1226
|
*log_size = log_entry.size();
|
|
1188
1227
|
// When two_write_queues_ WriteToWAL has to be protected from concurretn calls
|
|
@@ -1205,12 +1244,7 @@ IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
|
|
|
1205
1244
|
*log_used = logfile_number_;
|
|
1206
1245
|
}
|
|
1207
1246
|
total_log_size_ += log_entry.size();
|
|
1208
|
-
|
|
1209
|
-
assert(alive_log_files_tail_ == alive_log_files_.rbegin());
|
|
1210
|
-
assert(alive_log_files_tail_ != alive_log_files_.rend());
|
|
1211
|
-
}
|
|
1212
|
-
LogFileNumberSize& last_alive_log = *alive_log_files_tail_;
|
|
1213
|
-
last_alive_log.AddSize(*log_size);
|
|
1247
|
+
log_file_number_size.AddSize(*log_size);
|
|
1214
1248
|
log_empty_ = false;
|
|
1215
1249
|
return io_s;
|
|
1216
1250
|
}
|
|
@@ -1218,7 +1252,8 @@ IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
|
|
|
1218
1252
|
IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
|
|
1219
1253
|
log::Writer* log_writer, uint64_t* log_used,
|
|
1220
1254
|
bool need_log_sync, bool need_log_dir_sync,
|
|
1221
|
-
SequenceNumber sequence
|
|
1255
|
+
SequenceNumber sequence,
|
|
1256
|
+
LogFileNumberSize& log_file_number_size) {
|
|
1222
1257
|
IOStatus io_s;
|
|
1223
1258
|
assert(!two_write_queues_);
|
|
1224
1259
|
assert(!write_group.leader->disable_wal);
|
|
@@ -1239,7 +1274,8 @@ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
|
|
|
1239
1274
|
|
|
1240
1275
|
uint64_t log_size;
|
|
1241
1276
|
io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size,
|
|
1242
|
-
write_group.leader->rate_limiter_priority
|
|
1277
|
+
write_group.leader->rate_limiter_priority,
|
|
1278
|
+
log_file_number_size);
|
|
1243
1279
|
if (to_be_cached_state) {
|
|
1244
1280
|
cached_recoverable_state_ = *to_be_cached_state;
|
|
1245
1281
|
cached_recoverable_state_empty_ = false;
|
|
@@ -1333,10 +1369,14 @@ IOStatus DBImpl::ConcurrentWriteToWAL(
|
|
|
1333
1369
|
WriteBatchInternal::SetSequence(merged_batch, sequence);
|
|
1334
1370
|
|
|
1335
1371
|
log::Writer* log_writer = logs_.back().writer;
|
|
1372
|
+
LogFileNumberSize& log_file_number_size = alive_log_files_.back();
|
|
1373
|
+
|
|
1374
|
+
assert(log_writer->get_log_number() == log_file_number_size.number);
|
|
1375
|
+
|
|
1336
1376
|
uint64_t log_size;
|
|
1337
1377
|
io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size,
|
|
1338
1378
|
write_group.leader->rate_limiter_priority,
|
|
1339
|
-
|
|
1379
|
+
log_file_number_size);
|
|
1340
1380
|
if (to_be_cached_state) {
|
|
1341
1381
|
cached_recoverable_state_ = *to_be_cached_state;
|
|
1342
1382
|
cached_recoverable_state_empty_ = false;
|
|
@@ -1992,7 +2032,6 @@ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
|
|
|
1992
2032
|
log_dir_synced_ = false;
|
|
1993
2033
|
logs_.emplace_back(logfile_number_, new_log);
|
|
1994
2034
|
alive_log_files_.push_back(LogFileNumberSize(logfile_number_));
|
|
1995
|
-
alive_log_files_tail_ = alive_log_files_.rbegin();
|
|
1996
2035
|
}
|
|
1997
2036
|
log_write_mutex_.Unlock();
|
|
1998
2037
|
}
|