osd: only update degraded object stats after peering

This avoids incorrectly populating peer_missing[acting[i]], which
in turn screws up peering and recovery.
This commit is contained in:
Sage Weil 2008-12-19 12:17:45 -08:00
parent af9559e784
commit 199d03243f

View File

@ -1537,11 +1537,13 @@ void PG::update_stats()
pg_stats_stable.acting = acting;
pg_stats_stable.num_object_copies = pg_stats_stable.num_objects * info.pgid.size();
if (!is_clean()) {
if (!is_clean() && !is_peering()) {
pg_stats_stable.num_objects_missing_on_primary = missing.num_missing();
int degraded = missing.num_missing();
for (unsigned i=1; i<acting.size(); i++)
for (unsigned i=1; i<acting.size(); i++) {
assert(peer_missing.count(acting[i]));
degraded += peer_missing[acting[i]].num_missing();
}
pg_stats_stable.num_objects_degraded = degraded;
}