namespace crimson::os::seastore::random_block_device {
-open_ertr::future<> TestMemory::open(
+EphemeralRBMDeviceRef create_test_ephemeral(uint64_t journal_size, uint64_t data_size) {
+ return EphemeralRBMDeviceRef(
+ new EphemeralRBMDevice(journal_size + data_size +
+ EphemeralRBMDevice::TEST_BLOCK_SIZE +
+ random_block_device::RBMDevice::get_journal_start(),
+ EphemeralRBMDevice::TEST_BLOCK_SIZE));
+}
+
+open_ertr::future<> EphemeralRBMDevice::open(
const std::string &in_path,
seastar::open_flags mode) {
if (buf) {
return open_ertr::now();
}
-write_ertr::future<> TestMemory::write(
+write_ertr::future<> EphemeralRBMDevice::write(
uint64_t offset,
bufferptr &bptr,
uint16_t stream) {
ceph_assert(buf);
logger().debug(
- "TestMemory: write offset {} len {}",
+ "EphemeralRBMDevice: write offset {} len {}",
offset,
bptr.length());
return write_ertr::now();
}
-read_ertr::future<> TestMemory::read(
+read_ertr::future<> EphemeralRBMDevice::read(
uint64_t offset,
bufferptr &bptr) {
ceph_assert(buf);
logger().debug(
- "TestMemory: read offset {} len {}",
+ "EphemeralRBMDevice: read offset {} len {}",
offset,
bptr.length());
return read_ertr::now();
}
-Device::close_ertr::future<> TestMemory::close() {
+Device::close_ertr::future<> EphemeralRBMDevice::close() {
logger().debug(" close ");
return close_ertr::now();
}
-write_ertr::future<> TestMemory::writev(
+write_ertr::future<> EphemeralRBMDevice::writev(
uint64_t offset,
ceph::bufferlist bl,
uint16_t stream) {
ceph_assert(buf);
logger().debug(
- "TestMemory: write offset {} len {}",
+ "EphemeralRBMDevice: write offset {} len {}",
offset,
bl.length());
}
};
-class TestMemory : public RBMDevice {
+class EphemeralRBMDevice : public RBMDevice {
public:
uint64_t size = 0;
uint64_t block_size = 0;
+ constexpr static uint32_t TEST_BLOCK_SIZE = 4096;
- TestMemory(size_t size, uint64_t block_size) :
+ EphemeralRBMDevice(size_t size, uint64_t block_size) :
size(size), block_size(block_size), buf(nullptr) {
}
- ~TestMemory() {
+ ~EphemeralRBMDevice() {
if (buf) {
::munmap(buf, size);
buf = nullptr;
}
char *buf;
};
+using EphemeralRBMDeviceRef = std::unique_ptr<EphemeralRBMDevice>;
+EphemeralRBMDeviceRef create_test_ephemeral(uint64_t journal_size, uint64_t data_size);
+
}
}
constexpr uint64_t CBTEST_DEFAULT_TEST_SIZE = 1 << 20;
-constexpr uint64_t CBTEST_DEFAULT_BLOCK_SIZE = 4096;
std::optional<record_t> decode_record(
{
std::vector<entry_validator_t> entries;
std::unique_ptr<CircularBoundedJournal> cbj;
- random_block_device::RBMDevice *device;
+ random_block_device::EphemeralRBMDeviceRef device;
std::default_random_engine generator;
uint64_t block_size;
WritePipeline pipeline;
cbjournal_test_t() {
- device = new random_block_device::TestMemory(
- 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;
+ device = random_block_device::create_test_ephemeral(
+ CBTEST_DEFAULT_TEST_SIZE, 0);
+ cbj.reset(new CircularBoundedJournal(*this, device.get(), std::string()));
+ block_size = device->get_block_size();
cbj->set_write_pipeline(&pipeline);
}
}
seastar::future<> tear_down_fut() final {
- if (device) {
- delete device;
- }
return seastar::now();
}
paddr_t{},
L_ADDR_NULL,
0, 0,
- CBTEST_DEFAULT_BLOCK_SIZE,
+ device->get_block_size(),
1,
0,
segment_type_t::JOURNAL,
}
constexpr uint64_t DEFAULT_TEST_SIZE = 1 << 20;
-constexpr uint64_t DEFAULT_BLOCK_SIZE = 4096;
struct rbm_test_t :
public seastar_test_suite_t {
std::default_random_engine generator;
- const uint64_t block_size = DEFAULT_BLOCK_SIZE;
+ uint64_t block_size = 0;
+ uint64_t size = 0;
device_config_t config;
rbm_test_t() = default;
seastar::future<> set_up_fut() final {
- device.reset(new random_block_device::TestMemory(DEFAULT_TEST_SIZE, DEFAULT_BLOCK_SIZE));
+ device = random_block_device::create_test_ephemeral(
+ 0, DEFAULT_TEST_SIZE);
+ block_size = device->get_block_size();
+ size = device->get_available_size();
rbm_manager.reset(new BlockRBManager(device.get(), std::string()));
config = get_rbm_ephemeral_device_config(0, 1);
return device->mount().handle_error(crimson::ct_error::assert_all{}
run_async([this] {
auto super = read_rbm_header();
ASSERT_TRUE(
- super.block_size == DEFAULT_BLOCK_SIZE &&
- super.size == DEFAULT_TEST_SIZE
+ super.block_size == block_size &&
+ super.size == size
);
config.spec.id = DEVICE_ID_NULL;
mkfs();
super = read_rbm_header();
ASSERT_TRUE(
super.config.spec.id == DEVICE_ID_NULL &&
- super.size == DEFAULT_TEST_SIZE
+ super.size == size
);
});
}
auto content = generate_extent(1);
{
write(
- DEFAULT_BLOCK_SIZE,
+ block_size,
content
);
- auto bp = bufferptr(ceph::buffer::create_page_aligned(DEFAULT_BLOCK_SIZE));
+ auto bp = bufferptr(ceph::buffer::create_page_aligned(block_size));
read(
- DEFAULT_BLOCK_SIZE,
+ block_size,
bp
);
bufferlist bl;
close();
open();
{
- auto bp = bufferptr(ceph::buffer::create_page_aligned(DEFAULT_BLOCK_SIZE));
+ auto bp = bufferptr(ceph::buffer::create_page_aligned(block_size));
read(
- DEFAULT_BLOCK_SIZE,
+ block_size,
bp
);
bufferlist bl;
seastar::future<> randomblock_setup()
{
- rb_device.reset(new random_block_device::TestMemory(
- journal::DEFAULT_TEST_CBJOURNAL_SIZE + journal::DEFAULT_BLOCK_SIZE +
- random_block_device::RBMDevice::get_journal_start(),
- journal::DEFAULT_BLOCK_SIZE));
+ rb_device = random_block_device::create_test_ephemeral(
+ journal::DEFAULT_TEST_CBJOURNAL_SIZE, 0);
return rb_device->mount().handle_error(crimson::ct_error::assert_all{}
).then([this]() {
device_config_t config = get_rbm_ephemeral_device_config(0, 1);