level: dev
desc: The main device type seastore uses (SSD or RANDOM_BLOCK_SSD)
default: SSD
+- name: seastore_cbjournal_size
+ type: size
+ level: dev
+ desc: Total size to use for CircularBoundedJournal if created, it is valid only if seastore_main_device_type is RANDOM_BLOCK
+ default: 5_G
*
*/
-constexpr uint64_t DEFAULT_TEST_CBJOURNAL_SIZE = 1 << 26;
constexpr uint64_t DEFAULT_BLOCK_SIZE = 4096;
class CircularBoundedJournal : public Journal {
#include "crimson/os/seastore/logging.h"
SET_SUBSYS(seastore_device);
-RBMDevice::mkfs_ret RBMDevice::mkfs(device_config_t config) {
+RBMDevice::mkfs_ret RBMDevice::do_mkfs(device_config_t config) {
LOG_PREFIX(RBMDevice::mkfs);
return stat_device(
).handle_error(
).safe_then([this, FNAME, config=std::move(config)](auto st) {
super.block_size = st.block_size;
super.size = st.size;
-
super.feature |= RBM_BITMAP_BLOCK_CRC;
super.config = std::move(config);
+ assert(super.journal_size);
+ assert(super.size >= super.journal_size);
DEBUG("super {} ", super);
// write super block
return write_rbm_header(
return mount_ertr::now();
}
+ mkfs_ret mkfs(device_config_t config) final {
+ using crimson::common::get_conf;
+ super.journal_size = get_conf<Option::size_t>("seastore_cbjournal_size");
+ return do_mkfs(config);
+ }
+
write_ertr::future<> writev(
uint64_t offset,
ceph::bufferlist bl,
bool is_data_protection_enabled() const { return false; }
- mkfs_ret mkfs(device_config_t) final;
+ mkfs_ret do_mkfs(device_config_t);
write_ertr::future<> write_rbm_header();
void set_device_id(device_id_t id) {
super.config.spec.id = id;
}
- void set_journal_size(uint64_t size) {
- super.journal_size = size;
- }
void set_block_size(size_t size) {
super.block_size = size;
};
using RBMDeviceRef = std::unique_ptr<RBMDevice>;
+constexpr uint64_t DEFAULT_TEST_CBJOURNAL_SIZE = 1 << 26;
+
class EphemeralRBMDevice : public RBMDevice {
public:
uint64_t size = 0;
);
}
+ mkfs_ret mkfs(device_config_t config) final {
+ super.journal_size = DEFAULT_TEST_CBJOURNAL_SIZE;
+ return do_mkfs(config);
+ }
+
open_ertr::future<> open(
const std::string &in_path,
seastar::open_flags mode) override;
char *buf;
};
using EphemeralRBMDeviceRef = std::unique_ptr<EphemeralRBMDevice>;
-EphemeralRBMDeviceRef create_test_ephemeral(uint64_t journal_size, uint64_t data_size);
+EphemeralRBMDeviceRef create_test_ephemeral(
+ uint64_t journal_size = DEFAULT_TEST_CBJOURNAL_SIZE,
+ uint64_t data_size = DEFAULT_TEST_CBJOURNAL_SIZE);
}
}
}
-constexpr uint64_t CBTEST_DEFAULT_TEST_SIZE = 1 << 20;
-
-
std::optional<record_t> decode_record(
bufferlist& bl)
{
cbjournal_test_t() {
device = random_block_device::create_test_ephemeral(
- CBTEST_DEFAULT_TEST_SIZE, 0);
+ random_block_device::DEFAULT_TEST_CBJOURNAL_SIZE, 0);
cbj.reset(new CircularBoundedJournal(*this, device.get(), std::string()));
block_size = device->get_block_size();
cbj->set_write_pipeline(&pipeline);
return device->mount(
).safe_then([this]() {
device_config_t config = get_rbm_ephemeral_device_config(0, 1);
- device->set_journal_size(CBTEST_DEFAULT_TEST_SIZE);
return device->mkfs(config
).safe_then([this]() {
return cbj->open_for_mkfs(
}
seastar::future<> setup() final {
- rb_device = random_block_device::create_test_ephemeral(
- journal::DEFAULT_TEST_CBJOURNAL_SIZE, journal::DEFAULT_TEST_CBJOURNAL_SIZE);
+ rb_device = random_block_device::create_test_ephemeral();
return rb_device->mount().handle_error(crimson::ct_error::assert_all{}
).then([this]() {
device_config_t config = get_rbm_ephemeral_device_config(0, 1);
- rb_device->set_journal_size(journal::DEFAULT_TEST_CBJOURNAL_SIZE);
return rb_device->mkfs(config).handle_error(crimson::ct_error::assert_all{});
});
}