@nxtedition/rocksdb 7.1.20 → 7.1.21
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/CMakeLists.txt +13 -6
- package/deps/rocksdb/rocksdb/Makefile +1 -1
- package/deps/rocksdb/rocksdb/TARGETS +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
- package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
- package/deps/rocksdb/rocksdb/src.mk +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
- package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
- package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
- package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
- package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
- package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
- package/index.js +12 -4
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -228,6 +228,9 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
228
228
|
test::CreateEnvFromSystem(ConfigOptions(), &base_env, &env_guard_));
|
|
229
229
|
env_ = base_env;
|
|
230
230
|
fs_ = env_->GetFileSystem();
|
|
231
|
+
// set default for the tests
|
|
232
|
+
mutable_cf_options_.target_file_size_base = 1024 * 1024;
|
|
233
|
+
mutable_cf_options_.max_compaction_bytes = 10 * 1024 * 1024;
|
|
231
234
|
}
|
|
232
235
|
|
|
233
236
|
void SetUp() override {
|
|
@@ -415,8 +418,9 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
415
418
|
|
|
416
419
|
auto cfd = versions_->GetColumnFamilySet()->GetDefault();
|
|
417
420
|
if (table_type_ == TableTypeForTest::kMockTable) {
|
|
418
|
-
|
|
419
|
-
|
|
421
|
+
ASSERT_EQ(compaction_job_stats_.num_output_files,
|
|
422
|
+
expected_results.size());
|
|
423
|
+
mock_table_factory_->AssertLatestFiles(expected_results);
|
|
420
424
|
} else {
|
|
421
425
|
assert(table_type_ == TableTypeForTest::kBlockBasedTable);
|
|
422
426
|
}
|
|
@@ -426,7 +430,8 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
426
430
|
ASSERT_EQ(expected_output_file_num, output_files.size());
|
|
427
431
|
|
|
428
432
|
if (table_type_ == TableTypeForTest::kMockTable) {
|
|
429
|
-
assert(output_files.size() ==
|
|
433
|
+
assert(output_files.size() ==
|
|
434
|
+
static_cast<size_t>(expected_output_file_num));
|
|
430
435
|
const FileMetaData* const output_file = output_files[0];
|
|
431
436
|
ASSERT_EQ(output_file->oldest_blob_file_number,
|
|
432
437
|
expected_oldest_blob_file_numbers[0]);
|
|
@@ -620,12 +625,22 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
620
625
|
num_input_files += level_files.size();
|
|
621
626
|
}
|
|
622
627
|
|
|
628
|
+
std::vector<FileMetaData*> grandparents;
|
|
629
|
+
// it should actually be the next non-empty level
|
|
630
|
+
const int kGrandparentsLevel = output_level + 1;
|
|
631
|
+
if (kGrandparentsLevel < cf_options_.num_levels) {
|
|
632
|
+
grandparents =
|
|
633
|
+
cfd_->current()->storage_info()->LevelFiles(kGrandparentsLevel);
|
|
634
|
+
}
|
|
635
|
+
|
|
623
636
|
Compaction compaction(
|
|
624
637
|
cfd->current()->storage_info(), *cfd->ioptions(),
|
|
625
638
|
*cfd->GetLatestMutableCFOptions(), mutable_db_options_,
|
|
626
|
-
compaction_input_files, output_level,
|
|
627
|
-
|
|
628
|
-
|
|
639
|
+
compaction_input_files, output_level,
|
|
640
|
+
mutable_cf_options_.target_file_size_base,
|
|
641
|
+
mutable_cf_options_.max_compaction_bytes, 0, kNoCompression,
|
|
642
|
+
cfd->GetLatestMutableCFOptions()->compression_opts,
|
|
643
|
+
Temperature::kUnknown, max_subcompactions, grandparents, true);
|
|
629
644
|
compaction.SetInputVersion(cfd->current());
|
|
630
645
|
|
|
631
646
|
assert(db_options_.info_log);
|
|
@@ -1721,6 +1736,392 @@ TEST_F(CompactionJobTest, ResultSerialization) {
|
|
|
1721
1736
|
}
|
|
1722
1737
|
}
|
|
1723
1738
|
|
|
1739
|
+
class CompactionJobDynamicFileSizeTest
|
|
1740
|
+
: public CompactionJobTestBase,
|
|
1741
|
+
public ::testing::WithParamInterface<bool> {
|
|
1742
|
+
public:
|
|
1743
|
+
CompactionJobDynamicFileSizeTest()
|
|
1744
|
+
: CompactionJobTestBase(
|
|
1745
|
+
test::PerThreadDBPath("compaction_job_dynamic_file_size_test"),
|
|
1746
|
+
BytewiseComparator(), [](uint64_t /*ts*/) { return ""; },
|
|
1747
|
+
/*test_io_priority=*/false, TableTypeForTest::kMockTable) {}
|
|
1748
|
+
};
|
|
1749
|
+
|
|
1750
|
+
TEST_P(CompactionJobDynamicFileSizeTest, CutForMaxCompactionBytes) {
|
|
1751
|
+
// dynamic_file_size option should have no impact on cutting for max
|
|
1752
|
+
// compaction bytes.
|
|
1753
|
+
bool enable_dyanmic_file_size = GetParam();
|
|
1754
|
+
cf_options_.level_compaction_dynamic_file_size = enable_dyanmic_file_size;
|
|
1755
|
+
|
|
1756
|
+
NewDB();
|
|
1757
|
+
mutable_cf_options_.target_file_size_base = 80;
|
|
1758
|
+
mutable_cf_options_.max_compaction_bytes = 21;
|
|
1759
|
+
|
|
1760
|
+
auto file1 = mock::MakeMockFile({
|
|
1761
|
+
{KeyStr("c", 5U, kTypeValue), "val2"},
|
|
1762
|
+
{KeyStr("n", 6U, kTypeValue), "val3"},
|
|
1763
|
+
});
|
|
1764
|
+
AddMockFile(file1);
|
|
1765
|
+
|
|
1766
|
+
auto file2 = mock::MakeMockFile({{KeyStr("h", 3U, kTypeValue), "val"},
|
|
1767
|
+
{KeyStr("j", 4U, kTypeValue), "val"}});
|
|
1768
|
+
AddMockFile(file2, 1);
|
|
1769
|
+
|
|
1770
|
+
// Create three L2 files, each size 10.
|
|
1771
|
+
// max_compaction_bytes 21 means the compaction output in L1 will
|
|
1772
|
+
// be cut to at least two files.
|
|
1773
|
+
auto file3 = mock::MakeMockFile({{KeyStr("b", 1U, kTypeValue), "val"},
|
|
1774
|
+
{KeyStr("c", 1U, kTypeValue), "val"},
|
|
1775
|
+
{KeyStr("c1", 1U, kTypeValue), "val"},
|
|
1776
|
+
{KeyStr("c2", 1U, kTypeValue), "val"},
|
|
1777
|
+
{KeyStr("c3", 1U, kTypeValue), "val"},
|
|
1778
|
+
{KeyStr("c4", 1U, kTypeValue), "val"},
|
|
1779
|
+
{KeyStr("d", 1U, kTypeValue), "val"},
|
|
1780
|
+
{KeyStr("e", 2U, kTypeValue), "val"}});
|
|
1781
|
+
AddMockFile(file3, 2);
|
|
1782
|
+
|
|
1783
|
+
auto file4 = mock::MakeMockFile({{KeyStr("h", 1U, kTypeValue), "val"},
|
|
1784
|
+
{KeyStr("i", 1U, kTypeValue), "val"},
|
|
1785
|
+
{KeyStr("i1", 1U, kTypeValue), "val"},
|
|
1786
|
+
{KeyStr("i2", 1U, kTypeValue), "val"},
|
|
1787
|
+
{KeyStr("i3", 1U, kTypeValue), "val"},
|
|
1788
|
+
{KeyStr("i4", 1U, kTypeValue), "val"},
|
|
1789
|
+
{KeyStr("j", 1U, kTypeValue), "val"},
|
|
1790
|
+
{KeyStr("k", 2U, kTypeValue), "val"}});
|
|
1791
|
+
AddMockFile(file4, 2);
|
|
1792
|
+
|
|
1793
|
+
auto file5 = mock::MakeMockFile({{KeyStr("l", 1U, kTypeValue), "val"},
|
|
1794
|
+
{KeyStr("m", 1U, kTypeValue), "val"},
|
|
1795
|
+
{KeyStr("m1", 1U, kTypeValue), "val"},
|
|
1796
|
+
{KeyStr("m2", 1U, kTypeValue), "val"},
|
|
1797
|
+
{KeyStr("m3", 1U, kTypeValue), "val"},
|
|
1798
|
+
{KeyStr("m4", 1U, kTypeValue), "val"},
|
|
1799
|
+
{KeyStr("n", 1U, kTypeValue), "val"},
|
|
1800
|
+
{KeyStr("o", 2U, kTypeValue), "val"}});
|
|
1801
|
+
AddMockFile(file5, 2);
|
|
1802
|
+
|
|
1803
|
+
// The expected output should be:
|
|
1804
|
+
// L1: [c, h, j] [n]
|
|
1805
|
+
// L2: [b ... e] [h ... k] [l ... o]
|
|
1806
|
+
// It's better to have "j" in the first file, because anyway it's overlapping
|
|
1807
|
+
// with the second file on L2.
|
|
1808
|
+
// (Note: before this PR, it was cut at "h" because it's using the internal
|
|
1809
|
+
// comparator which think L1 "h" with seqno 3 is smaller than L2 "h" with
|
|
1810
|
+
// seqno 1, but actually they're overlapped with the compaction picker).
|
|
1811
|
+
|
|
1812
|
+
auto expected_file1 =
|
|
1813
|
+
mock::MakeMockFile({{KeyStr("c", 5U, kTypeValue), "val2"},
|
|
1814
|
+
{KeyStr("h", 3U, kTypeValue), "val"},
|
|
1815
|
+
{KeyStr("j", 4U, kTypeValue), "val"}});
|
|
1816
|
+
auto expected_file2 =
|
|
1817
|
+
mock::MakeMockFile({{KeyStr("n", 6U, kTypeValue), "val3"}});
|
|
1818
|
+
|
|
1819
|
+
SetLastSequence(6U);
|
|
1820
|
+
|
|
1821
|
+
const std::vector<int> input_levels = {0, 1};
|
|
1822
|
+
auto lvl0_files = cfd_->current()->storage_info()->LevelFiles(0);
|
|
1823
|
+
auto lvl1_files = cfd_->current()->storage_info()->LevelFiles(1);
|
|
1824
|
+
|
|
1825
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
1826
|
+
{expected_file1, expected_file2});
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
TEST_P(CompactionJobDynamicFileSizeTest, CutToSkipGrandparentFile) {
|
|
1830
|
+
bool enable_dyanmic_file_size = GetParam();
|
|
1831
|
+
cf_options_.level_compaction_dynamic_file_size = enable_dyanmic_file_size;
|
|
1832
|
+
|
|
1833
|
+
NewDB();
|
|
1834
|
+
// Make sure the grandparent level file size (10) qualifies skipping.
|
|
1835
|
+
// Currently, it has to be > 1/8 of target file size.
|
|
1836
|
+
mutable_cf_options_.target_file_size_base = 70;
|
|
1837
|
+
|
|
1838
|
+
auto file1 = mock::MakeMockFile({
|
|
1839
|
+
{KeyStr("a", 5U, kTypeValue), "val2"},
|
|
1840
|
+
{KeyStr("z", 6U, kTypeValue), "val3"},
|
|
1841
|
+
});
|
|
1842
|
+
AddMockFile(file1);
|
|
1843
|
+
|
|
1844
|
+
auto file2 = mock::MakeMockFile({{KeyStr("c", 3U, kTypeValue), "val"},
|
|
1845
|
+
{KeyStr("x", 4U, kTypeValue), "val"}});
|
|
1846
|
+
AddMockFile(file2, 1);
|
|
1847
|
+
|
|
1848
|
+
auto file3 = mock::MakeMockFile({{KeyStr("b", 1U, kTypeValue), "val"},
|
|
1849
|
+
{KeyStr("d", 2U, kTypeValue), "val"}});
|
|
1850
|
+
AddMockFile(file3, 2);
|
|
1851
|
+
|
|
1852
|
+
auto file4 = mock::MakeMockFile({{KeyStr("h", 1U, kTypeValue), "val"},
|
|
1853
|
+
{KeyStr("i", 2U, kTypeValue), "val"}});
|
|
1854
|
+
AddMockFile(file4, 2);
|
|
1855
|
+
|
|
1856
|
+
auto file5 = mock::MakeMockFile({{KeyStr("v", 1U, kTypeValue), "val"},
|
|
1857
|
+
{KeyStr("y", 2U, kTypeValue), "val"}});
|
|
1858
|
+
AddMockFile(file5, 2);
|
|
1859
|
+
|
|
1860
|
+
auto expected_file1 =
|
|
1861
|
+
mock::MakeMockFile({{KeyStr("a", 5U, kTypeValue), "val2"},
|
|
1862
|
+
{KeyStr("c", 3U, kTypeValue), "val"}});
|
|
1863
|
+
auto expected_file2 =
|
|
1864
|
+
mock::MakeMockFile({{KeyStr("x", 4U, kTypeValue), "val"},
|
|
1865
|
+
{KeyStr("z", 6U, kTypeValue), "val3"}});
|
|
1866
|
+
|
|
1867
|
+
auto expected_file_disable_dynamic_file_size =
|
|
1868
|
+
mock::MakeMockFile({{KeyStr("a", 5U, kTypeValue), "val2"},
|
|
1869
|
+
{KeyStr("c", 3U, kTypeValue), "val"},
|
|
1870
|
+
{KeyStr("x", 4U, kTypeValue), "val"},
|
|
1871
|
+
{KeyStr("z", 6U, kTypeValue), "val3"}});
|
|
1872
|
+
|
|
1873
|
+
SetLastSequence(6U);
|
|
1874
|
+
const std::vector<int> input_levels = {0, 1};
|
|
1875
|
+
auto lvl0_files = cfd_->current()->storage_info()->LevelFiles(0);
|
|
1876
|
+
auto lvl1_files = cfd_->current()->storage_info()->LevelFiles(1);
|
|
1877
|
+
if (enable_dyanmic_file_size) {
|
|
1878
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
1879
|
+
{expected_file1, expected_file2});
|
|
1880
|
+
} else {
|
|
1881
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
1882
|
+
{expected_file_disable_dynamic_file_size});
|
|
1883
|
+
}
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1886
|
+
TEST_P(CompactionJobDynamicFileSizeTest, CutToAlignGrandparentBoundary) {
|
|
1887
|
+
bool enable_dyanmic_file_size = GetParam();
|
|
1888
|
+
cf_options_.level_compaction_dynamic_file_size = enable_dyanmic_file_size;
|
|
1889
|
+
NewDB();
|
|
1890
|
+
|
|
1891
|
+
// MockTable has 1 byte per entry by default and each file is 10 bytes.
|
|
1892
|
+
// When the file size is smaller than 100, it won't cut file earlier to align
|
|
1893
|
+
// with its grandparent boundary.
|
|
1894
|
+
const size_t kKeyValueSize = 10000;
|
|
1895
|
+
mock_table_factory_->SetKeyValueSize(kKeyValueSize);
|
|
1896
|
+
|
|
1897
|
+
mutable_cf_options_.target_file_size_base = 10 * kKeyValueSize;
|
|
1898
|
+
|
|
1899
|
+
mock::KVVector file1;
|
|
1900
|
+
char ch = 'd';
|
|
1901
|
+
// Add value from d -> o
|
|
1902
|
+
for (char i = 0; i < 12; i++) {
|
|
1903
|
+
file1.emplace_back(KeyStr(std::string(1, ch + i), i + 10, kTypeValue),
|
|
1904
|
+
"val" + std::to_string(i));
|
|
1905
|
+
}
|
|
1906
|
+
|
|
1907
|
+
AddMockFile(file1);
|
|
1908
|
+
|
|
1909
|
+
auto file2 = mock::MakeMockFile({{KeyStr("e", 3U, kTypeValue), "val"},
|
|
1910
|
+
{KeyStr("s", 4U, kTypeValue), "val"}});
|
|
1911
|
+
AddMockFile(file2, 1);
|
|
1912
|
+
|
|
1913
|
+
// the 1st grandparent file should be skipped
|
|
1914
|
+
auto file3 = mock::MakeMockFile({{KeyStr("a", 1U, kTypeValue), "val"},
|
|
1915
|
+
{KeyStr("b", 2U, kTypeValue), "val"}});
|
|
1916
|
+
AddMockFile(file3, 2);
|
|
1917
|
+
|
|
1918
|
+
auto file4 = mock::MakeMockFile({{KeyStr("c", 1U, kTypeValue), "val"},
|
|
1919
|
+
{KeyStr("e", 2U, kTypeValue), "val"}});
|
|
1920
|
+
AddMockFile(file4, 2);
|
|
1921
|
+
|
|
1922
|
+
auto file5 = mock::MakeMockFile({{KeyStr("h", 1U, kTypeValue), "val"},
|
|
1923
|
+
{KeyStr("j", 2U, kTypeValue), "val"}});
|
|
1924
|
+
AddMockFile(file5, 2);
|
|
1925
|
+
|
|
1926
|
+
auto file6 = mock::MakeMockFile({{KeyStr("k", 1U, kTypeValue), "val"},
|
|
1927
|
+
{KeyStr("n", 2U, kTypeValue), "val"}});
|
|
1928
|
+
AddMockFile(file6, 2);
|
|
1929
|
+
|
|
1930
|
+
auto file7 = mock::MakeMockFile({{KeyStr("q", 1U, kTypeValue), "val"},
|
|
1931
|
+
{KeyStr("t", 2U, kTypeValue), "val"}});
|
|
1932
|
+
AddMockFile(file7, 2);
|
|
1933
|
+
|
|
1934
|
+
// The expected outputs are:
|
|
1935
|
+
// L1: [d,e,f,g,h,i,j] [k,l,m,n,o,s]
|
|
1936
|
+
// L2: [a, b] [c, e] [h, j] [k, n] [q, t]
|
|
1937
|
+
// The first output cut earlier at "j", so it could be aligned with L2 files.
|
|
1938
|
+
// If dynamic_file_size is not enabled, it will be cut based on the
|
|
1939
|
+
// target_file_size
|
|
1940
|
+
mock::KVVector expected_file1;
|
|
1941
|
+
for (char i = 0; i < 7; i++) {
|
|
1942
|
+
expected_file1.emplace_back(
|
|
1943
|
+
KeyStr(std::string(1, ch + i), i + 10, kTypeValue),
|
|
1944
|
+
"val" + std::to_string(i));
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
mock::KVVector expected_file2;
|
|
1948
|
+
for (char i = 7; i < 12; i++) {
|
|
1949
|
+
expected_file2.emplace_back(
|
|
1950
|
+
KeyStr(std::string(1, ch + i), i + 10, kTypeValue),
|
|
1951
|
+
"val" + std::to_string(i));
|
|
1952
|
+
}
|
|
1953
|
+
expected_file2.emplace_back(KeyStr("s", 4U, kTypeValue), "val");
|
|
1954
|
+
|
|
1955
|
+
mock::KVVector expected_file_disable_dynamic_file_size1;
|
|
1956
|
+
for (char i = 0; i < 10; i++) {
|
|
1957
|
+
expected_file_disable_dynamic_file_size1.emplace_back(
|
|
1958
|
+
KeyStr(std::string(1, ch + i), i + 10, kTypeValue),
|
|
1959
|
+
"val" + std::to_string(i));
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
mock::KVVector expected_file_disable_dynamic_file_size2;
|
|
1963
|
+
for (char i = 10; i < 12; i++) {
|
|
1964
|
+
expected_file_disable_dynamic_file_size2.emplace_back(
|
|
1965
|
+
KeyStr(std::string(1, ch + i), i + 10, kTypeValue),
|
|
1966
|
+
"val" + std::to_string(i));
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1969
|
+
expected_file_disable_dynamic_file_size2.emplace_back(
|
|
1970
|
+
KeyStr("s", 4U, kTypeValue), "val");
|
|
1971
|
+
|
|
1972
|
+
SetLastSequence(22U);
|
|
1973
|
+
const std::vector<int> input_levels = {0, 1};
|
|
1974
|
+
auto lvl0_files = cfd_->current()->storage_info()->LevelFiles(0);
|
|
1975
|
+
auto lvl1_files = cfd_->current()->storage_info()->LevelFiles(1);
|
|
1976
|
+
if (enable_dyanmic_file_size) {
|
|
1977
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
1978
|
+
{expected_file1, expected_file2});
|
|
1979
|
+
} else {
|
|
1980
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
1981
|
+
{expected_file_disable_dynamic_file_size1,
|
|
1982
|
+
expected_file_disable_dynamic_file_size2});
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
|
|
1986
|
+
TEST_P(CompactionJobDynamicFileSizeTest, CutToAlignGrandparentBoundarySameKey) {
|
|
1987
|
+
bool enable_dyanmic_file_size = GetParam();
|
|
1988
|
+
cf_options_.level_compaction_dynamic_file_size = enable_dyanmic_file_size;
|
|
1989
|
+
NewDB();
|
|
1990
|
+
|
|
1991
|
+
// MockTable has 1 byte per entry by default and each file is 10 bytes.
|
|
1992
|
+
// When the file size is smaller than 100, it won't cut file earlier to align
|
|
1993
|
+
// with its grandparent boundary.
|
|
1994
|
+
const size_t kKeyValueSize = 10000;
|
|
1995
|
+
mock_table_factory_->SetKeyValueSize(kKeyValueSize);
|
|
1996
|
+
|
|
1997
|
+
mutable_cf_options_.target_file_size_base = 10 * kKeyValueSize;
|
|
1998
|
+
|
|
1999
|
+
mock::KVVector file1;
|
|
2000
|
+
for (int i = 0; i < 7; i++) {
|
|
2001
|
+
file1.emplace_back(KeyStr("a", 100 - i, kTypeValue),
|
|
2002
|
+
"val" + std::to_string(100 - i));
|
|
2003
|
+
}
|
|
2004
|
+
file1.emplace_back(KeyStr("b", 90, kTypeValue), "valb");
|
|
2005
|
+
|
|
2006
|
+
AddMockFile(file1);
|
|
2007
|
+
|
|
2008
|
+
auto file2 = mock::MakeMockFile({{KeyStr("a", 93U, kTypeValue), "val93"},
|
|
2009
|
+
{KeyStr("b", 90U, kTypeValue), "valb"}});
|
|
2010
|
+
AddMockFile(file2, 1);
|
|
2011
|
+
|
|
2012
|
+
auto file3 = mock::MakeMockFile({{KeyStr("a", 89U, kTypeValue), "val"},
|
|
2013
|
+
{KeyStr("a", 88U, kTypeValue), "val"}});
|
|
2014
|
+
AddMockFile(file3, 2);
|
|
2015
|
+
|
|
2016
|
+
auto file4 = mock::MakeMockFile({{KeyStr("a", 87U, kTypeValue), "val"},
|
|
2017
|
+
{KeyStr("a", 86U, kTypeValue), "val"}});
|
|
2018
|
+
AddMockFile(file4, 2);
|
|
2019
|
+
|
|
2020
|
+
auto file5 = mock::MakeMockFile({{KeyStr("b", 85U, kTypeValue), "val"},
|
|
2021
|
+
{KeyStr("b", 84U, kTypeValue), "val"}});
|
|
2022
|
+
AddMockFile(file5, 2);
|
|
2023
|
+
|
|
2024
|
+
mock::KVVector expected_file1;
|
|
2025
|
+
mock::KVVector expected_file_disable_dynamic_file_size;
|
|
2026
|
+
|
|
2027
|
+
for (int i = 0; i < 8; i++) {
|
|
2028
|
+
expected_file1.emplace_back(KeyStr("a", 100 - i, kTypeValue),
|
|
2029
|
+
"val" + std::to_string(100 - i));
|
|
2030
|
+
expected_file_disable_dynamic_file_size.emplace_back(
|
|
2031
|
+
KeyStr("a", 100 - i, kTypeValue), "val" + std::to_string(100 - i));
|
|
2032
|
+
}
|
|
2033
|
+
|
|
2034
|
+
// make sure `b` is cut in a separated file (so internally it's not using
|
|
2035
|
+
// internal comparator, which will think the "b:90" (seqno 90) here is smaller
|
|
2036
|
+
// than "b:85" on L2.)
|
|
2037
|
+
auto expected_file2 =
|
|
2038
|
+
mock::MakeMockFile({{KeyStr("b", 90U, kTypeValue), "valb"}});
|
|
2039
|
+
|
|
2040
|
+
expected_file_disable_dynamic_file_size.emplace_back(
|
|
2041
|
+
KeyStr("b", 90U, kTypeValue), "valb");
|
|
2042
|
+
|
|
2043
|
+
SetLastSequence(122U);
|
|
2044
|
+
const std::vector<int> input_levels = {0, 1};
|
|
2045
|
+
auto lvl0_files = cfd_->current()->storage_info()->LevelFiles(0);
|
|
2046
|
+
auto lvl1_files = cfd_->current()->storage_info()->LevelFiles(1);
|
|
2047
|
+
|
|
2048
|
+
// Just keep all the history
|
|
2049
|
+
std::vector<SequenceNumber> snapshots;
|
|
2050
|
+
for (int i = 80; i <= 100; i++) {
|
|
2051
|
+
snapshots.emplace_back(i);
|
|
2052
|
+
}
|
|
2053
|
+
if (enable_dyanmic_file_size) {
|
|
2054
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
2055
|
+
{expected_file1, expected_file2}, snapshots);
|
|
2056
|
+
} else {
|
|
2057
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
2058
|
+
{expected_file_disable_dynamic_file_size}, snapshots);
|
|
2059
|
+
}
|
|
2060
|
+
}
|
|
2061
|
+
|
|
2062
|
+
TEST_P(CompactionJobDynamicFileSizeTest, CutForMaxCompactionBytesSameKey) {
|
|
2063
|
+
// dynamic_file_size option should have no impact on cutting for max
|
|
2064
|
+
// compaction bytes.
|
|
2065
|
+
bool enable_dyanmic_file_size = GetParam();
|
|
2066
|
+
cf_options_.level_compaction_dynamic_file_size = enable_dyanmic_file_size;
|
|
2067
|
+
|
|
2068
|
+
NewDB();
|
|
2069
|
+
mutable_cf_options_.target_file_size_base = 80;
|
|
2070
|
+
mutable_cf_options_.max_compaction_bytes = 20;
|
|
2071
|
+
|
|
2072
|
+
auto file1 = mock::MakeMockFile({{KeyStr("a", 104U, kTypeValue), "val1"},
|
|
2073
|
+
{KeyStr("b", 103U, kTypeValue), "val"}});
|
|
2074
|
+
AddMockFile(file1);
|
|
2075
|
+
|
|
2076
|
+
auto file2 = mock::MakeMockFile({{KeyStr("a", 102U, kTypeValue), "val2"},
|
|
2077
|
+
{KeyStr("c", 101U, kTypeValue), "val"}});
|
|
2078
|
+
AddMockFile(file2, 1);
|
|
2079
|
+
|
|
2080
|
+
for (int i = 0; i < 10; i++) {
|
|
2081
|
+
auto file =
|
|
2082
|
+
mock::MakeMockFile({{KeyStr("a", 100 - (i * 2), kTypeValue), "val"},
|
|
2083
|
+
{KeyStr("a", 99 - (i * 2), kTypeValue), "val"}});
|
|
2084
|
+
AddMockFile(file, 2);
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2087
|
+
for (int i = 0; i < 10; i++) {
|
|
2088
|
+
auto file =
|
|
2089
|
+
mock::MakeMockFile({{KeyStr("b", 80 - (i * 2), kTypeValue), "val"},
|
|
2090
|
+
{KeyStr("b", 79 - (i * 2), kTypeValue), "val"}});
|
|
2091
|
+
AddMockFile(file, 2);
|
|
2092
|
+
}
|
|
2093
|
+
|
|
2094
|
+
auto file5 = mock::MakeMockFile({{KeyStr("c", 60U, kTypeValue), "valc"},
|
|
2095
|
+
{KeyStr("c", 59U, kTypeValue), "valc"}});
|
|
2096
|
+
|
|
2097
|
+
// "a" has 10 overlapped grandparent files (each size 10), which is far
|
|
2098
|
+
// exceeded the `max_compaction_bytes`, but make sure 2 "a" are not separated,
|
|
2099
|
+
// as splitting them won't help reducing the compaction size.
|
|
2100
|
+
// also make sure "b" and "c" are cut separately.
|
|
2101
|
+
mock::KVVector expected_file1 =
|
|
2102
|
+
mock::MakeMockFile({{KeyStr("a", 104U, kTypeValue), "val1"},
|
|
2103
|
+
{KeyStr("a", 102U, kTypeValue), "val2"}});
|
|
2104
|
+
mock::KVVector expected_file2 =
|
|
2105
|
+
mock::MakeMockFile({{KeyStr("b", 103U, kTypeValue), "val"}});
|
|
2106
|
+
mock::KVVector expected_file3 =
|
|
2107
|
+
mock::MakeMockFile({{KeyStr("c", 101U, kTypeValue), "val"}});
|
|
2108
|
+
|
|
2109
|
+
SetLastSequence(122U);
|
|
2110
|
+
const std::vector<int> input_levels = {0, 1};
|
|
2111
|
+
auto lvl0_files = cfd_->current()->storage_info()->LevelFiles(0);
|
|
2112
|
+
auto lvl1_files = cfd_->current()->storage_info()->LevelFiles(1);
|
|
2113
|
+
|
|
2114
|
+
// Just keep all the history
|
|
2115
|
+
std::vector<SequenceNumber> snapshots;
|
|
2116
|
+
for (int i = 80; i <= 105; i++) {
|
|
2117
|
+
snapshots.emplace_back(i);
|
|
2118
|
+
}
|
|
2119
|
+
RunCompaction({lvl0_files, lvl1_files}, input_levels,
|
|
2120
|
+
{expected_file1, expected_file2, expected_file3}, snapshots);
|
|
2121
|
+
}
|
|
2122
|
+
|
|
2123
|
+
INSTANTIATE_TEST_CASE_P(CompactionJobDynamicFileSizeTest,
|
|
2124
|
+
CompactionJobDynamicFileSizeTest, testing::Bool());
|
|
1724
2125
|
|
|
1725
2126
|
class CompactionJobTimestampTest : public CompactionJobTestBase {
|
|
1726
2127
|
public:
|
|
@@ -2033,6 +2434,7 @@ TEST_F(CompactionJobIOPriorityTest, GetRateLimiterPriority) {
|
|
|
2033
2434
|
} // namespace ROCKSDB_NAMESPACE
|
|
2034
2435
|
|
|
2035
2436
|
int main(int argc, char** argv) {
|
|
2437
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
2036
2438
|
::testing::InitGoogleTest(&argc, argv);
|
|
2037
2439
|
RegisterCustomObjects(argc, argv);
|
|
2038
2440
|
return RUN_ALL_TESTS();
|