seastar::future<Ref<PG>> OSD::load_pg(spg_t pgid)
{
- return PGMeta{store.get(), pgid}.get_epoch().then([this](epoch_t e) {
+ return seastar::do_with(PGMeta(store.get(), pgid), [this, pgid] (auto& pg_meta) {
+ return pg_meta.get_epoch();
+ }).then([this](epoch_t e) {
return get_map(e);
}).then([pgid, this] (auto&& create_map) {
return make_pg(std::move(create_map), pgid, false);
- }).then([this, pgid](Ref<PG> pg) {
+ }).then([this](Ref<PG> pg) {
return pg->read_state(store.get()).then([pg] {
- return seastar::make_ready_future<Ref<PG>>(std::move(pg));
+ return seastar::make_ready_future<Ref<PG>>(std::move(pg));
});
}).handle_exception([pgid](auto ep) {
logger().info("pg {} saw exception on load {}", pgid, ep);
seastar::future<> PG::read_state(crimson::os::FuturizedStore* store)
{
- return PGMeta{store, pgid}.load(
- ).then([this, store](pg_info_t pg_info, PastIntervals past_intervals) {
+ return seastar::do_with(PGMeta(store, pgid), [this, store] (auto& pg_meta) {
+ return pg_meta.load();
+ }).then([this, store](pg_info_t pg_info, PastIntervals past_intervals) {
return peering_state.init_from_disk_state(
std::move(pg_info),
std::move(past_intervals),