@nxtedition/rocksdb 7.1.14 → 7.1.16
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 +1 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +72 -18
- package/deps/rocksdb/rocksdb/Makefile +91 -11
- package/deps/rocksdb/rocksdb/TARGETS +8 -4
- package/deps/rocksdb/rocksdb/cache/cache.cc +5 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +13 -8
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +116 -57
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +958 -459
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +407 -622
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +104 -40
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +23 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +350 -184
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +12 -2
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +130 -43
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +24 -2
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +423 -98
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +19 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +10 -7
- package/deps/rocksdb/rocksdb/crash_test.mk +2 -2
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +46 -26
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +9 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +90 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +56 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +64 -59
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +11 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +92 -62
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +159 -136
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -13
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +129 -57
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +81 -3
- package/deps/rocksdb/rocksdb/db/c.cc +29 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +10 -1
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -36
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +344 -102
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +163 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +52 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +35 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +167 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +0 -117
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +6 -49
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +18 -11
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +4 -10
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +12 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -93
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +28 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +2 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +11 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +76 -138
- package/deps/rocksdb/rocksdb/db/db_iter.h +26 -23
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +931 -0
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +44 -22
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +45 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +5 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +24 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +7 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +3 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +79 -18
- package/deps/rocksdb/rocksdb/db/memtable.h +5 -0
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +26 -4
- package/deps/rocksdb/rocksdb/db/memtable_list.h +2 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +113 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +110 -0
- package/deps/rocksdb/rocksdb/db/{periodic_work_scheduler_test.cc → periodic_task_scheduler_test.cc} +33 -39
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +12 -20
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +6 -5
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +20 -5
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +14 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +17 -8
- package/deps/rocksdb/rocksdb/db/repair_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +49 -66
- package/deps/rocksdb/rocksdb/db/table_cache.cc +92 -63
- package/deps/rocksdb/rocksdb/db/table_cache.h +16 -9
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -3
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +379 -145
- package/deps/rocksdb/rocksdb/db/version_set.h +26 -24
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +71 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +14 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +23 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +26 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +105 -34
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +16 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +282 -25
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +367 -177
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +144 -56
- package/deps/rocksdb/rocksdb/file/filename.cc +3 -3
- package/deps/rocksdb/rocksdb/file/filename.h +4 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +415 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +2 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +36 -45
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +21 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +15 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +163 -68
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +21 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +2 -1
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +4 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +2 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +15 -1
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +17 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +14 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +3 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +50 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +31 -32
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options.cc +2 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -0
- package/deps/rocksdb/rocksdb/src.mk +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +9 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +110 -99
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +11 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +138 -83
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +25 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +31 -30
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +16 -13
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +17 -19
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +26 -29
- package/deps/rocksdb/rocksdb/table/format.h +44 -26
- package/deps/rocksdb/rocksdb/table/get_context.cc +17 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +7 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +950 -104
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +28 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +3 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +10 -9
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +22 -20
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +9 -21
- package/deps/rocksdb/rocksdb/table/table_test.cc +12 -12
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +4 -4
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +116 -34
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +6 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/util/autovector.h +12 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/util/stderr_logger.cc +30 -0
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +5 -18
- package/deps/rocksdb/rocksdb/util/timer.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +34 -53
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +9 -14
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +26 -8
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +114 -16
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +59 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +39 -0
- package/deps/rocksdb/rocksdb.gyp +0 -1
- package/index.js +6 -10
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +0 -168
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +0 -90
|
@@ -3433,6 +3433,27 @@ TEST(ColumnFamilyTest, ValidateBlobGCForceThreshold) {
|
|
|
3433
3433
|
.IsInvalidArgument());
|
|
3434
3434
|
}
|
|
3435
3435
|
|
|
3436
|
+
TEST(ColumnFamilyTest, ValidateMemtableKVChecksumOption) {
|
|
3437
|
+
DBOptions db_options;
|
|
3438
|
+
|
|
3439
|
+
ColumnFamilyOptions cf_options;
|
|
3440
|
+
ASSERT_OK(ColumnFamilyData::ValidateOptions(db_options, cf_options));
|
|
3441
|
+
|
|
3442
|
+
cf_options.memtable_protection_bytes_per_key = 5;
|
|
3443
|
+
ASSERT_TRUE(ColumnFamilyData::ValidateOptions(db_options, cf_options)
|
|
3444
|
+
.IsNotSupported());
|
|
3445
|
+
|
|
3446
|
+
cf_options.memtable_protection_bytes_per_key = 1;
|
|
3447
|
+
ASSERT_OK(ColumnFamilyData::ValidateOptions(db_options, cf_options));
|
|
3448
|
+
|
|
3449
|
+
cf_options.memtable_protection_bytes_per_key = 16;
|
|
3450
|
+
ASSERT_TRUE(ColumnFamilyData::ValidateOptions(db_options, cf_options)
|
|
3451
|
+
.IsNotSupported());
|
|
3452
|
+
|
|
3453
|
+
cf_options.memtable_protection_bytes_per_key = 0;
|
|
3454
|
+
ASSERT_OK(ColumnFamilyData::ValidateOptions(db_options, cf_options));
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3436
3457
|
} // namespace ROCKSDB_NAMESPACE
|
|
3437
3458
|
|
|
3438
3459
|
int main(int argc, char** argv) {
|
|
@@ -254,7 +254,7 @@ void CompactionJob::Prepare() {
|
|
|
254
254
|
// timestamp part).
|
|
255
255
|
assert(i == 0 || i == boundaries_.size() ||
|
|
256
256
|
cfd->user_comparator()->CompareWithoutTimestamp(
|
|
257
|
-
boundaries_[i - 1],
|
|
257
|
+
boundaries_[i - 1], boundaries_[i]) < 0);
|
|
258
258
|
}
|
|
259
259
|
RecordInHistogram(stats_, NUM_SUBCOMPACTIONS_SCHEDULED,
|
|
260
260
|
compact_->sub_compact_states.size());
|
|
@@ -321,6 +321,7 @@ void CompactionJob::AcquireSubcompactionResources(
|
|
|
321
321
|
->write_controller()
|
|
322
322
|
->NeedSpeedupCompaction())
|
|
323
323
|
.max_compactions;
|
|
324
|
+
InstrumentedMutexLock l(db_mutex_);
|
|
324
325
|
// Apply min function first since We need to compute the extra subcompaction
|
|
325
326
|
// against compaction limits. And then try to reserve threads for extra
|
|
326
327
|
// subcompactions. The actual number of reserved threads could be less than
|
|
@@ -329,7 +330,6 @@ void CompactionJob::AcquireSubcompactionResources(
|
|
|
329
330
|
std::max(max_db_compactions - *bg_compaction_scheduled_ -
|
|
330
331
|
*bg_bottom_compaction_scheduled_,
|
|
331
332
|
0);
|
|
332
|
-
db_mutex_->Lock();
|
|
333
333
|
// Reservation only supports backgrdoun threads of which the priority is
|
|
334
334
|
// between BOTTOM and HIGH. Need to degrade the priority to HIGH if the
|
|
335
335
|
// origin thread_pri_ is higher than that. Similar to ReleaseThreads().
|
|
@@ -346,7 +346,6 @@ void CompactionJob::AcquireSubcompactionResources(
|
|
|
346
346
|
} else {
|
|
347
347
|
*bg_compaction_scheduled_ += extra_num_subcompaction_threads_reserved_;
|
|
348
348
|
}
|
|
349
|
-
db_mutex_->Unlock();
|
|
350
349
|
}
|
|
351
350
|
|
|
352
351
|
void CompactionJob::ShrinkSubcompactionResources(uint64_t num_extra_resources) {
|
|
@@ -380,17 +379,20 @@ void CompactionJob::ReleaseSubcompactionResources() {
|
|
|
380
379
|
if (extra_num_subcompaction_threads_reserved_ == 0) {
|
|
381
380
|
return;
|
|
382
381
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
382
|
+
{
|
|
383
|
+
InstrumentedMutexLock l(db_mutex_);
|
|
384
|
+
// The number of reserved threads becomes larger than 0 only if the
|
|
385
|
+
// compaction prioity is round robin and there is no sufficient
|
|
386
|
+
// sub-compactions available
|
|
387
|
+
|
|
388
|
+
// The scheduled compaction must be no less than 1 + extra number
|
|
389
|
+
// subcompactions using acquired resources since this compaction job has not
|
|
390
|
+
// finished yet
|
|
391
|
+
assert(*bg_bottom_compaction_scheduled_ >=
|
|
392
|
+
1 + extra_num_subcompaction_threads_reserved_ ||
|
|
393
|
+
*bg_compaction_scheduled_ >=
|
|
394
|
+
1 + extra_num_subcompaction_threads_reserved_);
|
|
395
|
+
}
|
|
394
396
|
ShrinkSubcompactionResources(extra_num_subcompaction_threads_reserved_);
|
|
395
397
|
}
|
|
396
398
|
|
|
@@ -462,7 +464,7 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
|
|
462
464
|
FileMetaData* f = flevel->files[i].file_metadata;
|
|
463
465
|
std::vector<TableReader::Anchor> my_anchors;
|
|
464
466
|
Status s = cfd->table_cache()->ApproximateKeyAnchors(
|
|
465
|
-
ReadOptions(), icomp, f
|
|
467
|
+
ReadOptions(), icomp, *f, my_anchors);
|
|
466
468
|
if (!s.ok() || my_anchors.empty()) {
|
|
467
469
|
my_anchors.emplace_back(f->largest.user_key(), f->fd.GetFileSize());
|
|
468
470
|
}
|
|
@@ -484,8 +486,8 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
|
|
484
486
|
std::sort(
|
|
485
487
|
all_anchors.begin(), all_anchors.end(),
|
|
486
488
|
[cfd_comparator](TableReader::Anchor& a, TableReader::Anchor& b) -> bool {
|
|
487
|
-
return cfd_comparator->CompareWithoutTimestamp(a.user_key,
|
|
488
|
-
|
|
489
|
+
return cfd_comparator->CompareWithoutTimestamp(a.user_key, b.user_key) <
|
|
490
|
+
0;
|
|
489
491
|
});
|
|
490
492
|
|
|
491
493
|
// Remove duplicated entries from boundaries.
|
|
@@ -494,7 +496,7 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
|
|
494
496
|
[cfd_comparator](TableReader::Anchor& a,
|
|
495
497
|
TableReader::Anchor& b) -> bool {
|
|
496
498
|
return cfd_comparator->CompareWithoutTimestamp(
|
|
497
|
-
a.user_key,
|
|
499
|
+
a.user_key, b.user_key) == 0;
|
|
498
500
|
}),
|
|
499
501
|
all_anchors.end());
|
|
500
502
|
|
|
@@ -1083,13 +1085,34 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1083
1085
|
Slice start_slice;
|
|
1084
1086
|
Slice end_slice;
|
|
1085
1087
|
|
|
1088
|
+
static constexpr char kMaxTs[] =
|
|
1089
|
+
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
|
|
1090
|
+
Slice ts_slice;
|
|
1091
|
+
std::string max_ts;
|
|
1092
|
+
if (ts_sz > 0) {
|
|
1093
|
+
if (ts_sz <= strlen(kMaxTs)) {
|
|
1094
|
+
ts_slice = Slice(kMaxTs, ts_sz);
|
|
1095
|
+
} else {
|
|
1096
|
+
max_ts = std::string(ts_sz, '\xff');
|
|
1097
|
+
ts_slice = Slice(max_ts);
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1086
1101
|
if (start.has_value()) {
|
|
1087
1102
|
start_ikey.SetInternalKey(start.value(), kMaxSequenceNumber,
|
|
1088
1103
|
kValueTypeForSeek);
|
|
1104
|
+
if (ts_sz > 0) {
|
|
1105
|
+
start_ikey.UpdateInternalKey(kMaxSequenceNumber, kValueTypeForSeek,
|
|
1106
|
+
&ts_slice);
|
|
1107
|
+
}
|
|
1089
1108
|
start_slice = start_ikey.GetInternalKey();
|
|
1090
1109
|
}
|
|
1091
1110
|
if (end.has_value()) {
|
|
1092
1111
|
end_ikey.SetInternalKey(end.value(), kMaxSequenceNumber, kValueTypeForSeek);
|
|
1112
|
+
if (ts_sz > 0) {
|
|
1113
|
+
end_ikey.UpdateInternalKey(kMaxSequenceNumber, kValueTypeForSeek,
|
|
1114
|
+
&ts_slice);
|
|
1115
|
+
}
|
|
1093
1116
|
end_slice = end_ikey.GetInternalKey();
|
|
1094
1117
|
}
|
|
1095
1118
|
|
|
@@ -1110,7 +1133,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1110
1133
|
}
|
|
1111
1134
|
|
|
1112
1135
|
std::unique_ptr<InternalIterator> trim_history_iter;
|
|
1113
|
-
if (
|
|
1136
|
+
if (ts_sz > 0 && !trim_ts_.empty()) {
|
|
1114
1137
|
trim_history_iter = std::make_unique<HistoryTrimmingIterator>(
|
|
1115
1138
|
input, cfd->user_comparator(), trim_ts_);
|
|
1116
1139
|
input = trim_history_iter.get();
|
|
@@ -1198,13 +1221,6 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1198
1221
|
// it only output to single level
|
|
1199
1222
|
sub_compact->AssignRangeDelAggregator(std::move(range_del_agg));
|
|
1200
1223
|
|
|
1201
|
-
if (c_iter->Valid() && sub_compact->compaction->output_level() != 0) {
|
|
1202
|
-
sub_compact->FillFilesToCutForTtl();
|
|
1203
|
-
// ShouldStopBefore() maintains state based on keys processed so far. The
|
|
1204
|
-
// compaction loop always calls it on the "next" key, thus won't tell it the
|
|
1205
|
-
// first key. So we do that here.
|
|
1206
|
-
sub_compact->ShouldStopBefore(c_iter->key());
|
|
1207
|
-
}
|
|
1208
1224
|
const auto& c_iter_stats = c_iter->iter_stats();
|
|
1209
1225
|
|
|
1210
1226
|
// define the open and close functions for the compaction files, which will be
|
|
@@ -1253,16 +1269,6 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1253
1269
|
if (c_iter->status().IsManualCompactionPaused()) {
|
|
1254
1270
|
break;
|
|
1255
1271
|
}
|
|
1256
|
-
|
|
1257
|
-
// TODO: Support earlier file cut for the penultimate level files. Maybe by
|
|
1258
|
-
// moving `ShouldStopBefore()` to `CompactionOutputs` class. Currently
|
|
1259
|
-
// the penultimate level output is only cut when it reaches the size limit.
|
|
1260
|
-
if (!sub_compact->Current().IsPendingClose() &&
|
|
1261
|
-
sub_compact->compaction->output_level() != 0 &&
|
|
1262
|
-
!sub_compact->compaction->SupportsPerKeyPlacement() &&
|
|
1263
|
-
sub_compact->ShouldStopBefore(c_iter->key())) {
|
|
1264
|
-
sub_compact->Current().SetPendingClose();
|
|
1265
|
-
}
|
|
1266
1272
|
}
|
|
1267
1273
|
|
|
1268
1274
|
sub_compact->compaction_job_stats.num_blobs_read =
|