cached_extent.cc
seastore_types.cc
segment_manager/ephemeral.cc
- segment_manager.cc
transaction_manager.cc
journal.cc
cache.cc
#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"
};
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(
+++ /dev/null
-// -*- 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 << ")";
-}
-
-}
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,
};
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);
-
-}
-
}
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) {}
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)
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;
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;
#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"
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;
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)),
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 {
}
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) {
}
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
}
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(),
#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;
};
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;
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())
{
}
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();
}
}
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();