JournalTrimmerImpl::config_t
JournalTrimmerImpl::config_t::get_default(
- std::size_t roll_size, journal_type_t type)
+ std::size_t roll_size, backend_type_t type)
{
assert(roll_size);
std::size_t target_dirty_bytes = 0;
std::size_t target_alloc_bytes = 0;
std::size_t max_journal_bytes = 0;
- if (type == journal_type_t::SEGMENTED) {
+ if (type == backend_type_t::SEGMENTED) {
target_dirty_bytes = 12 * roll_size;
target_alloc_bytes = 2 * roll_size;
max_journal_bytes = 16 * roll_size;
} else {
- assert(type == journal_type_t::RANDOM_BLOCK);
+ assert(type == backend_type_t::RANDOM_BLOCK);
target_dirty_bytes = roll_size / 4;
target_alloc_bytes = roll_size / 4;
max_journal_bytes = roll_size / 2;
JournalTrimmerImpl::config_t
JournalTrimmerImpl::config_t::get_test(
- std::size_t roll_size, journal_type_t type)
+ std::size_t roll_size, backend_type_t type)
{
assert(roll_size);
std::size_t target_dirty_bytes = 0;
std::size_t target_alloc_bytes = 0;
std::size_t max_journal_bytes = 0;
- if (type == journal_type_t::SEGMENTED) {
+ if (type == backend_type_t::SEGMENTED) {
target_dirty_bytes = 2 * roll_size;
target_alloc_bytes = 2 * roll_size;
max_journal_bytes = 4 * roll_size;
} else {
- assert(type == journal_type_t::RANDOM_BLOCK);
+ assert(type == backend_type_t::RANDOM_BLOCK);
target_dirty_bytes = roll_size / 36;
target_alloc_bytes = roll_size / 4;
max_journal_bytes = roll_size / 2;
JournalTrimmerImpl::JournalTrimmerImpl(
BackrefManager &backref_manager,
config_t config,
- journal_type_t type,
+ backend_type_t type,
device_off_t roll_start,
device_off_t roll_size)
: backref_manager(backref_manager),
config(config),
- journal_type(type),
+ backend_type(type),
roll_start(roll_start),
roll_size(roll_size),
reserved_usage(0)
{
assert(background_callback->is_ready());
auto ret = journal_head.add_offset(
- journal_type,
+ backend_type,
-static_cast<device_off_t>(config.max_journal_bytes),
roll_start,
roll_size);
{
assert(background_callback->is_ready());
auto ret = journal_head.add_offset(
- journal_type,
+ backend_type,
-static_cast<device_off_t>(config.target_journal_dirty_bytes),
roll_start,
roll_size);
{
assert(background_callback->is_ready());
auto ret = journal_head.add_offset(
- journal_type,
+ backend_type,
-static_cast<device_off_t>(config.target_journal_alloc_bytes),
roll_start,
roll_size);
return 0;
}
auto ret = journal_head.relative_to(
- journal_type,
+ backend_type,
journal_dirty_tail,
roll_start,
roll_size);
return 0;
}
auto ret = journal_head.relative_to(
- journal_type,
+ backend_type,
journal_alloc_tail,
roll_start,
roll_size);
void validate() const;
static config_t get_default(
- std::size_t roll_size, journal_type_t type);
+ std::size_t roll_size, backend_type_t type);
static config_t get_test(
- std::size_t roll_size, journal_type_t type);
+ std::size_t roll_size, backend_type_t type);
};
JournalTrimmerImpl(
BackrefManager &backref_manager,
config_t config,
- journal_type_t type,
+ backend_type_t type,
device_off_t roll_start,
device_off_t roll_size);
config.rewrite_dirty_bytes_per_cycle;
}
- journal_type_t get_journal_type() const {
- return journal_type;
+ backend_type_t get_backend_type() const {
+ return backend_type;
}
void set_extent_callback(ExtentCallbackInterface *cb) {
bool should_block_io_on_trim() const {
return get_tail_limit() >
get_journal_tail().add_offset(
- journal_type, reserved_usage, roll_start, roll_size);
+ backend_type, reserved_usage, roll_start, roll_size);
}
bool try_reserve_inline_usage(std::size_t usage) final {
static JournalTrimmerImplRef create(
BackrefManager &backref_manager,
config_t config,
- journal_type_t type,
+ backend_type_t type,
device_off_t roll_start,
device_off_t roll_size) {
return std::make_unique<JournalTrimmerImpl>(
BackrefManager &backref_manager;
config_t config;
- journal_type_t journal_type;
+ backend_type_t backend_type;
device_off_t roll_start;
device_off_t roll_size;
dynamic_max_rewrite_generation = MAX_REWRITE_GENERATION;
}
- if (trimmer->get_journal_type() == journal_type_t::SEGMENTED) {
+ if (trimmer->get_backend_type() == backend_type_t::SEGMENTED) {
auto segment_cleaner = dynamic_cast<SegmentCleaner*>(cleaner.get());
ceph_assert(segment_cleaner != nullptr);
auto num_writers = generation_to_writer(dynamic_max_rewrite_generation + 1);
add_device(device);
}
} else {
- assert(trimmer->get_journal_type() == journal_type_t::RANDOM_BLOCK);
+ assert(trimmer->get_backend_type() == backend_type_t::RANDOM_BLOCK);
auto rb_cleaner = dynamic_cast<RBMCleaner*>(cleaner.get());
ceph_assert(rb_cleaner != nullptr);
auto num_writers = generation_to_writer(dynamic_max_rewrite_generation + 1);
return writer->can_inplace_rewrite(t, extent);
}
- journal_type_t get_journal_type() const {
- return background_process.get_journal_type();
+ backend_type_t get_backend_type() const {
+ return background_process.get_backend_type();
}
extent_len_t get_block_size() const {
}
}
- journal_type_t get_journal_type() const {
- return trimmer->get_journal_type();
+ backend_type_t get_backend_type() const {
+ return trimmer->get_backend_type();
}
bool has_cold_tier() const {
seastar::future<> stop_background();
backend_type_t get_main_backend_type() const {
- return get_journal_type();
+ return get_backend_type();
}
// Testing interfaces
virtual ~Journal() {}
- virtual journal_type_t get_type() = 0;
+ virtual backend_type_t get_type() = 0;
};
using JournalRef = std::unique_ptr<Journal>;
close_ertr::future<> close() final;
- journal_type_t get_type() final {
- return journal_type_t::RANDOM_BLOCK;
+ backend_type_t get_type() final {
+ return backend_type_t::RANDOM_BLOCK;
}
submit_record_ret submit_record(
write_pipeline = _write_pipeline;
}
- journal_type_t get_type() final {
- return journal_type_t::SEGMENTED;
+ backend_type_t get_type() final {
+ return backend_type_t::SEGMENTED;
}
seastar::future<> finish_commit(transaction_type_t type) {
return seastar::now();
}
journal_seq_t journal_seq_t::add_offset(
- journal_type_t type,
+ backend_type_t type,
device_off_t off,
device_off_t roll_start,
device_off_t roll_size) const
segment_seq_t jseq = segment_seq;
device_off_t joff;
- if (type == journal_type_t::SEGMENTED) {
+ if (type == backend_type_t::SEGMENTED) {
joff = offset.as_seg_paddr().get_segment_off();
} else {
- assert(type == journal_type_t::RANDOM_BLOCK);
+ assert(type == backend_type_t::RANDOM_BLOCK);
auto boff = offset.as_blk_paddr().get_device_off();
joff = boff;
}
}
device_off_t journal_seq_t::relative_to(
- journal_type_t type,
+ backend_type_t type,
const journal_seq_t& r,
device_off_t roll_start,
device_off_t roll_size) const
device_off_t ret = static_cast<device_off_t>(segment_seq) - r.segment_seq;
ret *= roll_size;
- if (type == journal_type_t::SEGMENTED) {
+ if (type == backend_type_t::SEGMENTED) {
ret += (static_cast<device_off_t>(offset.as_seg_paddr().get_segment_off()) -
static_cast<device_off_t>(r.offset.as_seg_paddr().get_segment_off()));
} else {
- assert(type == journal_type_t::RANDOM_BLOCK);
+ assert(type == backend_type_t::RANDOM_BLOCK);
ret += offset.as_blk_paddr().get_device_off() -
r.offset.as_blk_paddr().get_device_off();
}
};
std::ostream& operator<<(std::ostream& out, backend_type_t);
-using journal_type_t = backend_type_t;
constexpr backend_type_t get_default_backend_of_device(device_type_t dtype) {
assert(dtype != device_type_t::NONE &&
// produces a pseudo journal_seq_t relative to this by offset
journal_seq_t add_offset(
- journal_type_t type,
+ backend_type_t type,
device_off_t off,
device_off_t roll_start,
device_off_t roll_size) const;
device_off_t relative_to(
- journal_type_t type,
+ backend_type_t type,
const journal_seq_t& r,
device_off_t roll_start,
device_off_t roll_size) const;
}
}
- auto journal_type = p_backend_type;
+ auto backend_type = p_backend_type;
device_off_t roll_size;
device_off_t roll_start;
- if (journal_type == journal_type_t::SEGMENTED) {
+ if (backend_type == backend_type_t::SEGMENTED) {
roll_size = static_cast<SegmentManager*>(primary_device)->get_segment_size();
roll_start = 0;
} else {
cleaner_is_detailed = true;
cleaner_config = SegmentCleaner::config_t::get_test();
trimmer_config = JournalTrimmerImpl::config_t::get_test(
- roll_size, journal_type);
+ roll_size, backend_type);
} else {
cleaner_is_detailed = false;
cleaner_config = SegmentCleaner::config_t::get_default();
trimmer_config = JournalTrimmerImpl::config_t::get_default(
- roll_size, journal_type);
+ roll_size, backend_type);
}
auto journal_trimmer = JournalTrimmerImpl::create(
*backref_manager, trimmer_config,
- journal_type, roll_start, roll_size);
+ backend_type, roll_start, roll_size);
AsyncCleanerRef cleaner;
JournalRef journal;
epm->get_ool_segment_seq_allocator(),
cleaner_is_detailed,
/* is_cold = */ true);
- if (journal_type == journal_type_t::SEGMENTED) {
+ if (backend_type == backend_type_t::SEGMENTED) {
for (auto id : cold_segment_cleaner->get_device_ids()) {
segment_providers_by_id[id] =
static_cast<SegmentProvider*>(cold_segment_cleaner.get());
}
}
- if (journal_type == journal_type_t::SEGMENTED) {
+ if (backend_type == backend_type_t::SEGMENTED) {
cleaner = SegmentCleaner::create(
cleaner_config,
std::move(sms),
{
#endif
protected:
- journal_type_t journal_type;
size_t num_main_device_managers = 0;
size_t num_cold_device_managers = 0;
EphemeralDevicesRef devices;