From 963947718a954f63f351ce4034bf97380421ab7c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 12 Nov 2014 17:04:35 -0800 Subject: [PATCH] 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) --- src/osd/OSDMap.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index aafadb6b6c0e0..b63705c03bd7a 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -771,6 +771,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... -- 2.39.5