From: Kefu Chai Date: Fri, 22 Feb 2019 08:16:58 +0000 (+0800) Subject: crimson/osd: pass pgid, osdmap and msgr to PG's ctor X-Git-Tag: v15.0.0~187^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=3abaa889ab2a93e64cb6a3f359d3c04bdd9b2675;p=ceph-ci.git crimson/osd: pass pgid, osdmap and msgr to PG's ctor Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index cb163a1119e..bb3acbae39b 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 bc7b8c2d8a7..d256eb8b46d 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 4bb672f4b08..05dc8028cb4 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; };