From: Samuel Just Date: Tue, 3 Jun 2014 23:14:15 +0000 (-0700) Subject: OSD::calc_priors_during: handle CRUSH_ITEM_NONE correctly X-Git-Tag: v0.80.2~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=50dc2462ab96c3457b08c50b4cc07676b50dbf72;p=ceph.git OSD::calc_priors_during: handle CRUSH_ITEM_NONE correctly Fixes: #8507 Signed-off-by: Samuel Just (cherry picked from commit 0bd6f6797c69af9aff851033c57c42121671c684) Conflicts: src/osd/OSD.cc --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 6f3c36f92821..418c1887e119 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2505,21 +2505,25 @@ void OSD::calc_priors_during( oldmap->pg_to_acting_osds(pgid.pgid, acting); dout(20) << " " << pgid << " in epoch " << e << " was " << acting << dendl; int up = 0; + int actual_osds = 0; for (unsigned i=0; iis_up(acting[i])) { - if (acting[i] != whoami) { - pset.insert( - pg_shard_t( - acting[i], - osdmap->pg_is_ec(pgid.pgid) ? i : ghobject_t::NO_SHARD)); + if (acting[i] != CRUSH_ITEM_NONE) { + if (osdmap->is_up(acting[i])) { + if (acting[i] != whoami) { + pset.insert( + pg_shard_t( + acting[i], + osdmap->pg_is_ec(pgid.pgid) ? shard_id_t(i) : ghobject_t::NO_SHARD)); + } + up++; } - up++; + actual_osds++; } } - if (!up && !acting.empty()) { + if (!up && actual_osds) { // sucky. add down osds, even tho we can't reach them right now. for (unsigned i=0; i