// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #pragma once #include #include #include #include "osd/osd_types.h" #include "crimson/os/futurized_collection.h" #include "crimson/os/futurized_store.h" namespace ceph::os { class Transaction; } namespace crimson::os { class FuturizedCollection; class FuturizedStore; } /// metadata shared across PGs, or put in another way, /// metadata not specific to certain PGs. class OSDMeta { template using Ref = boost::intrusive_ptr; crimson::os::FuturizedStore::Shard& store; Ref coll; public: OSDMeta(Ref coll, crimson::os::FuturizedStore::Shard& store) : store{store}, coll{coll} {} auto collection() { return coll; } void create(ceph::os::Transaction& t); void store_map(ceph::os::Transaction& t, epoch_t e, const bufferlist& m); seastar::future load_map(epoch_t e); void store_superblock(ceph::os::Transaction& t, const OSDSuperblock& sb); using load_superblock_ertr = crimson::os::FuturizedStore::Shard::read_errorator; using load_superblock_ret = load_superblock_ertr::future; load_superblock_ret load_superblock(); using ec_profile_t = std::map; seastar::future> load_final_pool_info(int64_t pool); private: static ghobject_t osdmap_oid(epoch_t epoch); static ghobject_t final_pool_info_oid(int64_t pool); static ghobject_t superblock_oid(); };