From c8237fc262b2fa30a6b6e7ca1869c4a1cd4c0a8b Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Thu, 30 Jun 2016 14:45:09 +0300 Subject: [PATCH] compaction_strategy: introduce make_sstable_set() Allow compaction_strategy to create a container for sstables that is optimized for the strategy. Most compaction_strategies return bag_sstable_set; leveled compaction returns the specialized partitioned_sstable_set. --- compaction_strategy.hh | 5 +++++ sstables/compaction_strategy.cc | 13 +++++++++++++ 2 files changed, 18 insertions(+) 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;