]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix negative degraded objects during backfilling
authorGuang Yang <yguang@yahoo-inc.com>
Thu, 26 Feb 2015 08:13:12 +0000 (08:13 +0000)
committerSage Weil <sage@redhat.com>
Thu, 9 Apr 2015 17:40:15 +0000 (10:40 -0700)
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>
(cherry picked from commit 14d7e36d3c978844da73d0e1c8a3a1ec863bac15)

src/osd/PG.cc

index 7452d70ba6875290b0c70c42afd1505c36748674..73010949711a25f8237c829cd88a653a3653db92 100644 (file)
@@ -2312,7 +2312,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 (actingset.size() < target)
@@ -2334,7 +2334,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();