From b498d71543c2d58aa90a6c558953fbf344eed878 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 9 Dec 2019 10:47:49 -0600 Subject: [PATCH] osd/OSDMap: fix get_pg_acting_role() This needs to take an spgid in order to know what role the osd is serving. Signed-off-by: Sage Weil --- src/osd/OSD.cc | 4 ++-- src/osd/OSDMap.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 4770ef7e601..935e4e71792 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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); diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 31f47c675e7..a4dcd018cbf 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -1397,10 +1397,10 @@ public: const std::vector &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 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 { -- 2.39.5