level: dev
desc: default logical address space reservation for seastore objects' data
default: 16777216
-- name: seastore_default_object_metadata_reservation
- type: uint
- level: dev
- desc: default logical address space reservation for seastore objects' metadata
- default: 16777216
# TODO: implement sub-extent checksum and deprecate this configuration.
- name: seastore_full_integrity_check
type: bool
{
protected:
virtual laddr_t get_hint() const = 0;
- const uint32_t default_metadata_offset = 0;
- const uint32_t default_metadata_range = 0;
const hobject_t hobj;
public:
- Onode(uint32_t ddr, uint32_t dmr, const hobject_t &hobj)
- : default_metadata_offset(ddr),
- default_metadata_range(dmr),
- hobj(hobj)
- {}
+ explicit Onode(const hobject_t &hobj) : hobj(hobj) {}
virtual bool is_alive() const = 0;
virtual const onode_layout_t &get_layout() const = 0;
virtual void swap_layout(Transaction&, Onode&) = 0;
laddr_t get_metadata_hint(uint64_t block_size) const {
- assert(default_metadata_offset);
- assert(default_metadata_range);
- uint64_t range_blocks = default_metadata_range / block_size;
- auto random_offset = default_metadata_offset +
- (((uint32_t)std::rand() % range_blocks) * block_size);
- return (get_hint() + random_offset).checked_to_laddr();
+ return get_hint();
}
laddr_t get_data_hint() const {
return get_hint();
DEBUGT("no entry for {}", trans, hoid);
return crimson::ct_error::enoent::make();
}
- auto val = OnodeRef(new FLTreeOnode(
- default_data_reservation,
- default_metadata_range,
- hoid.hobj,
- cursor.value()));
+ auto val = OnodeRef(new FLTreeOnode(hoid.hobj, cursor.value()));
return get_onode_iertr::make_ready_future<OnodeRef>(
val
);
return tree.insert(
trans, hoid,
OnodeTree::tree_value_config_t{sizeof(onode_layout_t)}
- ).si_then([this, &trans, &hoid, FNAME](auto p)
+ ).si_then([&trans, &hoid, FNAME](auto p)
-> get_or_create_onode_ret {
auto [cursor, created] = std::move(p);
- auto onode = new FLTreeOnode(
- default_data_reservation,
- default_metadata_range,
- hoid.hobj,
- cursor.value());
+ auto onode = new FLTreeOnode(hoid.hobj, cursor.value());
if (created) {
DEBUGT("created onode for entry for {}", trans, hoid);
onode->create_default_layout(trans);
FLTreeOnode(const FLTreeOnode&) = default;
FLTreeOnode& operator=(const FLTreeOnode&) = delete;
- template <typename... T>
- FLTreeOnode(uint32_t ddr, uint32_t dmr, const hobject_t &hobj, T&&... args)
- : Onode(ddr, dmr, hobj),
- Value(std::forward<T>(args)...) {}
-
template <typename... T>
FLTreeOnode(const hobject_t &hobj, T&&... args)
- : Onode(0, 0, hobj),
+ : Onode(hobj),
Value(std::forward<T>(args)...) {}
struct Recorder : public ValueDeltaRecorder {
OnodeTree tree;
uint32_t default_data_reservation = 0;
- uint32_t default_metadata_offset = 0;
- uint32_t default_metadata_range = 0;
public:
FLTreeOnodeManager(TransactionManager &tm) :
tree(NodeExtentManager::create_seastore(tm)),
default_data_reservation(
- get_conf<uint64_t>("seastore_default_max_object_size")),
- default_metadata_offset(default_data_reservation),
- default_metadata_range(
- get_conf<uint64_t>("seastore_default_object_metadata_reservation"))
+ get_conf<uint64_t>("seastore_default_max_object_size"))
{}
mkfs_ret mkfs(Transaction &t) {
using namespace crimson::os::seastore;
#define MAX_OBJECT_SIZE (16<<20)
-#define DEFAULT_OBJECT_DATA_RESERVATION (16<<20)
-#define DEFAULT_OBJECT_METADATA_RESERVATION (16<<20)
namespace {
[[maybe_unused]] seastar::logger& logger() {
onode_layout_t layout;
public:
- TestOnode(uint32_t ddr, uint32_t dmr) : Onode(ddr, dmr, hobject_t()) {}
+ TestOnode() : Onode(hobject_t()) {}
const onode_layout_t &get_layout() const final {
return layout;
}
}
seastar::future<> set_up_fut() final {
- onode = new TestOnode(
- DEFAULT_OBJECT_DATA_RESERVATION,
- DEFAULT_OBJECT_METADATA_RESERVATION);
+ onode = new TestOnode();
known_contents = buffer::create(4<<20 /* 4MB */);
memset(known_contents.c_str(), 0, known_contents.length());
size = 0;