]> git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/osd/osd_meta.cc
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / crimson / osd / osd_meta.cc
1 #include "osd_meta.h"
2
3 #include "crimson/os/cyan_collection.h"
4 #include "crimson/os/cyan_store.h"
5 #include "crimson/os/Transaction.h"
6
7 void OSDMeta::create(ceph::os::Transaction& t)
8 {
9 t.create_collection(coll->cid, 0);
10 }
11
12 void OSDMeta::store_map(ceph::os::Transaction& t,
13 epoch_t e, const bufferlist& m)
14 {
15 t.write(coll->cid, osdmap_oid(e), 0, m.length(), m);
16 }
17
18 seastar::future<bufferlist> OSDMeta::load_map(epoch_t e)
19 {
20 return store->read(coll,
21 osdmap_oid(e), 0, 0,
22 CEPH_OSD_OP_FLAG_FADVISE_WILLNEED);
23 }
24
25 void OSDMeta::store_superblock(ceph::os::Transaction& t,
26 const OSDSuperblock& superblock)
27 {
28 bufferlist bl;
29 encode(superblock, bl);
30 t.write(coll->cid, superblock_oid(), 0, bl.length(), bl);
31 }
32
33 seastar::future<OSDSuperblock> OSDMeta::load_superblock()
34 {
35 return store->read(coll, superblock_oid(), 0, 0)
36 .then([this] (bufferlist&& bl) {
37 auto p = bl.cbegin();
38 OSDSuperblock superblock;
39 decode(superblock, p);
40 return seastar::make_ready_future<OSDSuperblock>(std::move(superblock));
41 });
42 }
43
44 seastar::future<pg_pool_t,
45 std::string,
46 OSDMeta::ec_profile_t>
47 OSDMeta::load_final_pool_info(int64_t pool) {
48 return store->read(coll, final_pool_info_oid(pool),
49 0, 0).then([this] (bufferlist&& bl) {
50 auto p = bl.cbegin();
51 pg_pool_t pi;
52 string name;
53 ec_profile_t ec_profile;
54 decode(pi, p);
55 decode(name, p);
56 decode(ec_profile, p);
57 return seastar::make_ready_future<pg_pool_t,
58 string,
59 ec_profile_t>(std::move(pi),
60 std::move(name),
61 std::move(ec_profile));
62 });
63 }
64
65 ghobject_t OSDMeta::osdmap_oid(epoch_t epoch)
66 {
67 string name = fmt::format("osdmap.{}", epoch);
68 return ghobject_t(hobject_t(sobject_t(object_t(name), 0)));
69 }
70
71 ghobject_t OSDMeta::final_pool_info_oid(int64_t pool)
72 {
73 string name = fmt::format("final_pool_{}", pool);
74 return ghobject_t(hobject_t(sobject_t(object_t(name), CEPH_NOSNAP)));
75 }
76
77 ghobject_t OSDMeta::superblock_oid()
78 {
79 return ghobject_t(hobject_t(sobject_t(object_t("osd_superblock"), 0)));
80 }