From: xie xingguo Date: Thu, 1 Mar 2018 02:42:32 +0000 (+0800) Subject: osd/OSDMap: skip out/crush-out osds X-Git-Tag: v13.0.2~114^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F20655%2Fhead;p=ceph.git osd/OSDMap: skip out/crush-out osds We might do 'ceph osd out ' or 'ceph osd crush reweight 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 --- diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index fb7019a9b4c7..aec53fb745f1 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -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; }