]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix negative degraded objects during backfilling 3803/head
authorGuang Yang <yguang@yahoo-inc.com>
Thu, 26 Feb 2015 08:13:12 +0000 (08:13 +0000)
committerGuang Yang <yguang@yahoo-inc.com>
Thu, 26 Feb 2015 08:13:12 +0000 (08:13 +0000)
When there is deleting requests during backfilling, the reported number of degraded
objects could be negative, as the primary's num_objects is the latest (locally) but
the number for replicas might not reflect the deletings. A simple fix is to ignore
the negative subtracted value.

Signed-off-by: Guang Yang <yguang@yahoo-inc.com>
src/osd/PG.cc

index 5d0a4fec6e2046b21e6dcba3c1015f24b9d9d4ac..cd671ca42602be43ded619360c3a2e10c54af0b6 100644 (file)
@@ -2297,7 +2297,7 @@ void PG::_update_calc_stats()
 
     // a degraded objects has fewer replicas or EC shards than the
     // pool specifies
-    uint64_t degraded = 0;
+    int64_t degraded = 0;
 
     // if acting is smaller than desired, add in those missing replicas
     if (acting.size() < target)
@@ -2319,7 +2319,9 @@ void PG::_update_calc_stats()
       degraded += peer_missing[*i].num_missing();
 
       // not yet backfilled
-      degraded += num_objects - peer_info[*i].stats.stats.sum.num_objects;
+      int64_t diff = num_objects - peer_info[*i].stats.stats.sum.num_objects;
+      if (diff > 0)
+        degraded += diff;
     }
     info.stats.stats.sum.num_objects_degraded = degraded;
     info.stats.stats.sum.num_objects_unfound = get_num_unfound();