]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: skip out/crush-out osds 20655/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 1 Mar 2018 02:42:32 +0000 (10:42 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Thu, 1 Mar 2018 02:52:08 +0000 (10:52 +0800)
We might do 'ceph osd out <osd.x>' or 'ceph osd crush reweight <osd.x> 0'
for various reasons, and hence can produce 0-weighted OSDs.
Skip those OSDs when trying to calculdate PG upmaps so we won't be able to
hit the *assert* below:

/build/ceph-13.0.1-2232-g64665c7/src/osd/OSDMap.cc: 4179: FAILED assert(target > 0)

See also:

http://pulpito.ceph.com/xxg-2018-02-28_09:02:53-rados-wip-fix-upmap-distro-basic-smithi/2235497/

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/osd/OSDMap.cc

index fb7019a9b4c711b12a55c084faa72137e942ec3a..aec53fb745f1dfb3212d389b5909cb2ac14338aa 100644 (file)
@@ -4002,6 +4002,9 @@ int OSDMap::calc_pg_upmaps(
       ldout(cct,30) << __func__ << " pool " << i.first << " ruleno " << ruleno << dendl;
       for (auto p : pmap) {
        auto adjusted_weight = tmp.get_weightf(p.first) * p.second;
+        if (adjusted_weight == 0) {
+          continue;
+        }
        osd_weight[p.first] += adjusted_weight;
        osd_weight_total += adjusted_weight;
       }