]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/segment_manager: refactor init interface and ephemeral
authorSamuel Just <sjust@redhat.com>
Mon, 28 Sep 2020 07:08:54 +0000 (00:08 -0700)
committerSamuel Just <sjust@redhat.com>
Mon, 7 Dec 2020 19:58:29 +0000 (11:58 -0800)
Just remove init from the interface for now.  Real implementations
will need some form of mkfs/mount machinery to bootstrap.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/CMakeLists.txt
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/segment_manager.cc [deleted file]
src/crimson/os/seastore/segment_manager.h
src/crimson/os/seastore/segment_manager/ephemeral.cc
src/crimson/os/seastore/segment_manager/ephemeral.h
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_seastore_cache.cc
src/test/crimson/seastore/test_seastore_journal.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index 4c265bcf231f89937fbea1ac4e558ab4f4c3e23c..3e04972223b314f48a76664d69b0af8af77435f3 100644 (file)
@@ -2,7 +2,6 @@ add_library(crimson-seastore STATIC
   cached_extent.cc
   seastore_types.cc
   segment_manager/ephemeral.cc
-  segment_manager.cc
   transaction_manager.cc
   journal.cc
   cache.cc
index e446f474533b2425c9545591b44d0644a6da45b8..7cd2193debe69e38ac8eec43577e1062ac7dacd0 100644 (file)
@@ -15,7 +15,7 @@
 
 #include "crimson/os/futurized_collection.h"
 
-#include "crimson/os/seastore/segment_manager.h"
+#include "crimson/os/seastore/segment_manager/ephemeral.h"
 #include "crimson/os/seastore/transaction_manager.h"
 #include "crimson/os/seastore/onode_manager.h"
 #include "crimson/os/seastore/cache.h"
@@ -37,8 +37,7 @@ struct SeastoreCollection final : public FuturizedCollection {
 };
 
 SeaStore::SeaStore(const std::string& path)
-  : segment_manager(segment_manager::create_ephemeral(
-                     segment_manager::DEFAULT_TEST_EPHEMERAL)),
+  : segment_manager(segment_manager::create_test_ephemeral() /* TODO */),
     segment_cleaner(
       std::make_unique<SegmentCleaner>(
        SegmentCleaner::config_t::default_from_segment_manager(
diff --git a/src/crimson/os/seastore/segment_manager.cc b/src/crimson/os/seastore/segment_manager.cc
deleted file mode 100644 (file)
index b20bc69..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include <iostream>
-
-#include "crimson/os/seastore/segment_manager/ephemeral.h"
-
-namespace crimson::os::seastore::segment_manager {
-
-SegmentManagerRef create_ephemeral(ephemeral_config_t config) {
-  return SegmentManagerRef{new EphemeralSegmentManager(config)};
-}
-
-std::ostream &operator<<(std::ostream &lhs, const ephemeral_config_t &c) {
-  return lhs << "ephemeral_config_t(size=" << c.size << ", block_size=" << c.block_size
-            << ", segment_size=" << c.segment_size << ")";
-}
-
-}
index bc6ba1b81c18754f40939f59acb54b56fadde34c..d49841d304c8f9a8fa8d56c3fb36ab5778701bc0 100644 (file)
@@ -79,12 +79,6 @@ constexpr size_t PADDR_SIZE = sizeof(paddr_t);
 
 class SegmentManager {
 public:
-  using init_ertr = crimson::errorator<
-    crimson::ct_error::enospc,
-    crimson::ct_error::invarg,
-    crimson::ct_error::erange>;
-  virtual init_ertr::future<> init() = 0;
-
   using open_ertr = crimson::errorator<
     crimson::ct_error::input_output_error,
     crimson::ct_error::invarg,
@@ -130,22 +124,4 @@ public:
 };
 using SegmentManagerRef = std::unique_ptr<SegmentManager>;
 
-namespace segment_manager {
-
-struct ephemeral_config_t {
-  size_t size;
-  size_t block_size;
-  size_t segment_size;
-};
-constexpr ephemeral_config_t DEFAULT_TEST_EPHEMERAL = {
-  1 << 30,
-  4 << 10,
-  8 << 20
-};
-
-std::ostream &operator<<(std::ostream &, const ephemeral_config_t &);
-SegmentManagerRef create_ephemeral(ephemeral_config_t config);
-
-}
-
 }
index ee8e87e457fb9d99993ddf7a02a9b1dd06d2b3da..952cf2c678c293527769eaf421ce72104e670fd3 100644 (file)
@@ -17,6 +17,16 @@ namespace {
 
 namespace crimson::os::seastore::segment_manager {
 
+std::ostream &operator<<(std::ostream &lhs, const ephemeral_config_t &c) {
+  return lhs << "ephemeral_config_t(size=" << c.size << ", block_size=" << c.block_size
+            << ", segment_size=" << c.segment_size << ")";
+}
+
+EphemeralSegmentManagerRef create_test_ephemeral() {
+  return EphemeralSegmentManagerRef(
+    new EphemeralSegmentManager(DEFAULT_TEST_EPHEMERAL));
+}
+
 EphemeralSegment::EphemeralSegment(
   EphemeralSegmentManager &manager, segment_id_t id)
   : manager(manager), id(id) {}
@@ -44,9 +54,6 @@ Segment::write_ertr::future<> EphemeralSegment::write(
   return manager.segment_write({id, offset}, bl);
 }
 
-EphemeralSegmentManager::EphemeralSegmentManager(ephemeral_config_t config)
-  : config(config) {}
-
 Segment::close_ertr::future<> EphemeralSegmentManager::segment_close(segment_id_t id)
 {
   if (segment_state[id] != segment_state_t::OPEN)
index 4b43883b11218c348aa455aa627a2ae194895318..d5b77533576a0f5678c2d57cedfb764a21ce5c34 100644 (file)
 namespace crimson::os::seastore::segment_manager {
 
 class EphemeralSegmentManager;
+using EphemeralSegmentManagerRef = std::unique_ptr<EphemeralSegmentManager>;
+
+struct ephemeral_config_t {
+  size_t size = 0;
+  size_t block_size = 0;
+  size_t segment_size = 0;
+};
+
+constexpr ephemeral_config_t DEFAULT_TEST_EPHEMERAL = {
+  1 << 30,
+  4 << 10,
+  8 << 20
+};
+
+std::ostream &operator<<(std::ostream &, const ephemeral_config_t &);
+EphemeralSegmentManagerRef create_test_ephemeral();
+
 class EphemeralSegment final : public Segment {
   friend class EphemeralSegmentManager;
   EphemeralSegmentManager &manager;
@@ -48,10 +65,14 @@ class EphemeralSegmentManager final : public SegmentManager {
   Segment::close_ertr::future<> segment_close(segment_id_t id);
 
 public:
-  EphemeralSegmentManager(ephemeral_config_t config);
+  EphemeralSegmentManager(ephemeral_config_t config) : config(config) {}
   ~EphemeralSegmentManager();
 
-  init_ertr::future<> init() final;
+  using init_ertr = crimson::errorator<
+    crimson::ct_error::enospc,
+    crimson::ct_error::invarg,
+    crimson::ct_error::erange>;
+  init_ertr::future<> init();
 
   open_ertr::future<SegmentRef> open(segment_id_t id) final;
 
index 06736f5cc6bcb542c479999718ea4e8d10339e9c..60d5c3497ee71655d9cd62133183c37c61426b4d 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "crimson/os/seastore/journal.h"
 #include "crimson/os/seastore/cache.h"
-#include "crimson/os/seastore/segment_manager.h"
+#include "crimson/os/seastore/segment_manager/ephemeral.h"
 #include "crimson/os/seastore/lba_manager/btree/btree_lba_manager.h"
 
 #include "test/crimson/seastore/test_block.h"
@@ -26,7 +26,7 @@ using namespace crimson::os::seastore::lba_manager::btree;
 
 struct btree_lba_manager_test :
   public seastar_test_suite_t, JournalSegmentProvider {
-  SegmentManagerRef segment_manager;
+  segment_manager::EphemeralSegmentManagerRef segment_manager;
   Journal journal;
   Cache cache;
   BtreeLBAManagerRef lba_manager;
@@ -34,7 +34,7 @@ struct btree_lba_manager_test :
   const size_t block_size;
 
   btree_lba_manager_test()
-    : segment_manager(create_ephemeral(segment_manager::DEFAULT_TEST_EPHEMERAL)),
+    : segment_manager(segment_manager::create_test_ephemeral()),
       journal(*segment_manager),
       cache(*segment_manager),
       lba_manager(new BtreeLBAManager(*segment_manager, cache)),
@@ -66,9 +66,7 @@ struct btree_lba_manager_test :
        cache.complete_commit(*t, addr, seq);
        lba_manager->complete_transaction(*t);
       },
-      crimson::ct_error::all_same_way([](auto e) {
-       ceph_assert(0 == "Hit error submitting to journal");
-      }));
+      crimson::ct_error::assert_all{});
   }
 
   seastar::future<> set_up_fut() final {
index e6b0fa7f393f1874339d8b7833ef2379322b67aa..913668b08355a22b2c9f20bff8cb3496a4157e95 100644 (file)
@@ -20,14 +20,14 @@ namespace {
 }
 
 struct cache_test_t : public seastar_test_suite_t {
-  segment_manager::EphemeralSegmentManager segment_manager;
+  segment_manager::EphemeralSegmentManagerRef segment_manager;
   Cache cache;
   paddr_t current{0, 0};
   journal_seq_t seq;
 
   cache_test_t()
-    : segment_manager(segment_manager::DEFAULT_TEST_EPHEMERAL),
-      cache(segment_manager) {}
+    : segment_manager(segment_manager::create_test_ephemeral()),
+      cache(*segment_manager) {}
 
   seastar::future<std::optional<paddr_t>> submit_transaction(
     TransactionRef t) {
@@ -43,14 +43,14 @@ struct cache_test_t : public seastar_test_suite_t {
     }
 
     ceph_assert((segment_off_t)bl.length() <
-               segment_manager.get_segment_size());
+               segment_manager->get_segment_size());
     if (current.offset + (segment_off_t)bl.length() >
-       segment_manager.get_segment_size())
+       segment_manager->get_segment_size())
       current = paddr_t{current.segment + 1, 0};
 
     auto prev = current;
     current.offset += bl.length();
-    return segment_manager.segment_write(
+    return segment_manager->segment_write(
       prev,
       std::move(bl),
       true
@@ -70,7 +70,8 @@ struct cache_test_t : public seastar_test_suite_t {
   }
 
   seastar::future<> set_up_fut() final {
-    return segment_manager.init().safe_then(
+    return segment_manager->init(
+    ).safe_then(
       [this] {
        return seastar::do_with(
          make_transaction(),
index 197ff4cfcf4e1e74ed6c0b5ec64fab248d01e64f..0bed505ffa1d1c7ed10b6e2146bedfbd3e84feba 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "crimson/common/log.h"
 #include "crimson/os/seastore/journal.h"
-#include "crimson/os/seastore/segment_manager.h"
+#include "crimson/os/seastore/segment_manager/ephemeral.h"
 
 using namespace crimson;
 using namespace crimson::os;
@@ -63,7 +63,7 @@ struct record_validator_t {
 };
 
 struct journal_test_t : seastar_test_suite_t, JournalSegmentProvider {
-  std::unique_ptr<SegmentManager> segment_manager;
+  segment_manager::EphemeralSegmentManagerRef segment_manager;
   std::unique_ptr<Journal> journal;
 
   std::vector<record_validator_t> records;
@@ -73,7 +73,7 @@ struct journal_test_t : seastar_test_suite_t, JournalSegmentProvider {
   const segment_off_t block_size;
 
   journal_test_t()
-    : segment_manager(create_ephemeral(segment_manager::DEFAULT_TEST_EPHEMERAL)),
+    : segment_manager(segment_manager::create_test_ephemeral()),
       block_size(segment_manager->get_block_size())
   {
   }
index 053f0f9f71dc18a2ba3815e872d742010bc24573..d13d4c65ee3a58c89657e9ef24ee9f46ec823669 100644 (file)
@@ -25,9 +25,7 @@ protected:
   std::unique_ptr<TransactionManager> tm;
 
   TMTestState()
-    : segment_manager(
-      (segment_manager::EphemeralSegmentManager*)create_ephemeral(
-       segment_manager::DEFAULT_TEST_EPHEMERAL).release()) {
+    : segment_manager(segment_manager::create_test_ephemeral()) {
     init();
   }
 
@@ -55,7 +53,8 @@ protected:
   }
 
   seastar::future<> tm_setup() {
-    return segment_manager->init().safe_then([this] {
+    return segment_manager->init(
+    ).safe_then([this] {
       return tm->mkfs();
     }).safe_then([this] {
       return tm->close();