This avoids incorrectly populating peer_missing[acting[i]], which
in turn screws up peering and recovery.
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;
}