From: Sage Weil Date: Mon, 6 Feb 2017 18:03:52 +0000 (-0500) Subject: osd/OSDMapMapping: put mappings in a mempool X-Git-Tag: v12.0.1~343^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e193f8bb4f9a93730ec16b72f8cbd6c1456d6004;p=ceph.git osd/OSDMapMapping: put mappings in a mempool Signed-off-by: Sage Weil --- diff --git a/src/include/mempool.h b/src/include/mempool.h index b89451ee995..7b4a59618e5 100644 --- a/src/include/mempool.h +++ b/src/include/mempool.h @@ -148,6 +148,7 @@ namespace mempool { f(buffer_meta) \ f(buffer_data) \ f(osd) \ + f(osdmap_mapping) \ f(unittest_1) \ f(unittest_2) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 51f7b2e861b..34b049b286c 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1054,7 +1054,7 @@ void OSDMonitor::maybe_prime_pg_temp() int n = chunk; std::unordered_set did_pgs; for (auto osd : osds) { - const vector& pgs = mapping->get_osd_acting_pgs(osd); + auto& pgs = mapping->get_osd_acting_pgs(osd); dout(20) << __func__ << " osd." << osd << " " << pgs << dendl; for (auto pgid : pgs) { if (!did_pgs.insert(pgid).second) { diff --git a/src/osd/OSDMapMapping.cc b/src/osd/OSDMapMapping.cc index 5a4c84b54a8..14165a156dc 100644 --- a/src/osd/OSDMapMapping.cc +++ b/src/osd/OSDMapMapping.cc @@ -8,6 +8,9 @@ #include "common/debug.h" +MEMPOOL_DEFINE_OBJECT_FACTORY(OSDMapMapping, osdmapmapping, + osdmap_mapping); + // ensure that we have a PoolMappings for each pool and that // the dimensions (pg_num and size) match up. void OSDMapMapping::_init_mappings(const OSDMap& osdmap) diff --git a/src/osd/OSDMapMapping.h b/src/osd/OSDMapMapping.h index e18b5749314..51a445db5ac 100644 --- a/src/osd/OSDMapMapping.h +++ b/src/osd/OSDMapMapping.h @@ -167,10 +167,16 @@ public: /// a precalculated mapping of every PG for a given OSDMap class OSDMapMapping { +public: + MEMPOOL_CLASS_HELPERS(); +private: + struct PoolMapping { + MEMPOOL_CLASS_HELPERS(); + unsigned size = 0; unsigned pg_num = 0; - std::vector table; + mempool::osdmap_mapping::vector table; size_t row_size() const { return @@ -233,9 +239,10 @@ class OSDMapMapping { } }; - std::map pools; - std::vector> acting_rmap; // osd -> pg - //unused: std::vector> up_rmap; // osd -> pg + mempool::osdmap_mapping::map pools; + mempool::osdmap_mapping::vector< + mempool::osdmap_mapping::vector> acting_rmap; // osd -> pg + //unused: mempool::osdmap_mapping::vector> up_rmap; // osd -> pg epoch_t epoch; uint64_t num_pgs = 0; @@ -281,7 +288,7 @@ public: p->second.get(pgid.ps(), up, up_primary, acting, acting_primary); } - const std::vector& get_osd_acting_pgs(unsigned osd) { + const mempool::osdmap_mapping::vector& get_osd_acting_pgs(unsigned osd) { assert(osd < acting_rmap.size()); return acting_rmap[osd]; }