@nxtedition/rocksdb 15.4.1 → 15.5.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 +24 -15
- package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
- package/deps/rocksdb/rocksdb/BUCK +42 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
- package/deps/rocksdb/rocksdb/Makefile +59 -32
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
- package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
- package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
- package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
- package/deps/rocksdb/rocksdb/db/builder.h +7 -0
- package/deps/rocksdb/rocksdb/db/c.cc +373 -57
- package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
- package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
- package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
- package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
- package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
- package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
- package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
- package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
- package/deps/rocksdb/rocksdb/env/env.cc +1 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
- package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
- package/deps/rocksdb/rocksdb/folly.mk +22 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
- package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
- package/deps/rocksdb/rocksdb/options/options.cc +5 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
- package/deps/rocksdb/rocksdb/port/lang.h +4 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
- package/deps/rocksdb/rocksdb/src.mk +12 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
- package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
- package/deps/rocksdb/rocksdb/table/format.cc +27 -15
- package/deps/rocksdb/rocksdb/table/format.h +41 -15
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
- package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
- package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
- package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
- package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
- package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
- package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
- package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
- package/deps/rocksdb/rocksdb/util/coding.h +14 -27
- package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
- package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
- package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
- package/deps/rocksdb/rocksdb/util/math.h +3 -1
- package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
- package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
- package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
- package/deps/rocksdb/rocksdb/util/status.cc +3 -1
- package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
- package/deps/rocksdb/rocksdb.gyp +7 -0
- package/iterator.js +2 -2
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
|
@@ -676,8 +676,8 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
676
676
|
&event_logger, false, false, dbname_, &compaction_job_stats_,
|
|
677
677
|
Env::Priority::USER, nullptr /* IOTracer */,
|
|
678
678
|
/*manual_compaction_canceled=*/kManualCompactionCanceledFalse,
|
|
679
|
-
env_->GenerateUniqueId(),
|
|
680
|
-
full_history_ts_low_);
|
|
679
|
+
CompactionJob::kCompactionAbortedFalse, env_->GenerateUniqueId(),
|
|
680
|
+
DBImpl::GenerateDbSessionId(nullptr), full_history_ts_low_);
|
|
681
681
|
VerifyInitializationOfCompactionJobStats(compaction_job_stats_);
|
|
682
682
|
|
|
683
683
|
compaction_job.Prepare(std::nullopt /*subcompact to be computed*/);
|
|
@@ -2409,459 +2409,6 @@ TEST_F(CompactionJobIOPriorityTest, GetRateLimiterPriority) {
|
|
|
2409
2409
|
kMaxSequenceNumber, 1, false, {kInvalidBlobFileNumber}, true,
|
|
2410
2410
|
Env::IO_LOW, Env::IO_LOW);
|
|
2411
2411
|
}
|
|
2412
|
-
|
|
2413
|
-
class ResumableCompactionJobTest : public CompactionJobTestBase {
|
|
2414
|
-
public:
|
|
2415
|
-
ResumableCompactionJobTest()
|
|
2416
|
-
: CompactionJobTestBase(
|
|
2417
|
-
test::PerThreadDBPath("allow_resumption_job_test"),
|
|
2418
|
-
BytewiseComparator(), [](uint64_t /*ts*/) { return ""; },
|
|
2419
|
-
/*test_io_priority=*/false, TableTypeForTest::kBlockBasedTable) {}
|
|
2420
|
-
|
|
2421
|
-
protected:
|
|
2422
|
-
static constexpr const char* kCancelBeforeThisKey = "cancel_before_this_key";
|
|
2423
|
-
std::string progress_dir_;
|
|
2424
|
-
bool enable_cancel_ = false;
|
|
2425
|
-
std::atomic<int> stop_count_{0};
|
|
2426
|
-
std::atomic<bool> cancel_{false};
|
|
2427
|
-
SequenceNumber cancel_before_seqno = kMaxSequenceNumber;
|
|
2428
|
-
|
|
2429
|
-
void SetUp() override {
|
|
2430
|
-
CompactionJobTestBase::SetUp();
|
|
2431
|
-
SyncPoint::GetInstance()->SetCallBack(
|
|
2432
|
-
"CompactionOutputs::ShouldStopBefore::manual_decision",
|
|
2433
|
-
[this](void* p) {
|
|
2434
|
-
auto* pair = static_cast<std::pair<bool*, const Slice>*>(p);
|
|
2435
|
-
*(pair->first) = true;
|
|
2436
|
-
|
|
2437
|
-
// Cancel after outputting a specific key
|
|
2438
|
-
if (enable_cancel_) {
|
|
2439
|
-
ParsedInternalKey parsed_key;
|
|
2440
|
-
if (ParseInternalKey(pair->second, &parsed_key, true).ok()) {
|
|
2441
|
-
if (parsed_key.user_key == kCancelBeforeThisKey &&
|
|
2442
|
-
(cancel_before_seqno == kMaxSequenceNumber ||
|
|
2443
|
-
parsed_key.sequence == cancel_before_seqno)) {
|
|
2444
|
-
cancel_.store(true);
|
|
2445
|
-
}
|
|
2446
|
-
}
|
|
2447
|
-
}
|
|
2448
|
-
});
|
|
2449
|
-
SyncPoint::GetInstance()->EnableProcessing();
|
|
2450
|
-
}
|
|
2451
|
-
|
|
2452
|
-
void TearDown() override {
|
|
2453
|
-
SyncPoint::GetInstance()->DisableProcessing();
|
|
2454
|
-
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2455
|
-
|
|
2456
|
-
if (env_->FileExists(progress_dir_).ok()) {
|
|
2457
|
-
std::vector<std::string> files;
|
|
2458
|
-
EXPECT_OK(env_->GetChildren(progress_dir_, &files));
|
|
2459
|
-
for (const auto& file : files) {
|
|
2460
|
-
if (file != "." && file != "..") {
|
|
2461
|
-
EXPECT_OK(env_->DeleteFile(progress_dir_ + "/" + file));
|
|
2462
|
-
}
|
|
2463
|
-
}
|
|
2464
|
-
EXPECT_OK(env_->DeleteDir(progress_dir_));
|
|
2465
|
-
}
|
|
2466
|
-
|
|
2467
|
-
CompactionJobTestBase::TearDown();
|
|
2468
|
-
}
|
|
2469
|
-
|
|
2470
|
-
void NewDB() {
|
|
2471
|
-
if (env_->FileExists(progress_dir_).ok()) {
|
|
2472
|
-
std::vector<std::string> files;
|
|
2473
|
-
EXPECT_OK(env_->GetChildren(progress_dir_, &files));
|
|
2474
|
-
for (const auto& file : files) {
|
|
2475
|
-
if (file != "." && file != "..") {
|
|
2476
|
-
EXPECT_OK(env_->DeleteFile(progress_dir_ + "/" + file));
|
|
2477
|
-
}
|
|
2478
|
-
}
|
|
2479
|
-
EXPECT_OK(env_->DeleteDir(progress_dir_));
|
|
2480
|
-
}
|
|
2481
|
-
|
|
2482
|
-
CompactionJobTestBase::NewDB();
|
|
2483
|
-
|
|
2484
|
-
progress_dir_ = test::PerThreadDBPath("compaction_progress");
|
|
2485
|
-
ASSERT_OK(env_->CreateDirIfMissing(progress_dir_));
|
|
2486
|
-
}
|
|
2487
|
-
|
|
2488
|
-
void EnableCompactionCancel() { enable_cancel_ = true; }
|
|
2489
|
-
|
|
2490
|
-
void DisableCompactionCancel() {
|
|
2491
|
-
enable_cancel_ = false;
|
|
2492
|
-
cancel_.store(false);
|
|
2493
|
-
}
|
|
2494
|
-
|
|
2495
|
-
std::unique_ptr<log::Writer> CreateCompactionProgressWriter(
|
|
2496
|
-
const std::string& compaction_progress_file) {
|
|
2497
|
-
std::unique_ptr<FSWritableFile> file;
|
|
2498
|
-
EXPECT_OK(fs_->NewWritableFile(compaction_progress_file, FileOptions(),
|
|
2499
|
-
&file, nullptr));
|
|
2500
|
-
auto file_writer = std::make_unique<WritableFileWriter>(
|
|
2501
|
-
std::move(file), compaction_progress_file, FileOptions());
|
|
2502
|
-
auto compaction_progress_writer =
|
|
2503
|
-
std::make_unique<log::Writer>(std::move(file_writer), 0, false);
|
|
2504
|
-
return compaction_progress_writer;
|
|
2505
|
-
}
|
|
2506
|
-
|
|
2507
|
-
Status RunCompactionWithProgressTracking(
|
|
2508
|
-
const CompactionProgress& compaction_progress,
|
|
2509
|
-
log::Writer* compaction_progress_writer,
|
|
2510
|
-
std::vector<SequenceNumber> snapshots = {},
|
|
2511
|
-
std::shared_ptr<Statistics> stats = nullptr) {
|
|
2512
|
-
mutex_.Lock();
|
|
2513
|
-
|
|
2514
|
-
auto cfd = versions_->GetColumnFamilySet()->GetDefault();
|
|
2515
|
-
auto files = cfd->current()->storage_info()->LevelFiles(0);
|
|
2516
|
-
|
|
2517
|
-
db_options_.statistics = stats;
|
|
2518
|
-
db_options_.stats = db_options_.statistics.get();
|
|
2519
|
-
|
|
2520
|
-
std::vector<CompactionInputFiles> compaction_input_files;
|
|
2521
|
-
CompactionInputFiles level;
|
|
2522
|
-
level.level = 0;
|
|
2523
|
-
level.files = files;
|
|
2524
|
-
compaction_input_files.push_back(level);
|
|
2525
|
-
|
|
2526
|
-
Compaction compaction(
|
|
2527
|
-
cfd->current()->storage_info(), cfd->ioptions(),
|
|
2528
|
-
cfd->GetLatestMutableCFOptions(), mutable_db_options_,
|
|
2529
|
-
compaction_input_files, 1, mutable_cf_options_.target_file_size_base,
|
|
2530
|
-
mutable_cf_options_.max_compaction_bytes, 0, kNoCompression,
|
|
2531
|
-
cfd->GetLatestMutableCFOptions().compression_opts,
|
|
2532
|
-
Temperature::kUnknown, 0, {}, std::nullopt, nullptr,
|
|
2533
|
-
CompactionReason::kManualCompaction);
|
|
2534
|
-
compaction.FinalizeInputInfo(cfd->current());
|
|
2535
|
-
|
|
2536
|
-
LogBuffer log_buffer(InfoLogLevel::INFO_LEVEL, db_options_.info_log.get());
|
|
2537
|
-
EventLogger event_logger(db_options_.info_log.get());
|
|
2538
|
-
JobContext job_context(1, false);
|
|
2539
|
-
job_context.InitSnapshotContext(nullptr, nullptr, kMaxSequenceNumber,
|
|
2540
|
-
std::move(snapshots));
|
|
2541
|
-
CompactionJobStats job_stats;
|
|
2542
|
-
|
|
2543
|
-
CompactionJob compaction_job(
|
|
2544
|
-
0, &compaction, db_options_, mutable_db_options_, env_options_,
|
|
2545
|
-
versions_.get(), &shutting_down_, &log_buffer, nullptr, nullptr,
|
|
2546
|
-
nullptr, stats.get(), &mutex_, &error_handler_, &job_context,
|
|
2547
|
-
table_cache_, &event_logger, false, false, dbname_, &job_stats,
|
|
2548
|
-
Env::Priority::USER, nullptr, cancel_, env_->GenerateUniqueId(),
|
|
2549
|
-
DBImpl::GenerateDbSessionId(nullptr), "");
|
|
2550
|
-
|
|
2551
|
-
compaction_job.Prepare(std::nullopt, compaction_progress,
|
|
2552
|
-
compaction_progress_writer);
|
|
2553
|
-
mutex_.Unlock();
|
|
2554
|
-
|
|
2555
|
-
compaction_job.Run().PermitUncheckedError();
|
|
2556
|
-
EXPECT_OK(compaction_job.io_status());
|
|
2557
|
-
|
|
2558
|
-
mutex_.Lock();
|
|
2559
|
-
|
|
2560
|
-
bool compaction_released = false;
|
|
2561
|
-
Status s = compaction_job.Install(&compaction_released);
|
|
2562
|
-
|
|
2563
|
-
mutex_.Unlock();
|
|
2564
|
-
if (!compaction_released) {
|
|
2565
|
-
compaction.ReleaseCompactionFiles(s);
|
|
2566
|
-
}
|
|
2567
|
-
|
|
2568
|
-
return s;
|
|
2569
|
-
}
|
|
2570
|
-
|
|
2571
|
-
SubcompactionProgress ReadAndParseProgress(
|
|
2572
|
-
const std::string& compaction_progress_file) {
|
|
2573
|
-
std::unique_ptr<FSSequentialFile> seq_file;
|
|
2574
|
-
EXPECT_OK(fs_->NewSequentialFile(compaction_progress_file, FileOptions(),
|
|
2575
|
-
&seq_file, nullptr));
|
|
2576
|
-
auto file_reader = std::make_unique<SequentialFileReader>(
|
|
2577
|
-
std::move(seq_file), compaction_progress_file, 0, nullptr);
|
|
2578
|
-
log::Reader reader(nullptr, std::move(file_reader), nullptr, true, 0);
|
|
2579
|
-
|
|
2580
|
-
SubcompactionProgressBuilder builder;
|
|
2581
|
-
std::string record;
|
|
2582
|
-
Slice slice;
|
|
2583
|
-
|
|
2584
|
-
while (reader.ReadRecord(&slice, &record)) {
|
|
2585
|
-
VersionEdit edit;
|
|
2586
|
-
if (!edit.DecodeFrom(slice).ok()) {
|
|
2587
|
-
continue;
|
|
2588
|
-
}
|
|
2589
|
-
builder.ProcessVersionEdit(edit);
|
|
2590
|
-
}
|
|
2591
|
-
|
|
2592
|
-
EXPECT_TRUE(builder.HasAccumulatedSubcompactionProgress());
|
|
2593
|
-
|
|
2594
|
-
return builder.GetAccumulatedSubcompactionProgress();
|
|
2595
|
-
}
|
|
2596
|
-
|
|
2597
|
-
// Test utility function to verify that compaction progress was correctly
|
|
2598
|
-
// persisted to the progress file after compaction interruption.
|
|
2599
|
-
//
|
|
2600
|
-
// VERIFIES:
|
|
2601
|
-
// - Progress file exists and has expected size (empty if no progress
|
|
2602
|
-
// expected)
|
|
2603
|
-
// - Next internal key to compact matches expected user key with proper format
|
|
2604
|
-
// - Number of processed input records matches position in ordered input keys
|
|
2605
|
-
// - Number of processed output records equals number of processed input
|
|
2606
|
-
// records (by test design to simplify verification)
|
|
2607
|
-
// - Each output file contains exactly one user key (by test design to
|
|
2608
|
-
// simplify verification)
|
|
2609
|
-
void VerifyCompactionProgressPersisted(
|
|
2610
|
-
const std::string& compaction_progress_file,
|
|
2611
|
-
const std::string& next_user_key_to_compact,
|
|
2612
|
-
const std::vector<std::string>& ordered_intput_keys) {
|
|
2613
|
-
ASSERT_OK(env_->FileExists(compaction_progress_file));
|
|
2614
|
-
|
|
2615
|
-
uint64_t file_size;
|
|
2616
|
-
ASSERT_OK(env_->GetFileSize(compaction_progress_file, &file_size));
|
|
2617
|
-
|
|
2618
|
-
if (next_user_key_to_compact.empty()) {
|
|
2619
|
-
ASSERT_EQ(file_size, 0);
|
|
2620
|
-
return;
|
|
2621
|
-
}
|
|
2622
|
-
|
|
2623
|
-
const auto& subcompaction_progress =
|
|
2624
|
-
ReadAndParseProgress(compaction_progress_file);
|
|
2625
|
-
|
|
2626
|
-
ASSERT_FALSE(subcompaction_progress.next_internal_key_to_compact.empty());
|
|
2627
|
-
ParsedInternalKey parsed_next_key;
|
|
2628
|
-
ASSERT_OK(
|
|
2629
|
-
ParseInternalKey(subcompaction_progress.next_internal_key_to_compact,
|
|
2630
|
-
&parsed_next_key, true /* log_err_key */));
|
|
2631
|
-
ASSERT_EQ(parsed_next_key.user_key, next_user_key_to_compact);
|
|
2632
|
-
ASSERT_EQ(parsed_next_key.sequence, kMaxSequenceNumber);
|
|
2633
|
-
ASSERT_EQ(parsed_next_key.type, kValueTypeForSeek);
|
|
2634
|
-
|
|
2635
|
-
auto it = std::find(ordered_intput_keys.begin(), ordered_intput_keys.end(),
|
|
2636
|
-
next_user_key_to_compact);
|
|
2637
|
-
ASSERT_TRUE(it != ordered_intput_keys.end());
|
|
2638
|
-
|
|
2639
|
-
auto next_key_index = std::distance(ordered_intput_keys.begin(), it);
|
|
2640
|
-
|
|
2641
|
-
ASSERT_EQ(subcompaction_progress.num_processed_input_records,
|
|
2642
|
-
next_key_index);
|
|
2643
|
-
|
|
2644
|
-
ASSERT_EQ(subcompaction_progress.output_level_progress
|
|
2645
|
-
.GetNumProcessedOutputRecords(),
|
|
2646
|
-
next_key_index);
|
|
2647
|
-
|
|
2648
|
-
ASSERT_EQ(
|
|
2649
|
-
subcompaction_progress.output_level_progress.GetOutputFiles().size(),
|
|
2650
|
-
|
|
2651
|
-
next_key_index);
|
|
2652
|
-
|
|
2653
|
-
for (size_t i = 0;
|
|
2654
|
-
i <
|
|
2655
|
-
subcompaction_progress.output_level_progress.GetOutputFiles().size();
|
|
2656
|
-
++i) {
|
|
2657
|
-
const auto& output_file =
|
|
2658
|
-
subcompaction_progress.output_level_progress.GetOutputFiles()[i];
|
|
2659
|
-
ASSERT_EQ(output_file.smallest.user_key().ToString(),
|
|
2660
|
-
output_file.largest.user_key().ToString());
|
|
2661
|
-
ASSERT_EQ(output_file.largest.user_key().ToString(),
|
|
2662
|
-
ordered_intput_keys[i]);
|
|
2663
|
-
}
|
|
2664
|
-
}
|
|
2665
|
-
|
|
2666
|
-
void RunCancelAndResumeTest(
|
|
2667
|
-
const std::initializer_list<mock::KVPair>& input_file_1,
|
|
2668
|
-
const std::initializer_list<mock::KVPair>& input_file_2,
|
|
2669
|
-
uint64_t last_sequence, const std::vector<uint64_t>& snapshots,
|
|
2670
|
-
const std::string& expected_next_key_to_compact,
|
|
2671
|
-
const std::vector<std::string>& expected_input_keys,
|
|
2672
|
-
bool cancelled_past_mid_point = false) {
|
|
2673
|
-
std::shared_ptr<Statistics> stats = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
|
2674
|
-
|
|
2675
|
-
auto file1 = mock::MakeMockFile(input_file_1);
|
|
2676
|
-
AddMockFile(file1);
|
|
2677
|
-
auto file2 = mock::MakeMockFile(input_file_2);
|
|
2678
|
-
AddMockFile(file2);
|
|
2679
|
-
SetLastSequence(last_sequence);
|
|
2680
|
-
|
|
2681
|
-
// First compaction (will be cancelled)
|
|
2682
|
-
std::string compaction_progress_file =
|
|
2683
|
-
CompactionProgressFileName(progress_dir_, 123);
|
|
2684
|
-
std::unique_ptr<log::Writer> compaction_progress_writer =
|
|
2685
|
-
CreateCompactionProgressWriter(compaction_progress_file);
|
|
2686
|
-
|
|
2687
|
-
ASSERT_OK(stats->Reset());
|
|
2688
|
-
EnableCompactionCancel();
|
|
2689
|
-
|
|
2690
|
-
Status status = RunCompactionWithProgressTracking(
|
|
2691
|
-
CompactionProgress{}, compaction_progress_writer.get(), snapshots,
|
|
2692
|
-
stats);
|
|
2693
|
-
|
|
2694
|
-
ASSERT_TRUE(status.IsManualCompactionPaused());
|
|
2695
|
-
DisableCompactionCancel();
|
|
2696
|
-
|
|
2697
|
-
HistogramData cancelled_compaction_stats;
|
|
2698
|
-
stats->histogramData(FILE_WRITE_COMPACTION_MICROS,
|
|
2699
|
-
&cancelled_compaction_stats);
|
|
2700
|
-
|
|
2701
|
-
VerifyCompactionProgressPersisted(compaction_progress_file,
|
|
2702
|
-
expected_next_key_to_compact,
|
|
2703
|
-
expected_input_keys);
|
|
2704
|
-
|
|
2705
|
-
// Resume compaction
|
|
2706
|
-
CompactionProgress compaction_progress;
|
|
2707
|
-
if (expected_next_key_to_compact != "") {
|
|
2708
|
-
compaction_progress.push_back(
|
|
2709
|
-
ReadAndParseProgress(compaction_progress_file));
|
|
2710
|
-
}
|
|
2711
|
-
|
|
2712
|
-
std::string compaction_progress_file_2 =
|
|
2713
|
-
CompactionProgressFileName(progress_dir_, 234);
|
|
2714
|
-
std::unique_ptr<log::Writer> compaction_progress_writer_2 =
|
|
2715
|
-
CreateCompactionProgressWriter(compaction_progress_file_2);
|
|
2716
|
-
|
|
2717
|
-
ASSERT_OK(stats->Reset());
|
|
2718
|
-
|
|
2719
|
-
status = RunCompactionWithProgressTracking(
|
|
2720
|
-
compaction_progress, compaction_progress_writer_2.get(),
|
|
2721
|
-
{} /* snapshots */, stats);
|
|
2722
|
-
|
|
2723
|
-
ASSERT_OK(status);
|
|
2724
|
-
|
|
2725
|
-
if (cancelled_past_mid_point) {
|
|
2726
|
-
HistogramData resumed_compaction_stats;
|
|
2727
|
-
stats->histogramData(FILE_WRITE_COMPACTION_MICROS,
|
|
2728
|
-
&resumed_compaction_stats);
|
|
2729
|
-
ASSERT_GT(cancelled_compaction_stats.count,
|
|
2730
|
-
resumed_compaction_stats.count);
|
|
2731
|
-
}
|
|
2732
|
-
}
|
|
2733
|
-
};
|
|
2734
|
-
|
|
2735
|
-
TEST_F(ResumableCompactionJobTest, BasicProgressPersistence) {
|
|
2736
|
-
NewDB();
|
|
2737
|
-
|
|
2738
|
-
auto file1 = mock::MakeMockFile({
|
|
2739
|
-
{KeyStr("a", 1U, kTypeValue), "val1"},
|
|
2740
|
-
{KeyStr("b", 2U, kTypeValue), "val2"},
|
|
2741
|
-
});
|
|
2742
|
-
AddMockFile(file1);
|
|
2743
|
-
|
|
2744
|
-
auto file2 = mock::MakeMockFile({
|
|
2745
|
-
{KeyStr("c", 3U, kTypeValue), "val3"},
|
|
2746
|
-
{KeyStr("d", 4U, kTypeValue), "val4"},
|
|
2747
|
-
});
|
|
2748
|
-
AddMockFile(file2);
|
|
2749
|
-
|
|
2750
|
-
SetLastSequence(4U);
|
|
2751
|
-
|
|
2752
|
-
std::string compaction_progress_file =
|
|
2753
|
-
CompactionProgressFileName(progress_dir_, 123);
|
|
2754
|
-
|
|
2755
|
-
std::unique_ptr<log::Writer> compaction_progress_writer =
|
|
2756
|
-
CreateCompactionProgressWriter(compaction_progress_file);
|
|
2757
|
-
|
|
2758
|
-
Status status = RunCompactionWithProgressTracking(
|
|
2759
|
-
CompactionProgress(), compaction_progress_writer.get());
|
|
2760
|
-
|
|
2761
|
-
ASSERT_OK(status);
|
|
2762
|
-
|
|
2763
|
-
VerifyCompactionProgressPersisted(
|
|
2764
|
-
compaction_progress_file, "d" /* next_user_key_to_compact */,
|
|
2765
|
-
{"a", "b", "c", "d"} /* ordered_intput_keys */);
|
|
2766
|
-
}
|
|
2767
|
-
|
|
2768
|
-
TEST_F(ResumableCompactionJobTest, BasicProgressResume) {
|
|
2769
|
-
NewDB();
|
|
2770
|
-
|
|
2771
|
-
RunCancelAndResumeTest(
|
|
2772
|
-
{{KeyStr("a", 1U, kTypeValue), "val1"},
|
|
2773
|
-
{KeyStr("b", 2U, kTypeValue), "val2"}} /* input_file_1 */,
|
|
2774
|
-
{{KeyStr("bb", 3U, kTypeValue), "val3"},
|
|
2775
|
-
{KeyStr(kCancelBeforeThisKey, 4U, kTypeValue),
|
|
2776
|
-
"val4"}} /* input_file_2 */,
|
|
2777
|
-
4U /* last_sequence */, {} /* snapshots */,
|
|
2778
|
-
kCancelBeforeThisKey /* expected_next_key_to_compact */,
|
|
2779
|
-
{"a", "b", "bb", kCancelBeforeThisKey} /* expected_input_keys */,
|
|
2780
|
-
true /* cancelled_past_mid_point */);
|
|
2781
|
-
}
|
|
2782
|
-
|
|
2783
|
-
TEST_F(ResumableCompactionJobTest, NoProgressResumeOnSameKey) {
|
|
2784
|
-
NewDB();
|
|
2785
|
-
|
|
2786
|
-
// `cancel_before_seqno` is set to 0U to force cancellation after
|
|
2787
|
-
// `kCancelBeforeThisKey@1` instead of `kCancelBeforeThisKey@2`.
|
|
2788
|
-
// The seqno is 0 because `kCancelBeforeThisKey@1` will have its sequence
|
|
2789
|
-
// number zeroed during compaction while `kCancelBeforeThisKey@2` won't be
|
|
2790
|
-
cancel_before_seqno = 0U;
|
|
2791
|
-
RunCancelAndResumeTest(
|
|
2792
|
-
{{KeyStr(kCancelBeforeThisKey, 1U, kTypeValue),
|
|
2793
|
-
"val1"}} /* input_file_1 */,
|
|
2794
|
-
{{KeyStr(kCancelBeforeThisKey, 2U, kTypeValue), "val11"},
|
|
2795
|
-
{KeyStr("d", 3U, kTypeValue), "val2"}} /* input_file_2 */,
|
|
2796
|
-
3U /* last_sequence */, {1U} /* snapshots */,
|
|
2797
|
-
"" /* expected_next_key_to_compact */,
|
|
2798
|
-
{kCancelBeforeThisKey, kCancelBeforeThisKey,
|
|
2799
|
-
"d"} /* expected_input_keys */);
|
|
2800
|
-
}
|
|
2801
|
-
|
|
2802
|
-
TEST_F(ResumableCompactionJobTest, NoProgressResumeOnDeleteRange) {
|
|
2803
|
-
NewDB();
|
|
2804
|
-
|
|
2805
|
-
RunCancelAndResumeTest(
|
|
2806
|
-
{{KeyStr("a", 1U, kTypeValue), "val1"},
|
|
2807
|
-
{KeyStr("b", 2U, kTypeValue), "val2"},
|
|
2808
|
-
{KeyStr(kCancelBeforeThisKey, 3U, kTypeValue),
|
|
2809
|
-
"val3"}} /* input_file_1 */,
|
|
2810
|
-
{{KeyStr(kCancelBeforeThisKey, 4U, kTypeRangeDeletion),
|
|
2811
|
-
"range_deletion_end_key"},
|
|
2812
|
-
{KeyStr("d", 5U, kTypeValue), "val4"}} /* input_file_2 */,
|
|
2813
|
-
5U /* last_sequence */, {3U} /* snapshots */,
|
|
2814
|
-
"b" /* expected_next_key_to_compact */,
|
|
2815
|
-
{"a", "b", kCancelBeforeThisKey, kCancelBeforeThisKey,
|
|
2816
|
-
"d"} /* expected_input_keys */);
|
|
2817
|
-
}
|
|
2818
|
-
|
|
2819
|
-
TEST_F(ResumableCompactionJobTest, NoProgressResumeOnMerge) {
|
|
2820
|
-
merge_op_ = MergeOperators::CreateStringAppendOperator();
|
|
2821
|
-
NewDB();
|
|
2822
|
-
|
|
2823
|
-
RunCancelAndResumeTest(
|
|
2824
|
-
{{KeyStr("a", 1U, kTypeValue), "val1"},
|
|
2825
|
-
{KeyStr("b", 2U, kTypeValue), "val2"}} /* input_file_1 */,
|
|
2826
|
-
{{KeyStr("bb", 3U, kTypeValue), "val3"},
|
|
2827
|
-
{KeyStr(kCancelBeforeThisKey, 4U, kTypeMerge),
|
|
2828
|
-
"val4"}} /* input_file_2 */,
|
|
2829
|
-
4U /* last_sequence */, {} /* snapshots */,
|
|
2830
|
-
"bb" /* expected_next_key_to_compact */,
|
|
2831
|
-
{"a", "b", "bb", kCancelBeforeThisKey} /* expected_input_keys */);
|
|
2832
|
-
}
|
|
2833
|
-
|
|
2834
|
-
TEST_F(ResumableCompactionJobTest, NoProgressResumeOnSingleDelete) {
|
|
2835
|
-
NewDB();
|
|
2836
|
-
|
|
2837
|
-
RunCancelAndResumeTest(
|
|
2838
|
-
{{KeyStr("a", 1U, kTypeValue), "val1"},
|
|
2839
|
-
{KeyStr("b", 2U, kTypeValue), "val2"},
|
|
2840
|
-
{KeyStr(kCancelBeforeThisKey, 3U, kTypeValue),
|
|
2841
|
-
"val3"}} /* input_file_1 */,
|
|
2842
|
-
{{KeyStr(kCancelBeforeThisKey, 4U, kTypeSingleDeletion), ""},
|
|
2843
|
-
{KeyStr("d", 5U, kTypeValue), "val4"}} /* input_file_2 */,
|
|
2844
|
-
5U /* last_sequence */, {3U} /* snapshots */,
|
|
2845
|
-
"b" /* expected_next_key_to_compact */,
|
|
2846
|
-
{"a", "b", kCancelBeforeThisKey, kCancelBeforeThisKey,
|
|
2847
|
-
"d"} /* expected_input_keys */);
|
|
2848
|
-
}
|
|
2849
|
-
|
|
2850
|
-
TEST_F(ResumableCompactionJobTest, NoProgressResumeOnDeletionAtBottom) {
|
|
2851
|
-
NewDB();
|
|
2852
|
-
|
|
2853
|
-
RunCancelAndResumeTest(
|
|
2854
|
-
{{KeyStr("a", 1U, kTypeValue), "val1"},
|
|
2855
|
-
{KeyStr("b", 2U, kTypeValue), "val2"},
|
|
2856
|
-
{KeyStr(kCancelBeforeThisKey, 3U, kTypeValue),
|
|
2857
|
-
"val3"}} /* input_file_1 */,
|
|
2858
|
-
{{KeyStr(kCancelBeforeThisKey, 4U, kTypeDeletion), ""},
|
|
2859
|
-
{KeyStr("d", 5U, kTypeValue), "val4"}} /* input_file_2 */,
|
|
2860
|
-
5U /* last_sequence */, {3U} /* snapshots */,
|
|
2861
|
-
"b" /* expected_next_key_to_compact */,
|
|
2862
|
-
{"a", "b", kCancelBeforeThisKey, kCancelBeforeThisKey,
|
|
2863
|
-
"d"} /* expected_input_keys */);
|
|
2864
|
-
}
|
|
2865
2412
|
} // namespace ROCKSDB_NAMESPACE
|
|
2866
2413
|
|
|
2867
2414
|
int main(int argc, char** argv) {
|
|
@@ -49,8 +49,10 @@ Status CompactionOutputs::Finish(
|
|
|
49
49
|
meta->fd.file_size = current_bytes;
|
|
50
50
|
meta->tail_size = builder_->GetTailSize();
|
|
51
51
|
meta->marked_for_compaction = builder_->NeedCompact();
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
const TableProperties& tp = builder_->GetTableProperties();
|
|
53
|
+
meta->user_defined_timestamps_persisted =
|
|
54
|
+
static_cast<bool>(tp.user_defined_timestamps_persisted);
|
|
55
|
+
ExtractTimestampFromTableProperties(tp, meta);
|
|
54
56
|
}
|
|
55
57
|
current_output().finished = true;
|
|
56
58
|
stats_.bytes_written += current_bytes;
|
|
@@ -84,6 +84,19 @@ class CompactionOutputs {
|
|
|
84
84
|
|
|
85
85
|
bool HasBlobFileAdditions() const { return !blob_file_additions_.empty(); }
|
|
86
86
|
|
|
87
|
+
// Get all file paths (SST and blob) created during compaction.
|
|
88
|
+
const std::vector<std::string>& GetOutputFilePaths() const {
|
|
89
|
+
return output_file_paths_;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
std::vector<std::string>* GetOutputFilePathsPtr() {
|
|
93
|
+
return &output_file_paths_;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void AddOutputFilePath(const std::string& path) {
|
|
97
|
+
output_file_paths_.push_back(path);
|
|
98
|
+
}
|
|
99
|
+
|
|
87
100
|
BlobGarbageMeter* CreateBlobGarbageMeter() {
|
|
88
101
|
assert(!is_proximal_level_);
|
|
89
102
|
blob_garbage_meter_ = std::make_unique<BlobGarbageMeter>();
|
|
@@ -321,6 +334,12 @@ class CompactionOutputs {
|
|
|
321
334
|
std::vector<BlobFileAddition> blob_file_additions_;
|
|
322
335
|
std::unique_ptr<BlobGarbageMeter> blob_garbage_meter_;
|
|
323
336
|
|
|
337
|
+
// All file paths (SST and blob) created during compaction.
|
|
338
|
+
// Used for cleanup on abort - ensures orphan files are deleted even if
|
|
339
|
+
// they were removed from outputs_ or blob_file_additions_ (e.g., by
|
|
340
|
+
// RemoveLastEmptyOutput when file_size is 0 because builder was abandoned).
|
|
341
|
+
std::vector<std::string> output_file_paths_;
|
|
342
|
+
|
|
324
343
|
// Per level's output stat
|
|
325
344
|
InternalStats::CompactionStats stats_;
|
|
326
345
|
|
|
@@ -27,12 +27,68 @@
|
|
|
27
27
|
|
|
28
28
|
namespace ROCKSDB_NAMESPACE {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
#ifndef NDEBUG
|
|
31
|
+
static void AssertCleanCut(const InternalKeyComparator* icmp,
|
|
32
|
+
VersionStorageInfo* vstorage,
|
|
33
|
+
CompactionInputFiles* inputs, int level,
|
|
34
|
+
Logger* logger) {
|
|
35
|
+
const std::vector<FileMetaData*>& level_files = vstorage->LevelFiles(level);
|
|
36
|
+
if (inputs->files.empty() || level_files.empty()) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const Comparator* ucmp = icmp->user_comparator();
|
|
41
|
+
|
|
42
|
+
// Find first and last input file indices in level
|
|
43
|
+
int first_input_idx = -1;
|
|
44
|
+
int last_input_idx = -1;
|
|
45
|
+
for (size_t i = 0; i < level_files.size(); i++) {
|
|
46
|
+
if (level_files[i] == inputs->files.front()) {
|
|
47
|
+
first_input_idx = static_cast<int>(i);
|
|
48
|
+
}
|
|
49
|
+
if (level_files[i] == inputs->files.back()) {
|
|
50
|
+
last_input_idx = static_cast<int>(i);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Check file before first input
|
|
55
|
+
if (first_input_idx > 0) {
|
|
56
|
+
const FileMetaData* prev_file = level_files[first_input_idx - 1];
|
|
57
|
+
const FileMetaData* first_file = inputs->files.front();
|
|
58
|
+
int cmp = sstableKeyCompare(ucmp, prev_file->largest, first_file->smallest);
|
|
59
|
+
if (cmp == 0) {
|
|
60
|
+
ROCKS_LOG_ERROR(logger,
|
|
61
|
+
"Clean cut violated: L%d unselected file %" PRIu64
|
|
62
|
+
" adjacent to first selected file %" PRIu64,
|
|
63
|
+
level, prev_file->fd.GetNumber(),
|
|
64
|
+
first_file->fd.GetNumber());
|
|
65
|
+
assert(false);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Check file after last input
|
|
70
|
+
if (last_input_idx >= 0 &&
|
|
71
|
+
static_cast<size_t>(last_input_idx) < level_files.size() - 1) {
|
|
72
|
+
const FileMetaData* last_file = inputs->files.back();
|
|
73
|
+
const FileMetaData* next_file = level_files[last_input_idx + 1];
|
|
74
|
+
int cmp = sstableKeyCompare(ucmp, last_file->largest, next_file->smallest);
|
|
75
|
+
if (cmp == 0) {
|
|
76
|
+
ROCKS_LOG_ERROR(logger,
|
|
77
|
+
"Clean cut violated: L%d unselected file %" PRIu64
|
|
78
|
+
" adjacent to last selected file %" PRIu64,
|
|
79
|
+
level, next_file->fd.GetNumber(),
|
|
80
|
+
last_file->fd.GetNumber());
|
|
81
|
+
assert(false);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
#endif // NDEBUG
|
|
86
|
+
|
|
87
|
+
bool PickCostBasedIntraL0Compaction(
|
|
88
|
+
const std::vector<FileMetaData*>& level_files, size_t min_files_to_compact,
|
|
89
|
+
uint64_t max_compact_bytes_per_del_file, uint64_t max_compaction_bytes,
|
|
90
|
+
CompactionInputFiles* comp_inputs) {
|
|
91
|
+
TEST_SYNC_POINT("PickCostBasedIntraL0Compaction");
|
|
36
92
|
|
|
37
93
|
size_t start = 0;
|
|
38
94
|
|
|
@@ -250,6 +306,10 @@ bool CompactionPicker::ExpandInputsToCleanCut(const std::string& /*cf_name*/,
|
|
|
250
306
|
// inputs. thus, inputs should be non-empty here
|
|
251
307
|
assert(!inputs->empty());
|
|
252
308
|
|
|
309
|
+
#ifndef NDEBUG
|
|
310
|
+
AssertCleanCut(icmp_, vstorage, inputs, level, ioptions_.logger);
|
|
311
|
+
#endif // NDEBUG
|
|
312
|
+
|
|
253
313
|
// If, after the expansion, there are files that are already under
|
|
254
314
|
// compaction, then we must drop/cancel this compaction.
|
|
255
315
|
if (AreFilesInCompaction(inputs->files)) {
|
|
@@ -611,7 +671,8 @@ Compaction* CompactionPicker::PickCompactionForCompactRange(
|
|
|
611
671
|
int input_level, int output_level,
|
|
612
672
|
const CompactRangeOptions& compact_range_options, const InternalKey* begin,
|
|
613
673
|
const InternalKey* end, InternalKey** compaction_end, bool* manual_conflict,
|
|
614
|
-
uint64_t max_file_num_to_ignore, const std::string& trim_ts
|
|
674
|
+
uint64_t max_file_num_to_ignore, const std::string& trim_ts,
|
|
675
|
+
const std::string& full_history_ts_low) {
|
|
615
676
|
// CompactionPickerFIFO has its own implementation of compact range
|
|
616
677
|
assert(ioptions_.compaction_style != kCompactionStyleFIFO);
|
|
617
678
|
|
|
@@ -690,7 +751,8 @@ Compaction* CompactionPicker::PickCompactionForCompactRange(
|
|
|
690
751
|
compact_range_options.blob_garbage_collection_age_cutoff);
|
|
691
752
|
|
|
692
753
|
RegisterCompaction(c);
|
|
693
|
-
vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options
|
|
754
|
+
vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options,
|
|
755
|
+
full_history_ts_low);
|
|
694
756
|
return c;
|
|
695
757
|
}
|
|
696
758
|
|
|
@@ -887,7 +949,8 @@ Compaction* CompactionPicker::PickCompactionForCompactRange(
|
|
|
887
949
|
// takes running compactions into account (by skipping files that are already
|
|
888
950
|
// being compacted). Since we just changed compaction score, we recalculate it
|
|
889
951
|
// here
|
|
890
|
-
vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options
|
|
952
|
+
vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options,
|
|
953
|
+
full_history_ts_low);
|
|
891
954
|
|
|
892
955
|
return compaction;
|
|
893
956
|
}
|
|
@@ -65,7 +65,8 @@ class CompactionPicker {
|
|
|
65
65
|
const MutableDBOptions& mutable_db_options,
|
|
66
66
|
const std::vector<SequenceNumber>& existing_snapshots,
|
|
67
67
|
const SnapshotChecker* snapshot_checker, VersionStorageInfo* vstorage,
|
|
68
|
-
LogBuffer* log_buffer,
|
|
68
|
+
LogBuffer* log_buffer, const std::string& full_history_ts_low,
|
|
69
|
+
bool require_max_output_level = false) = 0;
|
|
69
70
|
|
|
70
71
|
// The returned Compaction might not include the whole requested range.
|
|
71
72
|
// In that case, compaction_end will be set to the next key that needs
|
|
@@ -82,7 +83,8 @@ class CompactionPicker {
|
|
|
82
83
|
const CompactRangeOptions& compact_range_options,
|
|
83
84
|
const InternalKey* begin, const InternalKey* end,
|
|
84
85
|
InternalKey** compaction_end, bool* manual_conflict,
|
|
85
|
-
uint64_t max_file_num_to_ignore, const std::string& trim_ts
|
|
86
|
+
uint64_t max_file_num_to_ignore, const std::string& trim_ts,
|
|
87
|
+
const std::string& full_history_ts_low);
|
|
86
88
|
|
|
87
89
|
// The maximum allowed output level. Default value is NumberLevels() - 1.
|
|
88
90
|
virtual int MaxOutputLevel() const { return NumberLevels() - 1; }
|
|
@@ -284,7 +286,8 @@ class NullCompactionPicker : public CompactionPicker {
|
|
|
284
286
|
const std::vector<SequenceNumber>& /*existing_snapshots*/,
|
|
285
287
|
const SnapshotChecker* /*snapshot_checker*/,
|
|
286
288
|
VersionStorageInfo* /*vstorage*/, LogBuffer* /* log_buffer */,
|
|
287
|
-
|
|
289
|
+
const std::string& /*full_history_ts_low*/,
|
|
290
|
+
bool /*require_max_output_level*/) override {
|
|
288
291
|
return nullptr;
|
|
289
292
|
}
|
|
290
293
|
|
|
@@ -298,8 +301,8 @@ class NullCompactionPicker : public CompactionPicker {
|
|
|
298
301
|
const CompactRangeOptions& /*compact_range_options*/,
|
|
299
302
|
const InternalKey* /*begin*/, const InternalKey* /*end*/,
|
|
300
303
|
InternalKey** /*compaction_end*/, bool* /*manual_conflict*/,
|
|
301
|
-
uint64_t /*max_file_num_to_ignore*/,
|
|
302
|
-
const std::string& /*
|
|
304
|
+
uint64_t /*max_file_num_to_ignore*/, const std::string& /*trim_ts*/,
|
|
305
|
+
const std::string& /*full_history_ts_low*/) override {
|
|
303
306
|
return nullptr;
|
|
304
307
|
}
|
|
305
308
|
|
|
@@ -325,11 +328,10 @@ class NullCompactionPicker : public CompactionPicker {
|
|
|
325
328
|
// files. Cannot be nullptr.
|
|
326
329
|
//
|
|
327
330
|
// @return true iff compaction was found.
|
|
328
|
-
bool
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
CompactionInputFiles* comp_inputs);
|
|
331
|
+
bool PickCostBasedIntraL0Compaction(
|
|
332
|
+
const std::vector<FileMetaData*>& level_files, size_t min_files_to_compact,
|
|
333
|
+
uint64_t max_compact_bytes_per_del_file, uint64_t max_compaction_bytes,
|
|
334
|
+
CompactionInputFiles* comp_inputs);
|
|
333
335
|
|
|
334
336
|
CompressionType GetCompressionType(const VersionStorageInfo* vstorage,
|
|
335
337
|
const MutableCFOptions& mutable_cf_options,
|