From 3abaa889ab2a93e64cb6a3f359d3c04bdd9b2675 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Feb 2019 16:16:58 +0800 Subject: [PATCH] crimson/osd: pass pgid, osdmap and msgr to PG's ctor Signed-off-by: Kefu Chai --- src/crimson/osd/osd.cc | 12 +++++++++--- src/crimson/osd/pg.cc | 26 +++++++++++++++++++++++++- src/crimson/osd/pg.h | 26 +++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index cb163a1119ebd..bb3acbae39b48 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -337,10 +337,16 @@ seastar::future> OSD::load_pg(spg_t pgid) // pool was deleted; grab final pg_pool_t off disk. return meta_coll->load_final_pool_info(pgid.pool()); } - }).then([this](pg_pool_t&& pool, string&& name, ec_profile_t&& ec_profile) { - Ref pg{new PG{std::move(pool), + }).then([pgid, this](pg_pool_t&& pool, + string&& name, + ec_profile_t&& ec_profile) { + Ref pg{new PG{pgid, + pg_shard_t{whoami, pgid.shard}, + std::move(pool), std::move(name), - std::move(ec_profile)}}; + std::move(ec_profile), + osdmap, + cluster_msgr}}; return seastar::make_ready_future>(std::move(pg)); }); } diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index bc7b8c2d8a7a2..d256eb8b46d55 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -1,6 +1,30 @@ #include "pg.h" -PG::PG(pg_pool_t&& pool, std::string&& name, ec_profile_t&& ec_profile) +#include "osd/OSDMap.h" + + +PG::PG(spg_t pgid, + pg_shard_t pg_shard, + pg_pool_t&& pool, + std::string&& name, + ec_profile_t&& ec_profile, + cached_map_t osdmap, + ceph::net::Messenger* msgr) + : pgid{pgid}, + whoami{pg_shard}, + pool{std::move(pool)}, + osdmap{osdmap}, + msgr{msgr} { // TODO } + +epoch_t PG::get_osdmap_epoch() const +{ + return osdmap->get_epoch(); +} + +pg_shard_t PG::get_whoami() const +{ + return whoami; +} diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 4bb672f4b08af..05dc8028cb4bd 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -5,17 +5,41 @@ #include #include +#include #include #include "osd/osd_types.h" template using Ref = boost::intrusive_ptr; +class OSDMap; + +namespace ceph::net { + class Messenger; +} class PG : public boost::intrusive_ref_counter< PG, boost::thread_unsafe_counter> { using ec_profile_t = std::map; + using cached_map_t = boost::local_shared_ptr; + public: - PG(pg_pool_t&& pool, std::string&& name, ec_profile_t&& ec_profile); + PG(spg_t pgid, + pg_shard_t pg_shard, + pg_pool_t&& pool, + std::string&& name, + ec_profile_t&& ec_profile, + cached_map_t osdmap, + ceph::net::Messenger* msgr); + + epoch_t get_osdmap_epoch() const; + pg_shard_t get_whoami() const; + +private: + const spg_t pgid; + pg_shard_t whoami; + pg_pool_t pool; + cached_map_t osdmap; + ceph::net::Messenger* msgr = nullptr; }; -- 2.39.5