osd: Handle objects on non-actingbackfill nodes during recovery

With this fix we can see more misplaced and no degraded when
doing recovery to a new up/acting set with node(s) containing
objects that are not longer part of up/acting.

Signed-off-by: David Zafman <dzafman@redhat.com>
This commit is contained in:
David Zafman 2017-10-23 20:20:44 -07:00
parent 3818e8ed2c
commit 2b792c5077

View File

@ -2635,6 +2635,17 @@ void PG::_update_calc_stats()
}
}
// Add recovery objects not part of actingbackfill to be used to reduce
// degraded and account as misplaced.
for (auto i = peer_info.begin() ; i != peer_info.end() ; ++i) {
if (actingbackfill.find(i->first) == actingbackfill.end())
object_copies += i->second.stats.stats.sum.num_objects;
misplaced += i->second.stats.stats.sum.num_objects;
++num_misplaced;
}
if (object_copies)
dout(20) << __func__ << " objects not part of up/acting " << object_copies << dendl;
// Objects backfilled, sorted by # objects.
set<pair<int64_t,pg_shard_t>> backfill_target_objects;