From: Sage Weil Date: Thu, 4 Jan 2018 16:48:41 +0000 (-0600) Subject: osd/OSDMap: get_primary_shart() variant that returns primary *and* shard X-Git-Tag: v13.1.0~390^2~103 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=bd8d198c0714cee566a33e87a02f7bace3e2556c;p=ceph.git osd/OSDMap: get_primary_shart() variant that returns primary *and* shard Signed-off-by: Sage Weil --- diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index efd7ac92e52d0..d7ba76ba8c98f 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -1178,6 +1178,26 @@ public: } return false; } + bool get_primary_shard(const pg_t& pgid, int *primary, spg_t *out) const { + auto i = get_pools().find(pgid.pool()); + if (i == get_pools().end()) { + return false; + } + vector acting; + pg_to_acting_osds(pgid, &acting, primary); + if (i->second.is_erasure()) { + for (uint8_t i = 0; i < acting.size(); ++i) { + if (acting[i] == *primary) { + *out = spg_t(pgid, shard_id_t(i)); + return true; + } + } + } else { + *out = spg_t(pgid); + return true; + } + return false; + } const mempool::osdmap::map& get_removed_snaps_queue() const {