head.dirty_tail =
journal_seq_t{0,
convert_abs_addr_to_paddr(
- device->get_block_size(),
+ get_start_addr(),
device->get_device_id())};
head.alloc_tail = head.dirty_tail;
encode(head, bl);
CircularBoundedJournal::read_header()
{
LOG_PREFIX(CircularBoundedJournal::read_header);
+ assert(device);
auto bptr = bufferptr(ceph::buffer::create_page_aligned(
device->get_block_size()));
- DEBUG("reading {}", CBJOURNAL_START_ADDRESS);
- return device->read(CBJOURNAL_START_ADDRESS, bptr
+ DEBUG("reading {}", device->get_journal_start());
+ return device->read(device->get_journal_start(), bptr
).safe_then([bptr, FNAME]() mutable
-> read_header_ret {
bufferlist bl;
DEBUG(
"sync header of CircularBoundedJournal, length {}",
bl.length());
- return device_write_bl(CBJOURNAL_START_ADDRESS, bl);
+ assert(device);
+ return device_write_bl(device->get_journal_start(), bl);
}
seastar::future<> CircularBoundedJournal::finish_commit(transaction_type_t type) {
if (is_trim_transaction(type)) {
namespace crimson::os::seastore::journal {
-constexpr rbm_abs_addr CBJOURNAL_START_ADDRESS = 0;
using RBMDevice = random_block_device::RBMDevice;
/**
return device->get_journal_size() - get_block_size();
}
rbm_abs_addr get_start_addr() const {
- return CBJOURNAL_START_ADDRESS + get_block_size();
+ assert(device);
+ return device->get_journal_start() + get_block_size();
}
size_t get_available_size() const {
return get_total_size() - get_used_size();
void set_journal_size(uint64_t size) {
super.journal_size = size;
}
+
+ static rbm_abs_addr get_journal_start() {
+ return RBM_SUPERBLOCK_SIZE;
+ }
};
class TestMemory : public RBMDevice {
roll_size = static_cast<SegmentManager*>(primary_device)->get_segment_size();
roll_start = 0;
} else {
- // FIXME: get from runtime configration instead of static defaults
- roll_size = journal::DEFAULT_TEST_CBJOURNAL_SIZE;
+ roll_size = static_cast<random_block_device::RBMDevice*>(primary_device)
+ ->get_journal_size();
// see CircularBoundedJournal::get_start_addr()
- roll_start = journal::CBJOURNAL_START_ADDRESS +
- primary_device->get_block_size();
+ roll_start = static_cast<random_block_device::RBMDevice*>(primary_device)
+ ->get_journal_start() + primary_device->get_block_size();
ceph_assert_always(roll_size <= DEVICE_OFF_MAX);
ceph_assert_always((std::size_t)roll_size + roll_start <=
primary_device->get_available_size());
cbjournal_test_t() {
device = new random_block_device::TestMemory(
- CBTEST_DEFAULT_TEST_SIZE + CBTEST_DEFAULT_BLOCK_SIZE,
+ CBTEST_DEFAULT_TEST_SIZE + CBTEST_DEFAULT_BLOCK_SIZE +
+ random_block_device::RBMDevice::get_journal_start(),
CBTEST_DEFAULT_BLOCK_SIZE);
cbj.reset(new CircularBoundedJournal(*this, device, std::string()));
block_size = CBTEST_DEFAULT_BLOCK_SIZE;
set_written_to(
journal_seq_t{0,
convert_abs_addr_to_paddr(
- 4096,
+ cbj->get_start_addr(),
cbj->get_device_id())});
cbj->close().unsafe_get0();
replay();
seastar::future<> randomblock_setup()
{
rb_device.reset(new random_block_device::TestMemory(
- journal::DEFAULT_TEST_CBJOURNAL_SIZE + journal::DEFAULT_BLOCK_SIZE,
+ journal::DEFAULT_TEST_CBJOURNAL_SIZE + journal::DEFAULT_BLOCK_SIZE +
+ random_block_device::RBMDevice::get_journal_start(),
journal::DEFAULT_BLOCK_SIZE));
return rb_device->mount().handle_error(crimson::ct_error::assert_all{}
).then([this]() {