From fcff4cfb6b3744870260721ff9456df9107bdb6d Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 22 Apr 2021 16:57:19 -0700 Subject: [PATCH] crimson/os/seastore: add seastore to FuturizedStore::create Signed-off-by: Samuel Just --- src/common/options/global.yaml.in | 1 + src/crimson/os/futurized_store.cc | 3 +++ src/crimson/os/seastore/seastore.cc | 37 +++++++++++++++++++++++++++++ src/crimson/os/seastore/seastore.h | 4 ++++ 4 files changed, 45 insertions(+) diff --git a/src/common/options/global.yaml.in b/src/common/options/global.yaml.in index a6a7da1311f0f..a1459d62cd3be 100644 --- a/src/common/options/global.yaml.in +++ b/src/common/options/global.yaml.in @@ -6236,6 +6236,7 @@ options: - filestore - memstore - kstore + - seastore flags: - create with_legacy: true diff --git a/src/crimson/os/futurized_store.cc b/src/crimson/os/futurized_store.cc index bb73c34787f12..3b594fb49694f 100644 --- a/src/crimson/os/futurized_store.cc +++ b/src/crimson/os/futurized_store.cc @@ -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(data); } else if (type == "bluestore") { return std::make_unique(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 {}; diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 62101430abfe8..191ca502ee427 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -16,6 +16,10 @@ #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 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::config_t::get_default(), + false /* detailed */); + + auto journal = std::make_unique(*sm); + auto cache = std::make_unique(*sm); + auto lba_manager = lba_manager::create_lba_manager(*sm, *cache); + + journal->set_segment_provider(&*segment_cleaner); + + auto tm = std::make_unique( + *sm, + std::move(segment_cleaner), + std::move(journal), + std::move(cache), + std::move(lba_manager)); + + auto cm = std::make_unique(*tm); + return std::make_unique( + std::move(sm), + std::move(tm), + std::move(cm), + std::make_unique(*tm)); +} + } diff --git a/src/crimson/os/seastore/seastore.h b/src/crimson/os/seastore/seastore.h index e673e4fff7412..8b28b715c829f 100644 --- a/src/crimson/os/seastore/seastore.h +++ b/src/crimson/os/seastore/seastore.h @@ -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 _get_collection(const coll_t& cid); }; +std::unique_ptr make_seastore( + const std::string &device, + const ConfigValues &config); } -- 2.39.5