]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/rbm: remove read_rbm_header in BlockRBManager::open(), and use...
authormyoungwon oh <ohmyoungwon@gmail.com>
Tue, 21 Feb 2023 06:05:51 +0000 (15:05 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Sat, 25 Feb 2023 03:10:15 +0000 (12:10 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/random_block_manager/block_rb_manager.cc
src/crimson/os/seastore/random_block_manager/nvme_block_device.cc
src/crimson/os/seastore/random_block_manager/rbm_device.h
src/test/crimson/seastore/test_cbjournal.cc
src/test/crimson/seastore/test_randomblock_manager.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index 58983956ca2a3aaa4717f904befadcff8d9cb1ad..d7dacf4f534c4355246ef82e98541b7b5609e23e 100644 (file)
@@ -73,22 +73,15 @@ void BlockRBManager::complete_allocation(
 BlockRBManager::open_ertr::future<> BlockRBManager::open()
 {
   assert(device);
-  return device->read_rbm_header(RBM_START_ADDRESS
-  ).safe_then([this](auto s)
-    -> open_ertr::future<> {
-    auto ool_start = get_start_rbm_addr();
-    allocator->init(
-      ool_start,
-      device->get_available_size() -
-      ool_start,
-      device->get_block_size());
-    return open_ertr::now();
-  }).handle_error(
-    open_ertr::pass_further{},
-    crimson::ct_error::assert_all{
-      "Invalid error read_rbm_header in BlockRBManager::open"
-    }
-  );
+  assert(device->get_available_size() > 0);
+  assert(device->get_block_size() > 0);
+  auto ool_start = get_start_rbm_addr();
+  allocator->init(
+    ool_start,
+    device->get_available_size() -
+    ool_start,
+    device->get_block_size());
+  return open_ertr::now();
 }
 
 BlockRBManager::write_ertr::future<> BlockRBManager::write(
index 4dc65963056c64dbf2319db2ed246b1374007ee0..96d3a677224ebf70532e39073716e2e0ca374ac4 100644 (file)
@@ -86,6 +86,7 @@ read_ertr::future<rbm_metadata_header_t> RBMDevice::read_rbm_header(
   rbm_abs_addr addr)
 {
   LOG_PREFIX(RBMDevice::read_rbm_header);
+  assert(super.block_size > 0);
   return seastar::do_with(
     bufferptr(ceph::buffer::create_page_aligned(super.block_size)),
     [this, addr, FNAME](auto &bptr) {
@@ -203,9 +204,17 @@ NVMeBlockDevice::mount_ret NVMeBlockDevice::mount()
   logger().debug(" mount ");
   return open(device_path, seastar::open_flags::rw | seastar::open_flags::dsync
   ).safe_then([this] {
-    return read_rbm_header(RBM_START_ADDRESS
-    ).safe_then([](auto s) {
-      return seastar::now();
+    return stat_device(
+    ).handle_error(
+      mount_ertr::pass_further{},
+      crimson::ct_error::assert_all{
+      "Invalid error stat_device in RBMDevice::mount"}
+    ).safe_then([this](auto st) {
+      super.block_size = st.block_size;
+      return read_rbm_header(RBM_START_ADDRESS
+      ).safe_then([](auto s) {
+       return seastar::now();
+      });
     });
   }).handle_error(
     mount_ertr::pass_further{},
index 0752265b39ae702c03150c9c43d6d7c72ad8172e..97297658dcf26a669f6b190dce814a54930a4884 100644 (file)
@@ -204,8 +204,12 @@ public:
 
   mount_ret mount() final {
     return open("", seastar::open_flags::rw
-    ).safe_then([]() {
-      return mount_ertr::now();
+    ).safe_then([this]() {
+      super.block_size = TEST_BLOCK_SIZE;
+      return read_rbm_header(RBM_START_ADDRESS
+      ).safe_then([](auto s) {
+       return seastar::now();
+      });
     }).handle_error(
       mount_ertr::pass_further{},
       crimson::ct_error::assert_all{
index f5bff5376f03ab5d8b435ca29cdc8a512f032b0b..e2769bf65fe4e932ba1c8a78f3d3da300d758e63 100644 (file)
@@ -246,10 +246,10 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer
   }
 
   auto mkfs() {
-    return device->mount(
+    device_config_t config = get_rbm_ephemeral_device_config(0, 1);
+    return device->mkfs(config
     ).safe_then([this]() {
-      device_config_t config = get_rbm_ephemeral_device_config(0, 1);
-      return device->mkfs(config
+      return device->mount(
       ).safe_then([this]() {
        return cbj->open_for_mkfs(
        ).safe_then([](auto q) {
index efb1fb4b790d2daafd6a0819565337adce94da2b..9ddb7f9ad7c3ee7b218fad7e3f0416ae9f2697b0 100644 (file)
@@ -52,14 +52,14 @@ struct rbm_test_t :
 
   seastar::future<> set_up_fut() final {
     device = random_block_device::create_test_ephemeral(
-      0, DEFAULT_TEST_SIZE);
+      random_block_device::DEFAULT_TEST_CBJOURNAL_SIZE, DEFAULT_TEST_SIZE);
     block_size = device->get_block_size();
     size = device->get_available_size();
     rbm_manager.reset(new BlockRBManager(device.get(), std::string(), false));
     config = get_rbm_ephemeral_device_config(0, 1);
-    return device->mount().handle_error(crimson::ct_error::assert_all{}
+    return device->mkfs(config).handle_error(crimson::ct_error::assert_all{}
     ).then([this] {
-      return device->mkfs(config).handle_error(crimson::ct_error::assert_all{}
+      return device->mount().handle_error(crimson::ct_error::assert_all{}
       ).then([this] {
        return rbm_manager->open().handle_error(crimson::ct_error::assert_all{});
       });
index d53911b8ebf47b5e2765c6dfa5e0c3d7bb7a0949..5c5793111cf5d84a7933f846e2bd3202f5eadc3a 100644 (file)
@@ -126,11 +126,8 @@ public:
   
   seastar::future<> setup() final {
     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);
-      return rb_device->mkfs(config).handle_error(crimson::ct_error::assert_all{});
-    });
+    device_config_t config = get_rbm_ephemeral_device_config(0, 1);
+    return rb_device->mkfs(config).handle_error(crimson::ct_error::assert_all{});
   }
 
   void remount() final {}