]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: only update degraded object stats after peering
authorSage Weil <sage@newdream.net>
Fri, 19 Dec 2008 20:17:45 +0000 (12:17 -0800)
committerSage Weil <sage@newdream.net>
Fri, 19 Dec 2008 20:27:46 +0000 (12:27 -0800)
This avoids incorrectly populating peer_missing[acting[i]], which
in turn screws up peering and recovery.

src/osd/PG.cc

index a2a68d98c071bf838d402ba47482472a56205a09..32e093f27bc04c9fbc52c7ffb0a1aa8f50b40329 100644 (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;
     }