From: Greg Farnum Date: Fri, 20 Dec 2013 21:30:40 +0000 (-0800) Subject: OSDMap: switch pg_to_osds to have an explicit primary param X-Git-Tag: v0.78~329^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5b699782d115527025875b9a66f94a6ff79212b7;p=ceph.git OSDMap: switch pg_to_osds to have an explicit primary param Use pointers instead of references for the out params, too! Signed-off-by: Greg Farnum --- diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 7c0f5dbb240a..b5d7c487bec5 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1169,12 +1169,15 @@ bool OSDMap::_get_temp_osds(const pg_pool_t& pool, pg_t pg, vector& temp) c return false; } -int OSDMap::pg_to_osds(pg_t pg, vector& raw) const +int OSDMap::pg_to_osds(pg_t pg, vector *raw, int *primary) const { + *primary = -1; const pg_pool_t *pool = get_pg_pool(pg.pool()); if (!pool) return 0; - return _pg_to_osds(*pool, pg, raw); + int r = _pg_to_osds(*pool, pg, *raw); + *primary = (raw->empty() ? -1 : raw->front()); + return r; } void OSDMap::pg_to_raw_up(pg_t pg, vector& up) const diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index e44faf0c9826..375cf92026b9 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -515,8 +515,9 @@ public: * This is suitable only for looking at raw CRUSH outputs. It skips * applying the temp and up checks and should not be used * by anybody for data mapping purposes. + * raw and primary must be non-NULL */ - int pg_to_osds(pg_t pg, vector& raw) const; + int pg_to_osds(pg_t pg, vector *raw, int *primary) const; /// map a pg to its acting set. @return acting set size int pg_to_acting_osds(pg_t pg, vector& acting) const { _pg_to_up_acting_osds(pg, NULL, acting); diff --git a/src/tools/osdmaptool.cc b/src/tools/osdmaptool.cc index e360614ea9a7..08db164dd276 100644 --- a/src/tools/osdmaptool.cc +++ b/src/tools/osdmaptool.cc @@ -266,9 +266,10 @@ int main(int argc, const char **argv) cout << " parsed '" << test_map_pg << "' -> " << pgid << std::endl; vector raw, up, acting; - osdmap.pg_to_osds(pgid, raw); + int primary; + osdmap.pg_to_osds(pgid, &raw, &primary); osdmap.pg_to_up_acting_osds(pgid, up, acting); - cout << pgid << " raw " << raw << " up " << up << " acting " << acting << std::endl; + cout << pgid << " raw (" << raw << ", p" << primary << ") up " << up << " acting " << acting << std::endl; } if (test_crush) { int pass = 0; diff --git a/src/tools/psim.cc b/src/tools/psim.cc index c1adc7580fb6..ecc176d2c81d 100644 --- a/src/tools/psim.cc +++ b/src/tools/psim.cc @@ -47,7 +47,8 @@ int main(int argc, char **argv) vector osds; pg_t pgid = pg_t(l.ol_pgid); //pgid.u.ps = f * 4 + b; - osdmap.pg_to_osds(pgid, osds); + int primary; + osdmap.pg_to_osds(pgid, &osds, &primary); size[osds.size()]++; #if 0 if (0) {