From: Sage Weil Date: Thu, 13 Nov 2014 01:04:35 +0000 (-0800) Subject: osd/OSDMap: add osd_is_valid_op_target() X-Git-Tag: v0.80.8~26^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=0c1c4152e6f402af7612c8c8d4719ab0f4cc6ad9;p=ceph.git osd/OSDMap: add osd_is_valid_op_target() Helper to check whether an osd is a given op target for a pg. This assumes that for EC we always send ops to the primary, while for replicated we may target any replica. Signed-off-by: Sage Weil (cherry picked from commit 89c02637914ac7332e9dbdbfefc2049b2b6c127d) --- diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index a34758369ed32..b3b7ab6e30461 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -777,6 +777,18 @@ public: return calc_pg_role(osd, group, nrep); } + bool osd_is_valid_op_target(pg_t pg, int osd) const { + int primary; + vector group; + int nrep = pg_to_acting_osds(pg, &group, &primary); + if (osd == primary) + return true; + if (pg_is_ec(pg)) + return false; + + return calc_pg_role(osd, group, nrep) >= 0; + } + /* * handy helpers to build simple maps...