From 60a22da338867e87a8f766f2aabfdea997ff799e Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 25 Feb 2019 21:03:12 +0800 Subject: [PATCH] crimson/osd: add PG::read_state() to load pg_info and past_intervals Signed-off-by: Kefu Chai --- src/crimson/osd/osd.cc | 4 +++- src/crimson/osd/pg.cc | 24 ++++++++++++++++++++++++ src/crimson/osd/pg.h | 14 ++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index bb3acbae39b..931ee66f0da 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -347,7 +347,9 @@ seastar::future> OSD::load_pg(spg_t pgid) std::move(ec_profile), osdmap, cluster_msgr}}; - return seastar::make_ready_future>(std::move(pg)); + return pg->read_state(store.get()).then([pg] { + return seastar::make_ready_future>(std::move(pg)); + }); }); } diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index d256eb8b46d..7473a595164 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -2,6 +2,9 @@ #include "osd/OSDMap.h" +#include "crimson/os/cyan_store.h" +#include "crimson/osd/pg_meta.h" + PG::PG(spg_t pgid, pg_shard_t pg_shard, @@ -13,12 +16,23 @@ PG::PG(spg_t pgid, : pgid{pgid}, whoami{pg_shard}, pool{std::move(pool)}, + info{pgid}, osdmap{osdmap}, msgr{msgr} { // TODO } +seastar::future<> PG::read_state(ceph::os::CyanStore* store) +{ + return PGMeta{store, pgid}.load().then( + [this](pg_info_t pg_info_, PastIntervals past_intervals_) { + last_written_info = std::move(pg_info_); + past_intervals = std::move(past_intervals_); + return seastar::now(); + }); +} + epoch_t PG::get_osdmap_epoch() const { return osdmap->get_epoch(); @@ -28,3 +42,13 @@ pg_shard_t PG::get_whoami() const { return whoami; } + +const pg_info_t& PG::get_info() const +{ + return info; +} + +const PastIntervals& PG::get_past_intervals() const +{ + return past_intervals; +} diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 05dc8028cb4..ce770825f24 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -17,6 +17,10 @@ namespace ceph::net { class Messenger; } +namespace ceph::os { + class CyanStore; +} + class PG : public boost::intrusive_ref_counter< PG, boost::thread_unsafe_counter> @@ -34,12 +38,22 @@ public: ceph::net::Messenger* msgr); epoch_t get_osdmap_epoch() const; + const pg_info_t& get_info() const; + const PastIntervals& get_past_intervals() const; pg_shard_t get_whoami() const; + seastar::future<> read_state(ceph::os::CyanStore* store); + private: const spg_t pgid; pg_shard_t whoami; pg_pool_t pool; + //< pg state + pg_info_t info; + //< last written info, for fast info persistence + pg_info_t last_written_info; + PastIntervals past_intervals; + cached_map_t osdmap; ceph::net::Messenger* msgr = nullptr; }; -- 2.39.5