#include "os/Transaction.h"
#include "crimson/common/buffer_io.h"
-#include "crimson/common/config_proxy.h"
#include "crimson/os/futurized_collection.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"
namespace {
seastar::logger& logger() {
namespace crimson::os::seastore {
+SeaStore::~SeaStore() {}
+
struct SeastoreCollection final : public FuturizedCollection {
template <typename... T>
SeastoreCollection(T&&... args) :
FuturizedCollection(std::forward<T>(args)...) {}
};
-SeaStore::SeaStore(const std::string& path)
- : segment_manager(segment_manager::create_test_ephemeral() /* TODO */),
- segment_cleaner(
- std::make_unique<SegmentCleaner>(
- SegmentCleaner::config_t::default_from_segment_manager(
- *segment_manager))),
- cache(std::make_unique<Cache>(*segment_manager)),
- journal(new Journal(*segment_manager)),
- lba_manager(
- lba_manager::create_lba_manager(*segment_manager, *cache)),
- transaction_manager(
- new TransactionManager(
- *segment_manager,
- *segment_cleaner,
- *journal,
- *cache,
- *lba_manager)),
- onode_manager(onode_manager::create_ephemeral())
-{
- journal->set_segment_provider(&*segment_cleaner);
- segment_cleaner->set_extent_callback(&*transaction_manager);
-}
-
-SeaStore::~SeaStore() = default;
-
seastar::future<> SeaStore::stop()
{
return seastar::now();
{
return seastar::do_with(
_t.begin(),
- transaction_manager->create_transaction(),
+ transaction_manager.create_transaction(),
std::vector<OnodeRef>(),
std::move(_t),
std::move(_ch),
[this, &iter, &trans, &onodes, &t, &ch]() {
return _do_transaction_step(trans, ch, onodes, iter).safe_then(
[this, &trans] {
- return transaction_manager->submit_transaction(std::move(trans));
+ return transaction_manager.submit_transaction(std::move(trans));
}).handle_error(
// TODO: add errorator::do_until
crimson::ct_error::eagain::handle([]() {
#include <optional>
#include <seastar/core/future.hh>
-#include "osd/osd_types.h"
#include "include/uuid.h"
#include "os/Transaction.h"
-#include "crimson/os/seastore/segment_cleaner.h"
#include "crimson/os/futurized_store.h"
-#include "transaction.h"
+#include "crimson/os/seastore/transaction.h"
+#include "crimson/os/seastore/onode_manager.h"
namespace crimson::os::seastore {
class SeastoreCollection;
-class SegmentManager;
-class OnodeManager;
class Onode;
using OnodeRef = boost::intrusive_ptr<Onode>;
-class Journal;
-class LBAManager;
class TransactionManager;
-class Cache;
class SeaStore final : public FuturizedStore {
uuid_d osd_fsid;
public:
- SeaStore(const std::string& path);
- ~SeaStore() final;
+ SeaStore(TransactionManager &tm) :
+ transaction_manager(tm) {}
+ ~SeaStore();
+
seastar::future<> stop() final;
seastar::future<> mount() final;
seastar::future<> umount() final;
}
private:
- std::unique_ptr<SegmentManager> segment_manager;
- std::unique_ptr<SegmentCleaner> segment_cleaner;
- std::unique_ptr<Cache> cache;
- std::unique_ptr<Journal> journal;
- std::unique_ptr<LBAManager> lba_manager;
- std::unique_ptr<TransactionManager> transaction_manager;
+ TransactionManager &transaction_manager;
std::unique_ptr<OnodeManager> onode_manager;
-
using write_ertr = crimson::errorator<
crimson::ct_error::input_output_error>;
write_ertr::future<> _do_transaction_step(