std::random_device rd;
std::mt19937 gen;
+ tm_make_config_t tm_config;
transaction_manager_test_t(std::size_t num_devices)
: TMTestState(num_devices), gen(rd()) {
return static_cast<char>(std::uniform_int_distribution<>(0, 255)(gen));
}
- bool for_segmented() {
- std::string j_type = GetParam();
- return j_type == "segmented";
- }
seastar::future<> set_up_fut() final {
std::string j_type = GetParam();
if (j_type == "segmented") {
- return tm_setup();
+ return tm_setup(tm_config);
} else if (j_type == "circularbounded") {
- return tm_setup(journal_type::CIRCULARBOUNDED_JOURNAL);
+ tm_config.j_type = journal_type::CIRCULARBOUNDED_JOURNAL;
+ tm_config.default_placement_hint = placement_hint_t::REWRITE;
+ return tm_setup(tm_config);
} else {
ceph_assert(0 == "no support");
}
[&, this](auto) {
return tm->alloc_extent<TestBlock>(
*(t.t), L_ADDR_MIN, size,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE
+ tm_config.default_placement_hint
).si_then([&, this](auto extent) {
extent->set_contents(get_random_contents());
EXPECT_FALSE(
t,
i * BSIZE,
BSIZE,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(i * BSIZE, extent->get_laddr());
if (try_submit_transaction(std::move(t)))
break;
ADDR,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
ADDR,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
ADDR,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
ADDR2,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(ADDR2, extent2->get_laddr());
check_mappings(t2);
extent2.reset();
t,
laddr_t(i * SIZE),
SIZE,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
}
check_mappings(t);
submit_transaction(std::move(t));
t,
laddr_t(i * SIZE),
SIZE,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
}
submit_transaction(std::move(t));
}
ADDR,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
dec_ref(t, ADDR);
ADDR,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
submit_transaction(std::move(t));
check();
t,
laddr_t(i * SIZE),
SIZE,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
}
check_mappings(t);
submit_transaction(std::move(t));
ADDR,
SIZE,
'a',
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(ADDR, extent->get_laddr());
check_mappings(t);
check();
i * SIZE,
SIZE,
(char)(i & 0xFF),
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(i * SIZE, extent->get_laddr());
submit_transaction(std::move(t));
}
t,
i * BSIZE,
BSIZE,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
ASSERT_EQ(i * BSIZE, extent->get_laddr());
submit_transaction(std::move(t));
}
t,
TOTAL + (k * PADDING_SIZE),
PADDING_SIZE,
- for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+ tm_config.default_placement_hint);
dec_ref(t, padding->get_laddr());
}
submit_transaction(std::move(t));
segment_manager::EphemeralSegmentManagerRef segment_manager;
std::list<segment_manager::EphemeralSegmentManagerRef> secondary_segment_managers;
std::unique_ptr<nvme_device::NVMeBlockDevice> rb_device;
- journal_type j_type = journal_type::SEGMENT_JOURNAL;
+ tm_make_config_t tm_config;
EphemeralTestState(std::size_t num_segment_managers) {
assert(num_segment_managers > 0);
_mount().handle_error(crimson::ct_error::assert_all{}).get0();
}
- seastar::future<> tm_setup(journal_type j_type = journal_type::SEGMENT_JOURNAL) {
- this->j_type = j_type;
+ seastar::future<> tm_setup(
+ tm_make_config_t config = tm_make_config_t::get_default()) {
+ tm_config = config;
segment_manager = segment_manager::create_test_ephemeral();
for (auto &sec_sm : secondary_segment_managers) {
sec_sm = segment_manager::create_test_ephemeral();
}
- if (j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
+ if (tm_config.j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
auto config =
journal::CircularBoundedJournal::mkfs_config_t::get_default();
rb_device.reset(new nvme_device::TestMemory(config.total_size));
for (auto &sec_sm : secondary_segment_managers) {
sec_sm.reset();
}
- if (j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
+ if (tm_config.j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
rb_device.reset();
}
});
TMTestState(std::size_t num_devices) : EphemeralTestState(num_devices) {}
virtual void _init() override {
- tm_make_config_t config;
- config.cbjournal = j_type == journal_type::SEGMENT_JOURNAL ? false : true;
- tm = make_transaction_manager(config);
+ tm = make_transaction_manager(tm_config);
tm->add_device(segment_manager.get(), true);
- if (j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
+ if (tm_config.j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
tm->add_device(rb_device.get(), false);
static_cast<journal::CircularBoundedJournal*>(tm->get_journal())->
add_device(rb_device.get());
}
virtual FuturizedStore::mkfs_ertr::future<> _mkfs() {
- if (j_type == journal_type::SEGMENT_JOURNAL) {
+ if (tm_config.j_type == journal_type::SEGMENT_JOURNAL) {
return tm->mkfs(
).handle_error(
crimson::ct_error::assert_all{"Error in mkfs"}