config_t config,
SegmentManagerGroupRef&& sm_group,
BackrefManager &backref_manager,
+ SegmentSeqAllocator &segment_seq_allocator,
bool detailed)
: detailed(detailed),
config(config),
sm_group(std::move(sm_group)),
backref_manager(backref_manager),
- ool_segment_seq_allocator(
- new SegmentSeqAllocator(segment_type_t::OOL))
+ ool_segment_seq_allocator(segment_seq_allocator)
{
config.validate();
}
config_t config,
SegmentManagerGroupRef&& sm_group,
BackrefManager &backref_manager,
+ SegmentSeqAllocator &segment_seq_allocator,
bool detailed);
- SegmentSeqAllocator& get_ool_segment_seq_allocator() {
- return *ool_segment_seq_allocator;
- }
-
void set_journal_trimmer(JournalTrimmer &_trimmer) {
trimmer = &_trimmer;
}
config_t config,
SegmentManagerGroupRef&& sm_group,
BackrefManager &backref_manager,
+ SegmentSeqAllocator &ool_seq_allocator,
bool detailed) {
return std::make_unique<SegmentCleaner>(
- config, std::move(sm_group), backref_manager, detailed);
+ config, std::move(sm_group), backref_manager, ool_seq_allocator, detailed);
}
/*
auto new_usage = calc_utilization(segment);
adjust_segment_util(old_usage, new_usage);
if (s_type == segment_type_t::OOL) {
- ool_segment_seq_allocator->set_next_segment_seq(seq);
+ ool_segment_seq_allocator.set_next_segment_seq(seq);
}
}
BackgroundListener *background_callback = nullptr;
// TODO: drop once paddr->journal_seq_t is introduced
- SegmentSeqAllocatorRef ool_segment_seq_allocator;
+ SegmentSeqAllocator &ool_segment_seq_allocator;
};
class RBMCleaner;
for (rewrite_gen_t gen = OOL_GENERATION; gen < REWRITE_GENERATIONS; ++gen) {
writer_refs.emplace_back(std::make_unique<SegmentedOolWriter>(
data_category_t::DATA, gen, *segment_cleaner,
- segment_cleaner->get_ool_segment_seq_allocator()));
+ *ool_segment_seq_allocator));
data_writers_by_gen[generation_to_writer(gen)] = writer_refs.back().get();
}
for (rewrite_gen_t gen = OOL_GENERATION; gen < REWRITE_GENERATIONS; ++gen) {
writer_refs.emplace_back(std::make_unique<SegmentedOolWriter>(
data_category_t::METADATA, gen, *segment_cleaner,
- segment_cleaner->get_ool_segment_seq_allocator()));
+ *ool_segment_seq_allocator));
md_writers_by_gen[generation_to_writer(gen)] = writer_refs.back().get();
}
class ExtentPlacementManager {
public:
- ExtentPlacementManager() {
+ ExtentPlacementManager()
+ : ool_segment_seq_allocator(
+ std::make_unique<SegmentSeqAllocator>(segment_type_t::OOL))
+ {
devices_by_id.resize(DEVICE_ID_MAX, nullptr);
}
void init(JournalTrimmerImplRef &&, AsyncCleanerRef &&);
+ SegmentSeqAllocator &get_ool_segment_seq_allocator() const {
+ return *ool_segment_seq_allocator;
+ }
+
void set_primary_device(Device *device);
void set_extent_callback(ExtentCallbackInterface *cb) {
std::size_t num_devices = 0;
BackgroundProcess background_process;
+ // TODO: drop once paddr->journal_seq_t is introduced
+ SegmentSeqAllocatorRef ool_segment_seq_allocator;
};
using ExtentPlacementManagerRef = std::unique_ptr<ExtentPlacementManager>;
cleaner_config,
std::move(sms),
*backref_manager,
+ epm->get_ool_segment_seq_allocator(),
cleaner_is_detailed);
auto segment_cleaner = static_cast<SegmentCleaner*>(cleaner.get());
cache->set_segment_provider(*segment_cleaner);