]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: get_primary_shart() variant that returns primary *and* shard
authorSage Weil <sage@redhat.com>
Thu, 4 Jan 2018 16:48:41 +0000 (10:48 -0600)
committerSage Weil <sage@redhat.com>
Wed, 4 Apr 2018 13:26:49 +0000 (08:26 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSDMap.h

index efd7ac92e52d071cc60448ee72ae59b44d2d1f91..d7ba76ba8c98f470599b0fdbdb14deb0e19b5873 100644 (file)
@@ -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<int> 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<int64_t,snap_interval_set_t>&
   get_removed_snaps_queue() const {