]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: add osd_is_valid_op_target()
authorSage Weil <sage@redhat.com>
Thu, 13 Nov 2014 01:04:35 +0000 (17:04 -0800)
committerSage Weil <sage@redhat.com>
Thu, 13 Nov 2014 01:04:35 +0000 (17:04 -0800)
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 <sage@redhat.com>
src/osd/OSDMap.h

index 795a5b07c9435f57d39b00ce576e9e7e530d64e8..7d440affd121ec9b01e711e624c6bed3357dac76 100644 (file)
@@ -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<int> 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...