]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/rbm: generalize shared logic and set cbjournal_size in mkfs()
authormyoungwon oh <ohmyoungwon@gmail.com>
Mon, 13 Feb 2023 01:41:49 +0000 (10:41 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Sat, 25 Feb 2023 03:09:32 +0000 (12:09 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/common/options/crimson.yaml.in
src/crimson/os/seastore/journal/circular_bounded_journal.h
src/crimson/os/seastore/random_block_manager/nvme_block_device.cc
src/crimson/os/seastore/random_block_manager/nvme_block_device.h
src/crimson/os/seastore/random_block_manager/rbm_device.h
src/test/crimson/seastore/test_cbjournal.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index a92084e39d94d9de7f06b10118e944e8c53d97f3..f6f771f385ea276055badafc444e7a7dada26590 100644 (file)
@@ -97,3 +97,8 @@ options:
   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
index e6e20cca14710ea0293d7b2ea767e9d176aa0a60..b7117df5043694040345ac964c53f50e43a62949 100644 (file)
@@ -51,7 +51,6 @@ using RBMDevice = random_block_device::RBMDevice;
  *
  */
 
-constexpr uint64_t DEFAULT_TEST_CBJOURNAL_SIZE = 1 << 26;
 constexpr uint64_t DEFAULT_BLOCK_SIZE = 4096;
 
 class CircularBoundedJournal : public Journal {
index adfc5e4c6f4a3c1180eb65615950944770f1ec2d..48896ccdf5e3269465860dcf96a8e8138cd04954 100644 (file)
@@ -24,7 +24,7 @@ namespace crimson::os::seastore::random_block_device {
 #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(
@@ -34,9 +34,10 @@ RBMDevice::mkfs_ret RBMDevice::mkfs(device_config_t config) {
   ).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(
index fb0b30a46694fb823fceed7870df868b66dab4d8..689893105d357faa7672c8e25f54cc04817254cf 100644 (file)
@@ -211,6 +211,12 @@ public:
     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,
index 91b877e23ae38a1b7fe6b24e172904373dab8c1a..e7efac0600ea5989e76fe037cfed4fd2ca881454 100644 (file)
@@ -150,7 +150,7 @@ public:
 
   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();
 
@@ -172,9 +172,6 @@ public:
   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;
@@ -182,6 +179,8 @@ public:
 };
 using RBMDeviceRef = std::unique_ptr<RBMDevice>;
 
+constexpr uint64_t DEFAULT_TEST_CBJOURNAL_SIZE = 1 << 26;
+
 class EphemeralRBMDevice : public RBMDevice {
 public:
   uint64_t size = 0;
@@ -213,6 +212,11 @@ public:
     );
   }
 
+  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;
@@ -246,6 +250,8 @@ public:
   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);
 
 }
index 23c979ab3138f461f8da7922376bae35719fa927..f5bff5376f03ab5d8b435ca29cdc8a512f032b0b 100644 (file)
@@ -26,9 +26,6 @@ namespace {
   }
 }
 
-constexpr uint64_t CBTEST_DEFAULT_TEST_SIZE = 1 << 20;
-
-
 std::optional<record_t> decode_record(
   bufferlist& bl)
 {
@@ -132,7 +129,7 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer
 
   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);
@@ -252,7 +249,6 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer
     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(
index 8280e4b7560764a9e5a24bb7a1614d9695f443a4..d53911b8ebf47b5e2765c6dfa5e0c3d7bb7a0949 100644 (file)
@@ -125,12 +125,10 @@ public:
   }
   
   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{});
     });
   }