@nxtedition/rocksdb 7.1.30 → 7.1.32
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 +2 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +15 -23
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +4 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -1
- package/deps/rocksdb/rocksdb/crash_test.mk +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +15 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +78 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +32 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +47 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +105 -166
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +46 -15
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +47 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +17 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +11 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +12 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +337 -103
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +524 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +164 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -23
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +30 -0
- package/deps/rocksdb/rocksdb/db/merge_helper.h +9 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +29 -9
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +10 -7
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_set.cc +11 -6
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +59 -53
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +0 -2
- package/deps/rocksdb/rocksdb/env/env.cc +16 -19
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +20 -20
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +62 -60
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_test.cc +179 -176
- package/deps/rocksdb/rocksdb/env/file_system.cc +3 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -2
- package/deps/rocksdb/rocksdb/env/io_posix.h +1 -2
- package/deps/rocksdb/rocksdb/env/mock_env.h +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +4 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +6 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +2 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +6 -7
- package/deps/rocksdb/rocksdb/file/file_util.cc +1 -1
- package/deps/rocksdb/rocksdb/file/filename.cc +16 -17
- package/deps/rocksdb/rocksdb/file/filename.h +4 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +492 -496
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +1 -3
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +1 -0
- package/deps/rocksdb/rocksdb/file/read_write_util.h +1 -0
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +6 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/block_cache_trace_writer.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +166 -167
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +12 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +0 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +3 -7
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +20 -23
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger.cc +1 -3
- package/deps/rocksdb/rocksdb/logging/event_logger.h +4 -5
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +2 -1
- package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -3
- package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -2
- package/deps/rocksdb/rocksdb/logging/logging.h +3 -3
- package/deps/rocksdb/rocksdb/memory/allocator.h +1 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +2 -0
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -0
- package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +17 -20
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +13 -15
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +11 -10
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +3 -3
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +30 -28
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +4 -6
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +73 -70
- package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +1 -1
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +21 -23
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +24 -38
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +10 -17
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +19 -19
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +22 -30
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +4 -6
- package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +4 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +12 -14
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +2 -3
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -3
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +7 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +12 -22
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +7 -10
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/port/lang.h +3 -1
- package/deps/rocksdb/rocksdb/port/likely.h +2 -2
- package/deps/rocksdb/rocksdb/port/mmap.h +2 -2
- package/deps/rocksdb/rocksdb/port/port_dirent.h +2 -2
- package/deps/rocksdb/rocksdb/port/port_posix.cc +32 -27
- package/deps/rocksdb/rocksdb/port/port_posix.h +31 -30
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -1
- package/deps/rocksdb/rocksdb/port/sys_time.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/io_win.h +6 -7
- package/deps/rocksdb/rocksdb/port/win/port_win.h +12 -20
- package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -4
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +30 -49
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +5 -5
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -62
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +2 -2
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +4 -3
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -6
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -6
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +90 -80
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +5 -4
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +63 -69
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +58 -57
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +3 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +35 -30
- package/deps/rocksdb/rocksdb/table/get_context.cc +16 -10
- package/deps/rocksdb/rocksdb/table/iter_heap.h +2 -0
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -3
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +31 -16
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +6 -6
- package/deps/rocksdb/rocksdb/table/multiget_context.h +5 -6
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +7 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +2 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +4 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +2 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +10 -21
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +14 -12
- package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +2 -5
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -3
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +0 -6
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +0 -33
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -6
- package/deps/rocksdb/rocksdb/table/table_properties.cc +24 -37
- package/deps/rocksdb/rocksdb/table/table_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +9 -8
- package/deps/rocksdb/rocksdb/table/table_test.cc +77 -82
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +8 -18
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +2 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +13 -18
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -7
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +1 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -7
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +3 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +296 -314
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +6 -6
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +57 -64
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +6 -5
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +1 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +10 -10
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +6 -3
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +12 -31
- package/deps/rocksdb/rocksdb/util/autovector.h +3 -6
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +12 -12
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +8 -12
- package/deps/rocksdb/rocksdb/util/coding.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding.h +17 -15
- package/deps/rocksdb/rocksdb/util/coding_test.cc +14 -15
- package/deps/rocksdb/rocksdb/util/comparator.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +6 -3
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +5 -8
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +202 -297
- package/deps/rocksdb/rocksdb/util/crc32c.h +2 -3
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +2 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +39 -54
- package/deps/rocksdb/rocksdb/util/defer.h +2 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +2 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +24 -29
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +4 -4
- package/deps/rocksdb/rocksdb/util/hash_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/heap.h +5 -4
- package/deps/rocksdb/rocksdb/util/heap_test.cc +15 -25
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.cc +7 -2
- package/deps/rocksdb/rocksdb/util/murmurhash.h +4 -3
- package/deps/rocksdb/rocksdb/util/mutexlock.h +5 -11
- package/deps/rocksdb/rocksdb/util/random.cc +1 -0
- package/deps/rocksdb/rocksdb/util/random.h +2 -4
- package/deps/rocksdb/rocksdb/util/random_test.cc +2 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +4 -3
- package/deps/rocksdb/rocksdb/util/slice.cc +1 -1
- package/deps/rocksdb/rocksdb/util/slice_test.cc +1 -2
- package/deps/rocksdb/rocksdb/util/status.cc +2 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +64 -76
- package/deps/rocksdb/rocksdb/util/thread_local.cc +18 -32
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -3
- package/deps/rocksdb/rocksdb/util/thread_operation.h +34 -43
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +54 -73
- package/deps/rocksdb/rocksdb/util/threadpool_imp.h +18 -18
- package/deps/rocksdb/rocksdb/util/timer.h +4 -9
- package/deps/rocksdb/rocksdb/util/timer_queue.h +1 -0
- package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +1 -2
- package/deps/rocksdb/rocksdb/util/xxhash.h +7 -4
- package/deps/rocksdb/rocksdb/util/xxph3.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +16 -24
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +106 -104
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +11 -15
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +12 -12
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +56 -55
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +91 -74
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +17 -34
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +21 -45
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +74 -97
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +17 -18
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +19 -19
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +19 -18
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +7 -10
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +10 -15
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -13
- package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +7 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +2 -4
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +39 -50
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +5 -7
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +5 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +3 -6
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +18 -13
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +1 -3
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +15 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +14 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +5 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +2 -6
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +80 -79
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +9 -17
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -155,9 +155,8 @@ class CompactionJobStatsTest : public testing::Test,
|
|
|
155
155
|
ASSERT_OK(TryReopenWithColumnFamilies(cfs, options));
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
Status TryReopenWithColumnFamilies(
|
|
159
|
-
|
|
160
|
-
const std::vector<Options>& options) {
|
|
158
|
+
Status TryReopenWithColumnFamilies(const std::vector<std::string>& cfs,
|
|
159
|
+
const std::vector<Options>& options) {
|
|
161
160
|
Close();
|
|
162
161
|
EXPECT_EQ(cfs.size(), options.size());
|
|
163
162
|
std::vector<ColumnFamilyDescriptor> column_families;
|
|
@@ -175,9 +174,7 @@ class CompactionJobStatsTest : public testing::Test,
|
|
|
175
174
|
return TryReopenWithColumnFamilies(cfs, v_opts);
|
|
176
175
|
}
|
|
177
176
|
|
|
178
|
-
void Reopen(const Options& options) {
|
|
179
|
-
ASSERT_OK(TryReopen(options));
|
|
180
|
-
}
|
|
177
|
+
void Reopen(const Options& options) { ASSERT_OK(TryReopen(options)); }
|
|
181
178
|
|
|
182
179
|
void Close() {
|
|
183
180
|
for (auto h : handles_) {
|
|
@@ -226,9 +223,7 @@ class CompactionJobStatsTest : public testing::Test,
|
|
|
226
223
|
return db_->Put(wo, handles_[cf], k, v);
|
|
227
224
|
}
|
|
228
225
|
|
|
229
|
-
Status Delete(const std::string& k) {
|
|
230
|
-
return db_->Delete(WriteOptions(), k);
|
|
231
|
-
}
|
|
226
|
+
Status Delete(const std::string& k) { return db_->Delete(WriteOptions(), k); }
|
|
232
227
|
|
|
233
228
|
Status Delete(int cf, const std::string& k) {
|
|
234
229
|
return db_->Delete(WriteOptions(), handles_[cf], k);
|
|
@@ -338,21 +333,21 @@ class CompactionJobStatsTest : public testing::Test,
|
|
|
338
333
|
}
|
|
339
334
|
}
|
|
340
335
|
|
|
341
|
-
static void SetDeletionCompactionStats(
|
|
342
|
-
|
|
343
|
-
|
|
336
|
+
static void SetDeletionCompactionStats(CompactionJobStats* stats,
|
|
337
|
+
uint64_t input_deletions,
|
|
338
|
+
uint64_t expired_deletions,
|
|
339
|
+
uint64_t records_replaced) {
|
|
344
340
|
stats->num_input_deletion_records = input_deletions;
|
|
345
341
|
stats->num_expired_deletion_records = expired_deletions;
|
|
346
342
|
stats->num_records_replaced = records_replaced;
|
|
347
343
|
}
|
|
348
344
|
|
|
349
|
-
void MakeTableWithKeyValues(
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
double ratio, int cf = 0) {
|
|
345
|
+
void MakeTableWithKeyValues(Random* rnd, uint64_t smallest, uint64_t largest,
|
|
346
|
+
int key_size, int value_size, uint64_t interval,
|
|
347
|
+
double ratio, int cf = 0) {
|
|
353
348
|
for (auto key = smallest; key < largest; key += interval) {
|
|
354
349
|
ASSERT_OK(Put(cf, Slice(Key(key, key_size)),
|
|
355
|
-
|
|
350
|
+
Slice(RandomString(rnd, value_size, ratio))));
|
|
356
351
|
}
|
|
357
352
|
ASSERT_OK(Flush(cf));
|
|
358
353
|
}
|
|
@@ -361,9 +356,9 @@ class CompactionJobStatsTest : public testing::Test,
|
|
|
361
356
|
// rounds of keys are inserted into the database, as per the behavior
|
|
362
357
|
// of the DeletionStatsTest.
|
|
363
358
|
void SelectivelyDeleteKeys(uint64_t smallest, uint64_t largest,
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
359
|
+
uint64_t interval, int deletion_interval,
|
|
360
|
+
int key_size, uint64_t cutoff_key_num,
|
|
361
|
+
CompactionJobStats* stats, int cf = 0) {
|
|
367
362
|
// interval needs to be >= 2 so that deletion entries can be inserted
|
|
368
363
|
// that are intended to not result in an actual key deletion by using
|
|
369
364
|
// an offset of 1 from another existing key
|
|
@@ -387,20 +382,19 @@ class CompactionJobStatsTest : public testing::Test,
|
|
|
387
382
|
|
|
388
383
|
// Insert some deletions for keys that don't exist that
|
|
389
384
|
// are both in and out of the key range
|
|
390
|
-
ASSERT_OK(Delete(cf, Key(smallest+1, key_size)));
|
|
385
|
+
ASSERT_OK(Delete(cf, Key(smallest + 1, key_size)));
|
|
391
386
|
deletions_made++;
|
|
392
387
|
|
|
393
|
-
ASSERT_OK(Delete(cf, Key(smallest-1, key_size)));
|
|
388
|
+
ASSERT_OK(Delete(cf, Key(smallest - 1, key_size)));
|
|
394
389
|
deletions_made++;
|
|
395
390
|
num_expired++;
|
|
396
391
|
|
|
397
|
-
ASSERT_OK(Delete(cf, Key(smallest-9, key_size)));
|
|
392
|
+
ASSERT_OK(Delete(cf, Key(smallest - 9, key_size)));
|
|
398
393
|
deletions_made++;
|
|
399
394
|
num_expired++;
|
|
400
395
|
|
|
401
396
|
ASSERT_OK(Flush(cf));
|
|
402
|
-
SetDeletionCompactionStats(stats, deletions_made, num_expired,
|
|
403
|
-
num_deleted);
|
|
397
|
+
SetDeletionCompactionStats(stats, deletions_made, num_expired, num_deleted);
|
|
404
398
|
}
|
|
405
399
|
};
|
|
406
400
|
|
|
@@ -440,25 +434,20 @@ class CompactionJobStatsChecker : public EventListener {
|
|
|
440
434
|
// use ASSERT_GE and ASSERT_LE with a reasonable bias ---
|
|
441
435
|
// 10% in uncompressed case and 20% when compression is used.
|
|
442
436
|
virtual void Verify(const CompactionJobStats& current_stats,
|
|
443
|
-
|
|
437
|
+
const CompactionJobStats& stats) {
|
|
444
438
|
// time
|
|
445
439
|
ASSERT_GT(current_stats.elapsed_micros, 0U);
|
|
446
440
|
|
|
447
|
-
ASSERT_EQ(current_stats.num_input_records,
|
|
448
|
-
|
|
449
|
-
ASSERT_EQ(current_stats.num_input_files,
|
|
450
|
-
stats.num_input_files);
|
|
441
|
+
ASSERT_EQ(current_stats.num_input_records, stats.num_input_records);
|
|
442
|
+
ASSERT_EQ(current_stats.num_input_files, stats.num_input_files);
|
|
451
443
|
ASSERT_EQ(current_stats.num_input_files_at_output_level,
|
|
452
|
-
|
|
444
|
+
stats.num_input_files_at_output_level);
|
|
453
445
|
|
|
454
|
-
ASSERT_EQ(current_stats.num_output_records,
|
|
455
|
-
|
|
456
|
-
ASSERT_EQ(current_stats.num_output_files,
|
|
457
|
-
stats.num_output_files);
|
|
446
|
+
ASSERT_EQ(current_stats.num_output_records, stats.num_output_records);
|
|
447
|
+
ASSERT_EQ(current_stats.num_output_files, stats.num_output_files);
|
|
458
448
|
|
|
459
449
|
ASSERT_EQ(current_stats.is_full_compaction, stats.is_full_compaction);
|
|
460
|
-
ASSERT_EQ(current_stats.is_manual_compaction,
|
|
461
|
-
stats.is_manual_compaction);
|
|
450
|
+
ASSERT_EQ(current_stats.is_manual_compaction, stats.is_manual_compaction);
|
|
462
451
|
|
|
463
452
|
// file size
|
|
464
453
|
double kFileSizeBias = compression_enabled_ ? 0.20 : 0.10;
|
|
@@ -475,18 +464,14 @@ class CompactionJobStatsChecker : public EventListener {
|
|
|
475
464
|
ASSERT_EQ(current_stats.total_input_raw_value_bytes,
|
|
476
465
|
stats.total_input_raw_value_bytes);
|
|
477
466
|
|
|
478
|
-
ASSERT_EQ(current_stats.num_records_replaced,
|
|
479
|
-
stats.num_records_replaced);
|
|
467
|
+
ASSERT_EQ(current_stats.num_records_replaced, stats.num_records_replaced);
|
|
480
468
|
|
|
481
|
-
ASSERT_EQ(current_stats.num_corrupt_keys,
|
|
482
|
-
stats.num_corrupt_keys);
|
|
469
|
+
ASSERT_EQ(current_stats.num_corrupt_keys, stats.num_corrupt_keys);
|
|
483
470
|
|
|
484
|
-
ASSERT_EQ(
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
std::string(current_stats.largest_output_key_prefix),
|
|
489
|
-
std::string(stats.largest_output_key_prefix));
|
|
471
|
+
ASSERT_EQ(std::string(current_stats.smallest_output_key_prefix),
|
|
472
|
+
std::string(stats.smallest_output_key_prefix));
|
|
473
|
+
ASSERT_EQ(std::string(current_stats.largest_output_key_prefix),
|
|
474
|
+
std::string(stats.largest_output_key_prefix));
|
|
490
475
|
}
|
|
491
476
|
|
|
492
477
|
// Add an expected compaction stats, which will be used to
|
|
@@ -497,9 +482,7 @@ class CompactionJobStatsChecker : public EventListener {
|
|
|
497
482
|
expected_stats_.push(stats);
|
|
498
483
|
}
|
|
499
484
|
|
|
500
|
-
void EnableCompression(bool flag) {
|
|
501
|
-
compression_enabled_ = flag;
|
|
502
|
-
}
|
|
485
|
+
void EnableCompression(bool flag) { compression_enabled_ = flag; }
|
|
503
486
|
|
|
504
487
|
bool verify_next_comp_io_stats() const { return verify_next_comp_io_stats_; }
|
|
505
488
|
|
|
@@ -517,45 +500,37 @@ class CompactionJobDeletionStatsChecker : public CompactionJobStatsChecker {
|
|
|
517
500
|
// Verifies whether two CompactionJobStats match.
|
|
518
501
|
void Verify(const CompactionJobStats& current_stats,
|
|
519
502
|
const CompactionJobStats& stats) override {
|
|
520
|
-
ASSERT_EQ(
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
ASSERT_EQ(
|
|
527
|
-
current_stats.num_records_replaced,
|
|
528
|
-
stats.num_records_replaced);
|
|
529
|
-
|
|
530
|
-
ASSERT_EQ(current_stats.num_corrupt_keys,
|
|
531
|
-
stats.num_corrupt_keys);
|
|
503
|
+
ASSERT_EQ(current_stats.num_input_deletion_records,
|
|
504
|
+
stats.num_input_deletion_records);
|
|
505
|
+
ASSERT_EQ(current_stats.num_expired_deletion_records,
|
|
506
|
+
stats.num_expired_deletion_records);
|
|
507
|
+
ASSERT_EQ(current_stats.num_records_replaced, stats.num_records_replaced);
|
|
508
|
+
|
|
509
|
+
ASSERT_EQ(current_stats.num_corrupt_keys, stats.num_corrupt_keys);
|
|
532
510
|
}
|
|
533
511
|
};
|
|
534
512
|
|
|
535
513
|
namespace {
|
|
536
514
|
|
|
537
|
-
uint64_t EstimatedFileSize(
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
int bloom_bits_per_key = 10) {
|
|
515
|
+
uint64_t EstimatedFileSize(uint64_t num_records, size_t key_size,
|
|
516
|
+
size_t value_size, double compression_ratio = 1.0,
|
|
517
|
+
size_t block_size = 4096,
|
|
518
|
+
int bloom_bits_per_key = 10) {
|
|
542
519
|
const size_t kPerKeyOverhead = 8;
|
|
543
520
|
const size_t kFooterSize = 512;
|
|
544
521
|
|
|
545
|
-
uint64_t data_size =
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
kPerKeyOverhead));
|
|
522
|
+
uint64_t data_size = static_cast<uint64_t>(
|
|
523
|
+
num_records *
|
|
524
|
+
(key_size + value_size * compression_ratio + kPerKeyOverhead));
|
|
549
525
|
|
|
550
|
-
return data_size + kFooterSize
|
|
551
|
-
|
|
526
|
+
return data_size + kFooterSize +
|
|
527
|
+
num_records * bloom_bits_per_key / 8 // filter block
|
|
552
528
|
+ data_size * (key_size + 8) / block_size; // index block
|
|
553
529
|
}
|
|
554
530
|
|
|
555
531
|
namespace {
|
|
556
532
|
|
|
557
|
-
void CopyPrefix(
|
|
558
|
-
const Slice& src, size_t prefix_length, std::string* dst) {
|
|
533
|
+
void CopyPrefix(const Slice& src, size_t prefix_length, std::string* dst) {
|
|
559
534
|
assert(prefix_length > 0);
|
|
560
535
|
size_t length = src.size() > prefix_length ? prefix_length : src.size();
|
|
561
536
|
dst->assign(src.data(), length);
|
|
@@ -581,28 +556,24 @@ CompactionJobStats NewManualCompactionJobStats(
|
|
|
581
556
|
stats.num_output_files = num_output_files;
|
|
582
557
|
|
|
583
558
|
stats.total_input_bytes =
|
|
584
|
-
EstimatedFileSize(
|
|
585
|
-
|
|
586
|
-
|
|
559
|
+
EstimatedFileSize(num_input_records / num_input_files, key_size,
|
|
560
|
+
value_size, compression_ratio) *
|
|
561
|
+
num_input_files;
|
|
587
562
|
stats.total_output_bytes =
|
|
588
|
-
EstimatedFileSize(
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
stats.total_input_raw_key_bytes =
|
|
592
|
-
|
|
593
|
-
stats.total_input_raw_value_bytes =
|
|
594
|
-
num_input_records * value_size;
|
|
563
|
+
EstimatedFileSize(num_output_records / num_output_files, key_size,
|
|
564
|
+
value_size, compression_ratio) *
|
|
565
|
+
num_output_files;
|
|
566
|
+
stats.total_input_raw_key_bytes = num_input_records * (key_size + 8);
|
|
567
|
+
stats.total_input_raw_value_bytes = num_input_records * value_size;
|
|
595
568
|
|
|
596
569
|
stats.is_full_compaction = is_full;
|
|
597
570
|
stats.is_manual_compaction = is_manual;
|
|
598
571
|
|
|
599
572
|
stats.num_records_replaced = num_records_replaced;
|
|
600
573
|
|
|
601
|
-
CopyPrefix(smallest_key,
|
|
602
|
-
CompactionJobStats::kMaxPrefixLength,
|
|
574
|
+
CopyPrefix(smallest_key, CompactionJobStats::kMaxPrefixLength,
|
|
603
575
|
&stats.smallest_output_key_prefix);
|
|
604
|
-
CopyPrefix(largest_key,
|
|
605
|
-
CompactionJobStats::kMaxPrefixLength,
|
|
576
|
+
CopyPrefix(largest_key, CompactionJobStats::kMaxPrefixLength,
|
|
606
577
|
&stats.largest_output_key_prefix);
|
|
607
578
|
|
|
608
579
|
return stats;
|
|
@@ -662,13 +633,11 @@ TEST_P(CompactionJobStatsTest, CompactionJobStatsTest) {
|
|
|
662
633
|
|
|
663
634
|
// 1st Phase: generate "num_L0_files" L0 files.
|
|
664
635
|
int num_L0_files = 0;
|
|
665
|
-
for (uint64_t start_key = key_base;
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
kKeySize, kValueSize, key_interval,
|
|
671
|
-
compression_ratio, 1);
|
|
636
|
+
for (uint64_t start_key = key_base; start_key <= key_base * kTestScale;
|
|
637
|
+
start_key += key_base) {
|
|
638
|
+
MakeTableWithKeyValues(&rnd, start_key, start_key + key_base - 1,
|
|
639
|
+
kKeySize, kValueSize, key_interval,
|
|
640
|
+
compression_ratio, 1);
|
|
672
641
|
snprintf(buf, kBufSize, "%d", ++num_L0_files);
|
|
673
642
|
ASSERT_EQ(std::string(buf), FilesPerLevel(1));
|
|
674
643
|
}
|
|
@@ -684,13 +653,9 @@ TEST_P(CompactionJobStatsTest, CompactionJobStatsTest) {
|
|
|
684
653
|
start_key += key_base, count++) {
|
|
685
654
|
smallest_key = Key(start_key, 10);
|
|
686
655
|
largest_key = Key(start_key + key_base - key_interval, 10);
|
|
687
|
-
stats_checker->AddExpectedStats(
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
1, 0, num_keys_per_L0_file,
|
|
691
|
-
kKeySize, kValueSize,
|
|
692
|
-
1, num_keys_per_L0_file,
|
|
693
|
-
compression_ratio, 0));
|
|
656
|
+
stats_checker->AddExpectedStats(NewManualCompactionJobStats(
|
|
657
|
+
smallest_key, largest_key, 1, 0, num_keys_per_L0_file, kKeySize,
|
|
658
|
+
kValueSize, 1, num_keys_per_L0_file, compression_ratio, 0));
|
|
694
659
|
ASSERT_EQ(stats_checker->NumberOfUnverifiedStats(), 1U);
|
|
695
660
|
TEST_Compact(0, 1, smallest_key, largest_key);
|
|
696
661
|
snprintf(buf, kBufSize, "%d,%d", num_L0_files - count, count);
|
|
@@ -701,14 +666,10 @@ TEST_P(CompactionJobStatsTest, CompactionJobStatsTest) {
|
|
|
701
666
|
int num_remaining_L0 = num_L0_files - L0_compaction_count;
|
|
702
667
|
smallest_key = Key(key_base * (L0_compaction_count + 1), 10);
|
|
703
668
|
largest_key = Key(key_base * (kTestScale + 1) - key_interval, 10);
|
|
704
|
-
stats_checker->AddExpectedStats(
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
0, num_keys_per_L0_file * num_remaining_L0,
|
|
709
|
-
kKeySize, kValueSize,
|
|
710
|
-
1, num_keys_per_L0_file * num_remaining_L0,
|
|
711
|
-
compression_ratio, 0));
|
|
669
|
+
stats_checker->AddExpectedStats(NewManualCompactionJobStats(
|
|
670
|
+
smallest_key, largest_key, num_remaining_L0, 0,
|
|
671
|
+
num_keys_per_L0_file * num_remaining_L0, kKeySize, kValueSize, 1,
|
|
672
|
+
num_keys_per_L0_file * num_remaining_L0, compression_ratio, 0));
|
|
712
673
|
ASSERT_EQ(stats_checker->NumberOfUnverifiedStats(), 1U);
|
|
713
674
|
TEST_Compact(0, 1, smallest_key, largest_key);
|
|
714
675
|
|
|
@@ -719,13 +680,11 @@ TEST_P(CompactionJobStatsTest, CompactionJobStatsTest) {
|
|
|
719
680
|
|
|
720
681
|
// 3rd Phase: generate sparse L0 files (wider key-range, same num of keys)
|
|
721
682
|
int sparseness = 2;
|
|
722
|
-
for (uint64_t start_key = key_base;
|
|
723
|
-
|
|
724
|
-
start_key += key_base * sparseness) {
|
|
683
|
+
for (uint64_t start_key = key_base; start_key <= key_base * kTestScale;
|
|
684
|
+
start_key += key_base * sparseness) {
|
|
725
685
|
MakeTableWithKeyValues(
|
|
726
|
-
&rnd, start_key, start_key + key_base * sparseness - 1,
|
|
727
|
-
|
|
728
|
-
key_base * sparseness / num_keys_per_L0_file,
|
|
686
|
+
&rnd, start_key, start_key + key_base * sparseness - 1, kKeySize,
|
|
687
|
+
kValueSize, key_base * sparseness / num_keys_per_L0_file,
|
|
729
688
|
compression_ratio, 1);
|
|
730
689
|
snprintf(buf, kBufSize, "%d,%d", ++num_L0_files, num_L1_files);
|
|
731
690
|
ASSERT_EQ(std::string(buf), FilesPerLevel(1));
|
|
@@ -737,21 +696,15 @@ TEST_P(CompactionJobStatsTest, CompactionJobStatsTest) {
|
|
|
737
696
|
// output files without coordinating to see if the output could fit into
|
|
738
697
|
// a smaller number of files like it does when it runs sequentially
|
|
739
698
|
int num_output_files = options.max_subcompactions > 1 ? 2 : 1;
|
|
740
|
-
for (uint64_t start_key = key_base;
|
|
741
|
-
num_L0_files > 1;
|
|
699
|
+
for (uint64_t start_key = key_base; num_L0_files > 1;
|
|
742
700
|
start_key += key_base * sparseness) {
|
|
743
701
|
smallest_key = Key(start_key, 10);
|
|
744
|
-
largest_key =
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
kKeySize, kValueSize,
|
|
751
|
-
num_output_files,
|
|
752
|
-
num_keys_per_L0_file * 2, // 1/3 of the data will be updated.
|
|
753
|
-
compression_ratio,
|
|
754
|
-
num_keys_per_L0_file));
|
|
702
|
+
largest_key = Key(start_key + key_base * sparseness - key_interval, 10);
|
|
703
|
+
stats_checker->AddExpectedStats(NewManualCompactionJobStats(
|
|
704
|
+
smallest_key, largest_key, 3, 2, num_keys_per_L0_file * 3, kKeySize,
|
|
705
|
+
kValueSize, num_output_files,
|
|
706
|
+
num_keys_per_L0_file * 2, // 1/3 of the data will be updated.
|
|
707
|
+
compression_ratio, num_keys_per_L0_file));
|
|
755
708
|
ASSERT_EQ(stats_checker->NumberOfUnverifiedStats(), 1U);
|
|
756
709
|
Compact(1, smallest_key, largest_key);
|
|
757
710
|
if (options.max_subcompactions == 1) {
|
|
@@ -766,14 +719,10 @@ TEST_P(CompactionJobStatsTest, CompactionJobStatsTest) {
|
|
|
766
719
|
// In the first sub-compaction, we expect L0 compaction.
|
|
767
720
|
smallest_key = Key(key_base, 10);
|
|
768
721
|
largest_key = Key(key_base * (kTestScale + 1) - key_interval, 10);
|
|
769
|
-
stats_checker->AddExpectedStats(
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
kKeySize, kValueSize,
|
|
774
|
-
1, num_keys_per_L0_file * 2,
|
|
775
|
-
compression_ratio,
|
|
776
|
-
num_keys_per_L0_file));
|
|
722
|
+
stats_checker->AddExpectedStats(NewManualCompactionJobStats(
|
|
723
|
+
Key(key_base * (kTestScale + 1 - sparseness), 10), largest_key, 2, 1,
|
|
724
|
+
num_keys_per_L0_file * 3, kKeySize, kValueSize, 1,
|
|
725
|
+
num_keys_per_L0_file * 2, compression_ratio, num_keys_per_L0_file));
|
|
777
726
|
ASSERT_EQ(stats_checker->NumberOfUnverifiedStats(), 1U);
|
|
778
727
|
Compact(1, smallest_key, largest_key);
|
|
779
728
|
|
|
@@ -869,7 +818,7 @@ TEST_P(CompactionJobStatsTest, DeletionStatsTest) {
|
|
|
869
818
|
Options options;
|
|
870
819
|
options.listeners.emplace_back(stats_checker);
|
|
871
820
|
options.create_if_missing = true;
|
|
872
|
-
options.level0_file_num_compaction_trigger = kTestScale+1;
|
|
821
|
+
options.level0_file_num_compaction_trigger = kTestScale + 1;
|
|
873
822
|
options.num_levels = 3;
|
|
874
823
|
options.compression = kNoCompression;
|
|
875
824
|
options.max_bytes_for_level_multiplier = 2;
|
|
@@ -881,13 +830,10 @@ TEST_P(CompactionJobStatsTest, DeletionStatsTest) {
|
|
|
881
830
|
// Stage 1: Generate several L0 files and then send them to L2 by
|
|
882
831
|
// using CompactRangeOptions and CompactRange(). These files will
|
|
883
832
|
// have a strict subset of the keys from the full key-range
|
|
884
|
-
for (uint64_t start_key = key_base;
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
&rnd, start_key, start_key + key_base - 1,
|
|
889
|
-
kKeySize, kValueSize, key_interval,
|
|
890
|
-
compression_ratio, 1);
|
|
833
|
+
for (uint64_t start_key = key_base; start_key <= key_base * kTestScale / 2;
|
|
834
|
+
start_key += key_base) {
|
|
835
|
+
MakeTableWithKeyValues(&rnd, start_key, start_key + key_base - 1, kKeySize,
|
|
836
|
+
kValueSize, key_interval, compression_ratio, 1);
|
|
891
837
|
}
|
|
892
838
|
|
|
893
839
|
CompactRangeOptions cr_options;
|
|
@@ -897,13 +843,10 @@ TEST_P(CompactionJobStatsTest, DeletionStatsTest) {
|
|
|
897
843
|
ASSERT_GT(NumTableFilesAtLevel(2, 1), 0);
|
|
898
844
|
|
|
899
845
|
// Stage 2: Generate files including keys from the entire key range
|
|
900
|
-
for (uint64_t start_key = key_base;
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
&rnd, start_key, start_key + key_base - 1,
|
|
905
|
-
kKeySize, kValueSize, key_interval,
|
|
906
|
-
compression_ratio, 1);
|
|
846
|
+
for (uint64_t start_key = key_base; start_key <= key_base * kTestScale;
|
|
847
|
+
start_key += key_base) {
|
|
848
|
+
MakeTableWithKeyValues(&rnd, start_key, start_key + key_base - 1, kKeySize,
|
|
849
|
+
kValueSize, key_interval, compression_ratio, 1);
|
|
907
850
|
}
|
|
908
851
|
|
|
909
852
|
// Send these L0 files to L1
|
|
@@ -912,16 +855,16 @@ TEST_P(CompactionJobStatsTest, DeletionStatsTest) {
|
|
|
912
855
|
|
|
913
856
|
// Add a new record and flush so now there is a L0 file
|
|
914
857
|
// with a value too (not just deletions from the next step)
|
|
915
|
-
ASSERT_OK(Put(1, Key(key_base-6, kKeySize), "test"));
|
|
858
|
+
ASSERT_OK(Put(1, Key(key_base - 6, kKeySize), "test"));
|
|
916
859
|
ASSERT_OK(Flush(1));
|
|
917
860
|
|
|
918
861
|
// Stage 3: Generate L0 files with some deletions so now
|
|
919
862
|
// there are files with the same key range in L0, L1, and L2
|
|
920
863
|
int deletion_interval = 3;
|
|
921
864
|
CompactionJobStats first_compaction_stats;
|
|
922
|
-
SelectivelyDeleteKeys(key_base, largest_key_num,
|
|
923
|
-
|
|
924
|
-
|
|
865
|
+
SelectivelyDeleteKeys(key_base, largest_key_num, key_interval,
|
|
866
|
+
deletion_interval, kKeySize, cutoff_key_num,
|
|
867
|
+
&first_compaction_stats, 1);
|
|
925
868
|
|
|
926
869
|
stats_checker->AddExpectedStats(first_compaction_stats);
|
|
927
870
|
|
|
@@ -932,8 +875,7 @@ TEST_P(CompactionJobStatsTest, DeletionStatsTest) {
|
|
|
932
875
|
namespace {
|
|
933
876
|
int GetUniversalCompactionInputUnits(uint32_t num_flushes) {
|
|
934
877
|
uint32_t compaction_input_units;
|
|
935
|
-
for (compaction_input_units = 1;
|
|
936
|
-
num_flushes >= compaction_input_units;
|
|
878
|
+
for (compaction_input_units = 1; num_flushes >= compaction_input_units;
|
|
937
879
|
compaction_input_units *= 2) {
|
|
938
880
|
if ((num_flushes & compaction_input_units) != 0) {
|
|
939
881
|
return compaction_input_units > 1 ? compaction_input_units : 0;
|
|
@@ -998,13 +940,10 @@ TEST_P(CompactionJobStatsTest, UniversalCompactionTest) {
|
|
|
998
940
|
}
|
|
999
941
|
ASSERT_EQ(stats_checker->NumberOfUnverifiedStats(), 3U);
|
|
1000
942
|
|
|
1001
|
-
for (uint64_t start_key = key_base;
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
&rnd, start_key, start_key + key_base - 1,
|
|
1006
|
-
kKeySize, kValueSize, key_interval,
|
|
1007
|
-
compression_ratio, 1);
|
|
943
|
+
for (uint64_t start_key = key_base; start_key <= key_base * kTestScale;
|
|
944
|
+
start_key += key_base) {
|
|
945
|
+
MakeTableWithKeyValues(&rnd, start_key, start_key + key_base - 1, kKeySize,
|
|
946
|
+
kValueSize, key_interval, compression_ratio, 1);
|
|
1008
947
|
ASSERT_OK(static_cast_with_check<DBImpl>(db_)->TEST_WaitForCompact());
|
|
1009
948
|
}
|
|
1010
949
|
ASSERT_EQ(stats_checker->NumberOfUnverifiedStats(), 0U);
|
|
@@ -40,7 +40,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
40
40
|
namespace {
|
|
41
41
|
|
|
42
42
|
void VerifyInitializationOfCompactionJobStats(
|
|
43
|
-
|
|
43
|
+
const CompactionJobStats& compaction_job_stats) {
|
|
44
44
|
#if !defined(IOS_CROSS_COMPILE)
|
|
45
45
|
ASSERT_EQ(compaction_job_stats.elapsed_micros, 0U);
|
|
46
46
|
|
|
@@ -499,8 +499,7 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
499
499
|
|
|
500
500
|
// This is how the key will look like once it's written in bottommost
|
|
501
501
|
// file
|
|
502
|
-
InternalKey bottommost_internal_key(
|
|
503
|
-
key, 0, kTypeValue);
|
|
502
|
+
InternalKey bottommost_internal_key(key, 0, kTypeValue);
|
|
504
503
|
|
|
505
504
|
if (corrupt_id(k)) {
|
|
506
505
|
test::CorruptKeyType(&internal_key);
|
|
@@ -620,7 +619,7 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
620
619
|
CompactionInputFiles compaction_level;
|
|
621
620
|
compaction_level.level = input_levels[i];
|
|
622
621
|
compaction_level.files.insert(compaction_level.files.end(),
|
|
623
|
-
|
|
622
|
+
level_files.begin(), level_files.end());
|
|
624
623
|
compaction_input_files.push_back(compaction_level);
|
|
625
624
|
num_input_files += level_files.size();
|
|
626
625
|
}
|
|
@@ -32,7 +32,7 @@ bool FindIntraL0Compaction(const std::vector<FileMetaData*>& level_files,
|
|
|
32
32
|
uint64_t max_compact_bytes_per_del_file,
|
|
33
33
|
uint64_t max_compaction_bytes,
|
|
34
34
|
CompactionInputFiles* comp_inputs,
|
|
35
|
-
SequenceNumber earliest_mem_seqno) {
|
|
35
|
+
const SequenceNumber earliest_mem_seqno) {
|
|
36
36
|
// Do not pick ingested file when there is at least one memtable not flushed
|
|
37
37
|
// which of seqno is overlap with the sst.
|
|
38
38
|
TEST_SYNC_POINT("FindIntraL0Compaction");
|
|
@@ -294,13 +294,12 @@ bool CompactionPicker::RangeOverlapWithCompaction(
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
bool CompactionPicker::FilesRangeOverlapWithCompaction(
|
|
297
|
-
const std::vector<CompactionInputFiles>& inputs, int level
|
|
297
|
+
const std::vector<CompactionInputFiles>& inputs, int level,
|
|
298
|
+
int penultimate_level) const {
|
|
298
299
|
bool is_empty = true;
|
|
299
|
-
int start_level = -1;
|
|
300
300
|
for (auto& in : inputs) {
|
|
301
301
|
if (!in.empty()) {
|
|
302
302
|
is_empty = false;
|
|
303
|
-
start_level = in.level; // inputs are sorted by level
|
|
304
303
|
break;
|
|
305
304
|
}
|
|
306
305
|
}
|
|
@@ -309,10 +308,10 @@ bool CompactionPicker::FilesRangeOverlapWithCompaction(
|
|
|
309
308
|
return false;
|
|
310
309
|
}
|
|
311
310
|
|
|
311
|
+
// TODO: Intra L0 compactions can have the ranges overlapped, but the input
|
|
312
|
+
// files cannot be overlapped in the order of L0 files.
|
|
312
313
|
InternalKey smallest, largest;
|
|
313
314
|
GetRange(inputs, &smallest, &largest, Compaction::kInvalidLevel);
|
|
314
|
-
int penultimate_level =
|
|
315
|
-
Compaction::EvaluatePenultimateLevel(ioptions_, start_level, level);
|
|
316
315
|
if (penultimate_level != Compaction::kInvalidLevel) {
|
|
317
316
|
if (ioptions_.compaction_style == kCompactionStyleUniversal) {
|
|
318
317
|
if (RangeOverlapWithCompaction(smallest.user_key(), largest.user_key(),
|
|
@@ -350,11 +349,25 @@ Compaction* CompactionPicker::CompactFiles(
|
|
|
350
349
|
const std::vector<CompactionInputFiles>& input_files, int output_level,
|
|
351
350
|
VersionStorageInfo* vstorage, const MutableCFOptions& mutable_cf_options,
|
|
352
351
|
const MutableDBOptions& mutable_db_options, uint32_t output_path_id) {
|
|
352
|
+
#ifndef NDEBUG
|
|
353
353
|
assert(input_files.size());
|
|
354
354
|
// This compaction output should not overlap with a running compaction as
|
|
355
355
|
// `SanitizeCompactionInputFiles` should've checked earlier and db mutex
|
|
356
356
|
// shouldn't have been released since.
|
|
357
|
-
|
|
357
|
+
int start_level = Compaction::kInvalidLevel;
|
|
358
|
+
for (const auto& in : input_files) {
|
|
359
|
+
// input_files should already be sorted by level
|
|
360
|
+
if (!in.empty()) {
|
|
361
|
+
start_level = in.level;
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
assert(output_level == 0 ||
|
|
366
|
+
!FilesRangeOverlapWithCompaction(
|
|
367
|
+
input_files, output_level,
|
|
368
|
+
Compaction::EvaluatePenultimateLevel(vstorage, ioptions_,
|
|
369
|
+
start_level, output_level)));
|
|
370
|
+
#endif /* !NDEBUG */
|
|
358
371
|
|
|
359
372
|
CompressionType compression_type;
|
|
360
373
|
if (compact_options.compression == kDisableCompressionOption) {
|
|
@@ -600,7 +613,8 @@ Compaction* CompactionPicker::CompactRange(
|
|
|
600
613
|
int input_level, int output_level,
|
|
601
614
|
const CompactRangeOptions& compact_range_options, const InternalKey* begin,
|
|
602
615
|
const InternalKey* end, InternalKey** compaction_end, bool* manual_conflict,
|
|
603
|
-
uint64_t max_file_num_to_ignore, const std::string& trim_ts
|
|
616
|
+
uint64_t max_file_num_to_ignore, const std::string& trim_ts,
|
|
617
|
+
const SequenceNumber /*earliest_mem_seqno*/) {
|
|
604
618
|
// CompactionPickerFIFO has its own implementation of compact range
|
|
605
619
|
assert(ioptions_.compaction_style != kCompactionStyleFIFO);
|
|
606
620
|
|
|
@@ -652,7 +666,10 @@ Compaction* CompactionPicker::CompactRange(
|
|
|
652
666
|
|
|
653
667
|
// 2 non-exclusive manual compactions could run at the same time producing
|
|
654
668
|
// overlaping outputs in the same level.
|
|
655
|
-
if (FilesRangeOverlapWithCompaction(
|
|
669
|
+
if (FilesRangeOverlapWithCompaction(
|
|
670
|
+
inputs, output_level,
|
|
671
|
+
Compaction::EvaluatePenultimateLevel(vstorage, ioptions_,
|
|
672
|
+
start_level, output_level))) {
|
|
656
673
|
// This compaction output could potentially conflict with the output
|
|
657
674
|
// of a currently running compaction, we cannot run it.
|
|
658
675
|
*manual_conflict = true;
|
|
@@ -831,7 +848,10 @@ Compaction* CompactionPicker::CompactRange(
|
|
|
831
848
|
|
|
832
849
|
// 2 non-exclusive manual compactions could run at the same time producing
|
|
833
850
|
// overlaping outputs in the same level.
|
|
834
|
-
if (FilesRangeOverlapWithCompaction(
|
|
851
|
+
if (FilesRangeOverlapWithCompaction(
|
|
852
|
+
compaction_inputs, output_level,
|
|
853
|
+
Compaction::EvaluatePenultimateLevel(vstorage, ioptions_, input_level,
|
|
854
|
+
output_level))) {
|
|
835
855
|
// This compaction output could potentially conflict with the output
|
|
836
856
|
// of a currently running compaction, we cannot run it.
|
|
837
857
|
*manual_conflict = true;
|
|
@@ -899,7 +919,8 @@ bool HaveOverlappingKeyRanges(const Comparator* c, const SstFileMetaData& a,
|
|
|
899
919
|
|
|
900
920
|
Status CompactionPicker::SanitizeCompactionInputFilesForAllLevels(
|
|
901
921
|
std::unordered_set<uint64_t>* input_files,
|
|
902
|
-
const ColumnFamilyMetaData& cf_meta, const int output_level
|
|
922
|
+
const ColumnFamilyMetaData& cf_meta, const int output_level,
|
|
923
|
+
const SequenceNumber earliest_mem_seqno) const {
|
|
903
924
|
auto& levels = cf_meta.levels;
|
|
904
925
|
auto comparator = icmp_->user_comparator();
|
|
905
926
|
|
|
@@ -976,6 +997,13 @@ Status CompactionPicker::SanitizeCompactionInputFilesForAllLevels(
|
|
|
976
997
|
current_files[f].name +
|
|
977
998
|
" is currently being compacted.");
|
|
978
999
|
}
|
|
1000
|
+
if (output_level == 0 &&
|
|
1001
|
+
current_files[f].largest_seqno > earliest_mem_seqno) {
|
|
1002
|
+
return Status::Aborted(
|
|
1003
|
+
"Necessary compaction input file " + current_files[f].name +
|
|
1004
|
+
" has overlapping seqnos with earliest memtable seqnos.");
|
|
1005
|
+
}
|
|
1006
|
+
|
|
979
1007
|
input_files->insert(TableFileNameToNumber(current_files[f].name));
|
|
980
1008
|
}
|
|
981
1009
|
|
|
@@ -1032,12 +1060,14 @@ Status CompactionPicker::SanitizeCompactionInputFilesForAllLevels(
|
|
|
1032
1060
|
"A running compaction is writing to the same output level in an "
|
|
1033
1061
|
"overlapping key range");
|
|
1034
1062
|
}
|
|
1063
|
+
|
|
1035
1064
|
return Status::OK();
|
|
1036
1065
|
}
|
|
1037
1066
|
|
|
1038
1067
|
Status CompactionPicker::SanitizeCompactionInputFiles(
|
|
1039
1068
|
std::unordered_set<uint64_t>* input_files,
|
|
1040
|
-
const ColumnFamilyMetaData& cf_meta, const int output_level
|
|
1069
|
+
const ColumnFamilyMetaData& cf_meta, const int output_level,
|
|
1070
|
+
const SequenceNumber earliest_mem_seqno) const {
|
|
1041
1071
|
assert(static_cast<int>(cf_meta.levels.size()) - 1 ==
|
|
1042
1072
|
cf_meta.levels[cf_meta.levels.size() - 1].level);
|
|
1043
1073
|
if (output_level >= static_cast<int>(cf_meta.levels.size())) {
|
|
@@ -1063,8 +1093,8 @@ Status CompactionPicker::SanitizeCompactionInputFiles(
|
|
|
1063
1093
|
"A compaction must contain at least one file.");
|
|
1064
1094
|
}
|
|
1065
1095
|
|
|
1066
|
-
Status s = SanitizeCompactionInputFilesForAllLevels(
|
|
1067
|
-
|
|
1096
|
+
Status s = SanitizeCompactionInputFilesForAllLevels(
|
|
1097
|
+
input_files, cf_meta, output_level, earliest_mem_seqno);
|
|
1068
1098
|
|
|
1069
1099
|
if (!s.ok()) {
|
|
1070
1100
|
return s;
|
|
@@ -1116,7 +1146,8 @@ void CompactionPicker::RegisterCompaction(Compaction* c) {
|
|
|
1116
1146
|
}
|
|
1117
1147
|
assert(ioptions_.compaction_style != kCompactionStyleLevel ||
|
|
1118
1148
|
c->output_level() == 0 ||
|
|
1119
|
-
!FilesRangeOverlapWithCompaction(*c->inputs(), c->output_level()
|
|
1149
|
+
!FilesRangeOverlapWithCompaction(*c->inputs(), c->output_level(),
|
|
1150
|
+
c->GetPenultimateLevel()));
|
|
1120
1151
|
if (c->start_level() == 0 ||
|
|
1121
1152
|
ioptions_.compaction_style == kCompactionStyleUniversal) {
|
|
1122
1153
|
level0_compactions_in_progress_.insert(c);
|