reclaimed += ext->get_length();
}
return extent_callback.rewrite_extents(
- t, extents, target_generation, modify_time);
+ t, extents, target_generation, PLACEMENT_HINT_NULL, modify_time);
});
}).si_then([&extent_callback, &t] {
return extent_callback.submit_transaction_direct(t);
Transaction &t,
std::vector<CachedExtentRef> &extents,
rewrite_gen_t target_generation,
+ placement_hint_t hint,
sea_time_point modify_time) = 0;
/**
}
/// assign the target rewrite generation for the followup rewrite
- void set_target_rewrite_generation(rewrite_gen_t gen) {
- user_hint = placement_hint_t::REWRITE;
+ void set_target_rewrite_generation(
+ rewrite_gen_t gen,
+ placement_hint_t hint = PLACEMENT_HINT_NULL) {
+ if (hint != PLACEMENT_HINT_NULL) {
+ user_hint = hint;
+ } else {
+ user_hint = placement_hint_t::REWRITE;
+ }
rewrite_generation = gen;
}
) {
assert(opt.hint < placement_hint_t::NUM_HINTS);
assert(is_target_rewrite_generation(opt.gen, dynamic_max_rewrite_generation));
- assert(opt.gen == INIT_GENERATION || opt.hint == placement_hint_t::REWRITE);
+ assert(opt.gen == INIT_GENERATION ||
+ opt.hint == placement_hint_t::REWRITE ||
+ opt.hint == placement_hint_t::COLD);
data_category_t category = get_extent_category(type);
opt.gen = adjust_generation(
LOG_PREFIX(ExtentPlacementManager::alloc_new_data_extents);
assert(opt.hint < placement_hint_t::NUM_HINTS);
assert(is_target_rewrite_generation(opt.gen, dynamic_max_rewrite_generation));
- assert(opt.gen == INIT_GENERATION || opt.hint == placement_hint_t::REWRITE);
+ assert(opt.gen == INIT_GENERATION ||
+ opt.hint == placement_hint_t::REWRITE ||
+ opt.hint == placement_hint_t::COLD);
data_category_t category = get_extent_category(type);
opt.gen = adjust_generation(
is_lba_backref_node(type)) {
gen = INLINE_GENERATION;
} else if (hint == placement_hint_t::COLD) {
- assert(gen == INIT_GENERATION);
if (background_process.has_cold_tier()) {
gen = hot_tier_generations;
} else {
}
if (is_tracked && gen >= hot_tier_generations &&
- hint != placement_hint_t::REWRITE) {
+ hint != placement_hint_t::REWRITE &&
+ hint != placement_hint_t::COLD) {
gen = hot_tier_generations - 1;
}
Transaction &t,
std::vector<CachedExtentRef> &extents,
rewrite_gen_t target_generation,
+ placement_hint_t hint,
sea_time_point modify_time)
{
LOG_PREFIX(TransactionManager::rewrite_extents);
return seastar::do_with(
P_ADDR_NULL,
L_ADDR_NULL,
- [this, &t, target_generation, modify_time, &extents, FNAME]
+ [this, &t, target_generation, modify_time, &extents, FNAME, hint]
(auto &paddr_hint, auto &next_laddr) {
return trans_intr::do_for_each(
extents,
[this, &t, target_generation, modify_time, FNAME,
- &paddr_hint, &next_laddr](auto &extent) {
+ &paddr_hint, &next_laddr, hint](auto &extent) {
{
auto updated = cache->update_extent_from_transaction(t, extent);
if (!updated) {
}
extent->set_target_rewrite_generation(INIT_GENERATION);
} else {
- extent->set_target_rewrite_generation(target_generation);
+ extent->set_target_rewrite_generation(target_generation, hint);
ceph_assert(modify_time != NULL_TIME);
extent->set_modify_time(modify_time);
}
co_await rewrite_extents(
t, extents, epm->get_max_hot_gen() + 1,
+ placement_hint_t::COLD,
seastar::lowres_system_clock::now());
co_return ret;
Transaction &t,
std::vector<CachedExtentRef> &extents,
rewrite_gen_t target_generation,
+ placement_hint_t hint,
sea_time_point modify_time) final;
using ExtentCallbackInterface::promote_extent_ret;