]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDMap: switch pg_to_osds to have an explicit primary param
authorGreg Farnum <greg@inktank.com>
Fri, 20 Dec 2013 21:30:40 +0000 (13:30 -0800)
committerGreg Farnum <greg@inktank.com>
Thu, 16 Jan 2014 00:33:05 +0000 (16:33 -0800)
Use pointers instead of references for the out params, too!

Signed-off-by: Greg Farnum <greg@inktank.com>
src/osd/OSDMap.cc
src/osd/OSDMap.h
src/tools/osdmaptool.cc
src/tools/psim.cc

index 7c0f5dbb240a5b7b4f1691272a6759c99f162300..b5d7c487bec5391097f142d3cd54af6af5844b58 100644 (file)
@@ -1169,12 +1169,15 @@ bool OSDMap::_get_temp_osds(const pg_pool_t& pool, pg_t pg, vector<int>& temp) c
   return false;
 }
 
-int OSDMap::pg_to_osds(pg_t pg, vector<int>& raw) const
+int OSDMap::pg_to_osds(pg_t pg, vector<int> *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<int>& up) const
index e44faf0c98264d8fd9289efb6a8d34501a547b35..375cf92026b9ea0f76c6548dc18f7c3c92f34aee 100644 (file)
@@ -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<int>& raw) const;
+  int pg_to_osds(pg_t pg, vector<int> *raw, int *primary) const;
   /// map a pg to its acting set. @return acting set size
   int pg_to_acting_osds(pg_t pg, vector<int>& acting) const {
     _pg_to_up_acting_osds(pg, NULL, acting);
index e360614ea9a7f1e386407a2ec1f3c08f0b5c3d9d..08db164dd276d191b88421654f60e2c22f3d6185 100644 (file)
@@ -266,9 +266,10 @@ int main(int argc, const char **argv)
     cout << " parsed '" << test_map_pg << "' -> " << pgid << std::endl;
 
     vector<int> 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;
index c1adc7580fb677bb822af07114658912b4ae2ac6..ecc176d2c81df6bef408d0e3e10136ebb423226a 100644 (file)
@@ -47,7 +47,8 @@ int main(int argc, char **argv)
       vector<int> 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) {