]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDMap: fill in get_primary_shard
authorSamuel Just <sam.just@inktank.com>
Thu, 23 Jan 2014 22:52:01 +0000 (14:52 -0800)
committerSamuel Just <sam.just@inktank.com>
Tue, 18 Feb 2014 04:12:13 +0000 (20:12 -0800)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSDMap.h
src/osd/osd_types.h

index 47ac2f796cfcb6f9022b9bf79ed5533620e5bc44..a5d0869afa988a7fb28493ef92ccaa99e9b903a4 100644 (file)
@@ -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<int64_t, pg_pool_t>::const_iterator i = get_pools().find(pgid.pool());
+    if (i == get_pools().end()) {
+      return false;
+    }
+    int primary;
+    vector<int> 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))
index 026d7c51c0c128b272e1352d7f4400ea6de30a31..fe0493436b5af55391de3969e24c1314461a14e1 100644 (file)
@@ -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);