/* * Copyright (C) 2017-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include #include #include #include #include "compaction_strategy_type.hh" #include "size_tiered_compaction_strategy.hh" #include "compaction_strategy_impl.hh" #include "compaction_backlog_manager.hh" #include "sstables/shared_sstable.hh" namespace sstables { class sstable_set_impl; } namespace compaction { class leveled_manifest; struct leveled_compaction_strategy_state { std::optional>> last_compacted_keys; std::vector compaction_counter; leveled_compaction_strategy_state(); }; using leveled_compaction_strategy_state_ptr = seastar::shared_ptr; class leveled_compaction_strategy : public compaction_strategy_impl { static constexpr int32_t DEFAULT_MAX_SSTABLE_SIZE_IN_MB = 160; static constexpr auto SSTABLE_SIZE_OPTION = "sstable_size_in_mb"; int32_t _max_sstable_size_in_mb = DEFAULT_MAX_SSTABLE_SIZE_IN_MB; size_tiered_compaction_strategy_options _stcs_options; private: int32_t calculate_max_sstable_size_in_mb(std::optional option_value) const; leveled_compaction_strategy_state_ptr get_state(compaction_group_view& table_s) const; public: static unsigned ideal_level_for_input(const std::vector& input, uint64_t max_sstable_size); static void validate_options(const std::map& options, std::map& unchecked_options); leveled_compaction_strategy(const std::map& options); virtual future get_sstables_for_compaction(compaction_group_view& table_s, strategy_control& control) override; virtual std::vector get_cleanup_compaction_jobs(compaction_group_view& table_s, std::vector candidates) const override; virtual compaction_descriptor get_major_compaction_job(compaction_group_view& table_s, std::vector candidates) override; virtual void notify_completion(compaction_group_view& table_s, const std::vector& removed, const std::vector& added) override; // for each level > 0, get newest sstable and use its last key as last // compacted key for the previous level. void generate_last_compacted_keys(leveled_compaction_strategy_state&, leveled_manifest& manifest); virtual future estimated_pending_compactions(compaction_group_view& table_s) const override; virtual bool parallel_compaction() const override { return false; } virtual compaction_strategy_type type() const override { return compaction_strategy_type::leveled; } virtual std::unique_ptr make_sstable_set(const compaction_group_view& ts) const override; virtual std::unique_ptr make_backlog_tracker() const override; virtual compaction_descriptor get_reshaping_job(std::vector input, schema_ptr schema, reshape_config cfg) const override; }; }