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.89~14^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=89c02637914ac7332e9dbdbfefc2049b2b6c127d;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 --- diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 795a5b07c943..7d440affd121 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -770,6 +770,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...