1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
6 #include <fmt/format.h>
7 #include <fmt/ostream.h>
9 #include "crimson/os/futurized_collection.h"
10 #include "crimson/os/futurized_store.h"
11 #include "os/Transaction.h"
14 using read_errorator
= crimson::os::FuturizedStore::Shard::read_errorator
;
16 void OSDMeta::create(ceph::os::Transaction
& t
)
18 t
.create_collection(coll
->get_cid(), 0);
21 void OSDMeta::store_map(ceph::os::Transaction
& t
,
22 epoch_t e
, const bufferlist
& m
)
24 t
.write(coll
->get_cid(), osdmap_oid(e
), 0, m
.length(), m
);
27 seastar::future
<bufferlist
> OSDMeta::load_map(epoch_t e
)
29 return store
.read(coll
,
31 CEPH_OSD_OP_FLAG_FADVISE_WILLNEED
).handle_error(
32 read_errorator::all_same_way([e
] {
33 throw std::runtime_error(fmt::format("read gave enoent on {}",
38 void OSDMeta::store_superblock(ceph::os::Transaction
& t
,
39 const OSDSuperblock
& superblock
)
42 encode(superblock
, bl
);
43 t
.write(coll
->get_cid(), superblock_oid(), 0, bl
.length(), bl
);
46 OSDMeta::load_superblock_ret
OSDMeta::load_superblock()
49 coll
, superblock_oid(), 0, 0
50 ).safe_then([] (bufferlist
&& bl
) {
52 OSDSuperblock superblock
;
53 decode(superblock
, p
);
54 return seastar::make_ready_future
<OSDSuperblock
>(std::move(superblock
));
58 seastar::future
<std::tuple
<pg_pool_t
,
60 OSDMeta::ec_profile_t
>>
61 OSDMeta::load_final_pool_info(int64_t pool
) {
62 return store
.read(coll
, final_pool_info_oid(pool
),
63 0, 0).safe_then([] (bufferlist
&& bl
) {
67 ec_profile_t ec_profile
;
70 decode(ec_profile
, p
);
71 return seastar::make_ready_future
<std::tuple
<pg_pool_t
,
74 std::make_tuple(std::move(pi
),
76 std::move(ec_profile
)));
77 },read_errorator::all_same_way([pool
] {
78 throw std::runtime_error(fmt::format("read gave enoent on {}",
79 final_pool_info_oid(pool
)));
83 ghobject_t
OSDMeta::osdmap_oid(epoch_t epoch
)
85 string name
= fmt::format("osdmap.{}", epoch
);
86 return ghobject_t(hobject_t(sobject_t(object_t(name
), 0)));
89 ghobject_t
OSDMeta::final_pool_info_oid(int64_t pool
)
91 string name
= fmt::format("final_pool_{}", pool
);
92 return ghobject_t(hobject_t(sobject_t(object_t(name
), CEPH_NOSNAP
)));
95 ghobject_t
OSDMeta::superblock_oid()
97 return ghobject_t(hobject_t(sobject_t(object_t("osd_superblock"), 0)));