]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/OSDMap: fix get_pg_acting_role()
authorSage Weil <sage@redhat.com>
Mon, 9 Dec 2019 16:47:49 +0000 (10:47 -0600)
committerSage Weil <sage@redhat.com>
Mon, 9 Dec 2019 16:47:49 +0000 (10:47 -0600)
This needs to take an spgid in order to know what role the osd is
serving.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSDMap.h

index 4770ef7e601cc10af1e82fc7af57e6d3962c78ea..935e4e717927b3616951edc0b8be2fbb3df369da 100644 (file)
@@ -4868,7 +4868,7 @@ bool OSD::maybe_wait_for_max_pg(const OSDMapRef& osdmap,
   if (is_mon_create) {
     pending_creates_from_mon++;
   } else {
-    bool is_primary = osdmap->get_pg_acting_rank(pgid.pgid, whoami) == 0;
+    bool is_primary = osdmap->get_pg_acting_role(pgid, whoami) == 0;
     pending_creates_from_osd.emplace(pgid, is_primary);
   }
   dout(1) << __func__ << " withhold creation of pg " << pgid
@@ -8725,7 +8725,7 @@ void OSD::consume_map()
     std::lock_guard l(pending_creates_lock);
     for (auto pg = pending_creates_from_osd.begin();
         pg != pending_creates_from_osd.end();) {
-      if (osdmap->get_pg_acting_rank(pg->first.pgid, whoami) < 0) {
+      if (osdmap->get_pg_acting_role(pg->first, whoami) < 0) {
        dout(10) << __func__ << " pg " << pg->first << " doesn't map here, "
                 << "discarding pending_create_from_osd" << dendl;
        pg = pending_creates_from_osd.erase(pg);
index 31f47c675e7a4756d06c2dacf029d837269b96f4..a4dcd018cbf5b4a4a81793b9916991931f20fa20 100644 (file)
@@ -1397,10 +1397,10 @@ public:
     const std::vector<int> &newacting);
   
   /* rank is -1 (stray), 0 (primary), 1,2,3,... (replica) */
-  int get_pg_acting_rank(pg_t pg, int osd) const {
+  int get_pg_acting_role(spg_t pg, int osd) const {
     std::vector<int> group;
-    pg_to_acting_osds(pg, group);
-    return calc_pg_role(osd, group, group.size());
+    pg_to_acting_osds(pg.pgid, group);
+    return calc_pg_role(pg_shard_t(osd, pg.shard), group);
   }
 
   bool osd_is_valid_op_target(pg_t pg, int osd) const {