CacheRef _cache,
LBAManagerRef _lba_manager,
ExtentPlacementManagerRef &&epm,
- BackrefManagerRef&& backref_manager)
+ BackrefManagerRef&& backref_manager,
+ tm_make_config_t config)
: segment_cleaner(std::move(_segment_cleaner)),
cache(std::move(_cache)),
lba_manager(std::move(_lba_manager)),
journal(std::move(_journal)),
epm(std::move(epm)),
backref_manager(std::move(backref_manager)),
- sm_group(*segment_cleaner->get_segment_manager_group())
+ sm_group(*segment_cleaner->get_segment_manager_group()),
+ config(config)
{
segment_cleaner->set_extent_callback(this);
journal->set_write_pipeline(&write_pipeline);
std::move(cache),
std::move(lba_manager),
std::move(epm),
- std::move(backref_manager));
+ std::move(backref_manager),
+ config);
}
}
namespace crimson::os::seastore {
class Journal;
+struct tm_make_config_t {
+ bool detailed = true;
+ journal_type_t j_type = journal_type_t::SEGMENT_JOURNAL;
+ placement_hint_t default_placement_hint =
+ placement_hint_t::HOT;
+ static tm_make_config_t get_default() {
+ return tm_make_config_t {
+ true,
+ journal_type_t::SEGMENT_JOURNAL,
+ placement_hint_t::HOT
+ };
+ }
+};
+
template <typename F>
auto repeat_eagain(F &&f) {
return seastar::do_with(
CacheRef cache,
LBAManagerRef lba_manager,
ExtentPlacementManagerRef &&epm,
- BackrefManagerRef&& backref_manager);
+ BackrefManagerRef&& backref_manager,
+ tm_make_config_t config = tm_make_config_t::get_default());
/// Writes initial metadata to disk
using mkfs_ertr = base_ertr;
alloc_extent_ret<T> alloc_extent(
Transaction &t,
laddr_t laddr_hint,
- extent_len_t len,
- placement_hint_t hint = placement_hint_t::HOT) {
+ extent_len_t len) {
placement_hint_t placement_hint;
if constexpr (T::TYPE == extent_types_t::OBJECT_DATA_BLOCK ||
T::TYPE == extent_types_t::COLL_BLOCK) {
placement_hint = placement_hint_t::COLD;
} else {
- placement_hint = hint;
+ placement_hint = config.default_placement_hint;
}
LOG_PREFIX(TransactionManager::alloc_extent);
SUBTRACET(seastore_tm, "{} len={}, placement_hint={}, laddr_hint={}",
WritePipeline write_pipeline;
+ tm_make_config_t config;
rewrite_extent_ret rewrite_logical_extent(
Transaction& t,
LogicalCachedExtentRef extent);
};
using TransactionManagerRef = std::unique_ptr<TransactionManager>;
-struct tm_make_config_t {
- bool detailed = true;
- journal_type_t j_type = journal_type_t::SEGMENT_JOURNAL;
- placement_hint_t default_placement_hint =
- placement_hint_t::HOT;
- static tm_make_config_t get_default() {
- return tm_make_config_t {
- true,
- journal_type_t::SEGMENT_JOURNAL,
- placement_hint_t::HOT
- };
- }
-};
-
TransactionManagerRef make_transaction_manager(tm_make_config_t config);
}
test_transaction_t &t,
laddr_t hint,
extent_len_t len,
- char contents,
- placement_hint_t p_hint = placement_hint_t::HOT) {
+ char contents) {
auto extent = with_trans_intr(*(t.t), [&](auto& trans) {
- return tm->alloc_extent<TestBlock>(trans, hint, len, p_hint);
+ return tm->alloc_extent<TestBlock>(trans, hint, len);
}).unsafe_get0();
extent->set_contents(contents);
EXPECT_FALSE(test_mappings.contains(extent->get_laddr(), t.mapping_delta));
TestBlockRef alloc_extent(
test_transaction_t &t,
laddr_t hint,
- extent_len_t len,
- placement_hint_t p_hint = placement_hint_t::HOT) {
+ extent_len_t len) {
return alloc_extent(
t,
hint,
len,
- get_random_contents(),
- p_hint);
+ get_random_contents());
}
bool check_usage() {
boost::make_counting_iterator(num),
[&, this](auto) {
return tm->alloc_extent<TestBlock>(
- *(t.t), L_ADDR_MIN, size,
- tm_config.default_placement_hint
+ *(t.t), L_ADDR_MIN, size
).si_then([&, this](auto extent) {
extent->set_contents(get_random_contents());
EXPECT_FALSE(
auto extent = alloc_extent(
t,
i * BSIZE,
- BSIZE,
- tm_config.default_placement_hint);
+ BSIZE);
ASSERT_EQ(i * BSIZE, extent->get_laddr());
if (try_submit_transaction(std::move(t)))
break;
t,
ADDR,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
t,
ADDR,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
t,
ADDR,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
t2,
ADDR2,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
ASSERT_EQ(ADDR2, extent2->get_laddr());
check_mappings(t2);
extent2.reset();
auto extent = alloc_extent(
t,
laddr_t(i * SIZE),
- SIZE,
- tm_config.default_placement_hint);
+ SIZE);
}
check_mappings(t);
submit_transaction(std::move(t));
auto extent = alloc_extent(
t,
laddr_t(i * SIZE),
- SIZE,
- tm_config.default_placement_hint);
+ SIZE);
}
submit_transaction(std::move(t));
}
t,
ADDR,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
dec_ref(t, ADDR);
t,
ADDR,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
submit_transaction(std::move(t));
check();
auto extent = alloc_extent(
t,
laddr_t(i * SIZE),
- SIZE,
- tm_config.default_placement_hint);
+ SIZE);
}
check_mappings(t);
submit_transaction(std::move(t));
t,
ADDR,
SIZE,
- 'a',
- tm_config.default_placement_hint);
+ 'a');
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
t,
i * SIZE,
SIZE,
- (char)(i & 0xFF),
- tm_config.default_placement_hint);
+ (char)(i & 0xFF));
ASSERT_EQ(i * SIZE, extent->get_laddr());
submit_transaction(std::move(t));
}
auto extent = alloc_extent(
t,
i * BSIZE,
- BSIZE,
- tm_config.default_placement_hint);
+ BSIZE);
ASSERT_EQ(i * BSIZE, extent->get_laddr());
submit_transaction(std::move(t));
}
auto padding = alloc_extent(
t,
TOTAL + (k * PADDING_SIZE),
- PADDING_SIZE,
- tm_config.default_placement_hint);
+ PADDING_SIZE);
dec_ref(t, padding->get_laddr());
}
submit_transaction(std::move(t));