if (auto found = osdmaps.find(e); found) {
return seastar::make_ready_future<cached_map_t>(std::move(found));
} else {
- return load_map_bl(e).then([e, this](bufferlist bl) {
- auto osdmap = std::make_unique<OSDMap>();
- osdmap->decode(bl);
+ return load_map(e).then([e, this](unique_ptr<OSDMap> osdmap) {
return seastar::make_ready_future<cached_map_t>(
osdmaps.insert(e, std::move(osdmap)));
});
}
}
+seastar::future<std::unique_ptr<OSDMap>> OSD::load_map(epoch_t e)
+{
+ return load_map_bl(e).then([e, this](bufferlist bl) {
+ auto o = std::make_unique<OSDMap>();
+ o->decode(bl);
+ return seastar::make_ready_future<decltype(o)>(std::move(o));
+ });
+}
+
seastar::future<> OSD::store_maps(ceph::os::Transaction& t,
epoch_t start, Ref<MOSDMap> m)
{
// OSDMapService methods
seastar::future<cached_map_t> get_map(epoch_t e) override;
cached_map_t get_map() const override;
-
+ seastar::future<std::unique_ptr<OSDMap>> load_map(epoch_t e);
seastar::future<bufferlist> load_map_bl(epoch_t e);
void store_map_bl(ceph::os::Transaction& t,
epoch_t e, bufferlist&& bl);