diff --git a/compaction_strategy.hh b/compaction_strategy.hh index 26b0b0bbc8..e35a7508cb 100644 --- a/compaction_strategy.hh +++ b/compaction_strategy.hh @@ -22,6 +22,8 @@ #pragma once class column_family; +class schema; +using schema_ptr = lw_shared_ptr; namespace sstables { @@ -35,6 +37,7 @@ enum class compaction_strategy_type { class compaction_strategy_impl; class sstable; +class sstable_set; struct compaction_descriptor; class compaction_strategy { @@ -90,6 +93,8 @@ public: sstring name() const { return name(type()); } + + sstable_set make_sstable_set(schema_ptr schema) const; }; // Creates a compaction_strategy object from one of the strategies available. diff --git a/sstables/compaction_strategy.cc b/sstables/compaction_strategy.cc index 444babe86e..90b8b43106 100644 --- a/sstables/compaction_strategy.cc +++ b/sstables/compaction_strategy.cc @@ -214,6 +214,9 @@ public: virtual bool parallel_compaction() const { return true; } + virtual std::unique_ptr make_sstable_set(schema_ptr schema) const { + return std::make_unique(); + } }; // @@ -567,6 +570,9 @@ public: virtual compaction_strategy_type type() const { return compaction_strategy_type::leveled; } + virtual std::unique_ptr make_sstable_set(schema_ptr schema) const override { + return std::make_unique(std::move(schema)); + } }; compaction_descriptor leveled_compaction_strategy::get_sstables_for_compaction(column_family& cfs, std::vector candidates) { @@ -605,6 +611,13 @@ bool compaction_strategy::parallel_compaction() const { return _compaction_strategy_impl->parallel_compaction(); } +sstable_set +compaction_strategy::make_sstable_set(schema_ptr schema) const { + return sstable_set( + _compaction_strategy_impl->make_sstable_set(std::move(schema)), + make_lw_shared()); +} + compaction_strategy make_compaction_strategy(compaction_strategy_type strategy, const std::map& options) { ::shared_ptr impl;