From 109b3c9e7f152e0d58b60e1c91e417a58fee7be8 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 23 Jan 2014 14:52:01 -0800 Subject: [PATCH] OSDMap: fill in get_primary_shard Signed-off-by: Samuel Just --- src/osd/OSDMap.h | 22 +++++++++++++++++++++- src/osd/osd_types.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 47ac2f796cf..a5d0869afa9 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -627,7 +627,27 @@ public: assert(i != pools.end()); return i->second.ec_pool(); } - spg_t get_primary_shard(pg_t pgid) const { return spg_t(); /* TODOSAM: fix */} + bool get_primary_shard(pg_t pgid, spg_t *out) const { + map::const_iterator i = get_pools().find(pgid.pool()); + if (i == get_pools().end()) { + return false; + } + int primary; + vector acting; + pg_to_acting_osds(pgid, &acting, &primary); + if (i->second.ec_pool()) { + for (shard_id_t i = 0; i < acting.size(); ++i) { + if (acting[i] == primary) { + *out = spg_t(pgid, i); + return true; + } + } + } else { + *out = spg_t(pgid); + return true; + } + return false; + } int64_t lookup_pg_pool_name(const string& name) { if (name_pool.count(name)) diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 026d7c51c0c..fe0493436b5 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -67,6 +67,7 @@ struct pg_shard_t { int osd; shard_id_t shard; pg_shard_t() : osd(-1), shard(ghobject_t::NO_SHARD) {} + explicit pg_shard_t(int osd) : osd(osd), shard(ghobject_t::NO_SHARD) {} pg_shard_t(int osd, shard_id_t shard) : osd(osd), shard(shard) {} static pg_shard_t undefined_shard() { return pg_shard_t(-1, ghobject_t::NO_SHARD); -- 2.47.3