]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: add seastore to FuturizedStore::create
authorSamuel Just <sjust@redhat.com>
Thu, 22 Apr 2021 23:57:19 +0000 (16:57 -0700)
committerSamuel Just <sjust@redhat.com>
Fri, 7 May 2021 07:36:44 +0000 (00:36 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/common/options/global.yaml.in
src/crimson/os/futurized_store.cc
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h

index a6a7da1311f0fad76621bd1b0f4a16aeda2a345f..a1459d62cd3be157dd8b86a99f906b9ac81e6c4f 100644 (file)
@@ -6236,6 +6236,7 @@ options:
   - filestore
   - memstore
   - kstore
+  - seastore
   flags:
   - create
   with_legacy: true
index bb73c34787f126e7cd36c36dd79f195c5545a525..3b594fb49694f15a5c5c7963afa8ca650aae6a2e 100644 (file)
@@ -1,6 +1,7 @@
 #include "futurized_store.h"
 #include "cyanstore/cyan_store.h"
 #include "alienstore/alien_store.h"
+#include "seastore/seastore.h"
 
 namespace crimson::os {
 
@@ -13,6 +14,8 @@ FuturizedStore::create(const std::string& type,
     return std::make_unique<crimson::os::CyanStore>(data);
   } else if (type == "bluestore") {
     return std::make_unique<crimson::os::AlienStore>(data, values);
+  } else if (type == "seastore") {
+    return crimson::os::seastore::make_seastore(data, values);
   } else {
     ceph_abort_msgf("unsupported objectstore type: %s", type.c_str());
     return {};
index 62101430abfe88d39de32d0bf85cff746be450dc..191ca502ee427526f66c0a6cfb06a01504f04dfc 100644 (file)
 
 #include "crimson/os/futurized_collection.h"
 
+#include "crimson/os/seastore/segment_cleaner.h"
+#include "crimson/os/seastore/segment_manager/block.h"
+#include "crimson/os/seastore/collection_manager/flat_collection_manager.h"
+#include "crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h"
 #include "crimson/os/seastore/omap_manager/btree/btree_omap_manager.h"
 #include "crimson/os/seastore/segment_manager/ephemeral.h"
 #include "crimson/os/seastore/onode_manager.h"
@@ -1046,4 +1050,37 @@ uuid_d SeaStore::get_fsid() const
   return segment_manager->get_meta().seastore_id;
 }
 
+std::unique_ptr<SeaStore> make_seastore(
+  const std::string &device,
+  const ConfigValues &config)
+{
+  auto sm = std::make_unique<
+    segment_manager::block::BlockSegmentManager
+    >(device + "/block");
+
+  auto segment_cleaner = std::make_unique<SegmentCleaner>(
+    SegmentCleaner::config_t::get_default(),
+    false /* detailed */);
+
+  auto journal = std::make_unique<Journal>(*sm);
+  auto cache = std::make_unique<Cache>(*sm);
+  auto lba_manager = lba_manager::create_lba_manager(*sm, *cache);
+
+  journal->set_segment_provider(&*segment_cleaner);
+
+  auto tm = std::make_unique<TransactionManager>(
+    *sm,
+    std::move(segment_cleaner),
+    std::move(journal),
+    std::move(cache),
+    std::move(lba_manager));
+
+  auto cm = std::make_unique<collection_manager::FlatCollectionManager>(*tm);
+  return std::make_unique<SeaStore>(
+    std::move(sm),
+    std::move(tm),
+    std::move(cm),
+    std::make_unique<crimson::os::seastore::onode::FLTreeOnodeManager>(*tm));
+}
+
 }
index e673e4fff7412999c3fb24e8ef7922e68df233d6..8b28b715c829f71024cb8bc55e9f51cb33e73ceb 100644 (file)
@@ -17,6 +17,7 @@
 #include "os/Transaction.h"
 #include "crimson/os/futurized_collection.h"
 #include "crimson/os/futurized_store.h"
+
 #include "crimson/os/seastore/transaction.h"
 #include "crimson/os/seastore/onode_manager.h"
 #include "crimson/os/seastore/omap_manager.h"
@@ -306,4 +307,7 @@ private:
   boost::intrusive_ptr<SeastoreCollection> _get_collection(const coll_t& cid);
 };
 
+std::unique_ptr<SeaStore> make_seastore(
+  const std::string &device,
+  const ConfigValues &config);
 }