]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: compute full ratio from kb_avail
authorAlexandre Oliva <oliva@gnu.org>
Tue, 17 Sep 2013 07:23:32 +0000 (04:23 -0300)
committerSage Weil <sage@inktank.com>
Tue, 17 Sep 2013 13:31:48 +0000 (06:31 -0700)
On btrfs, kb_used + kb_avail can be much smaller than total kb, and
what really matters to avoid filling up the disk is how much space is
available, not how much we've used.  Thus, compute the ratio we use to
determine full or nearfull from kb_avail rather than from kb_used.

Signed-off-by: Alexandre Oliva <oliva@gnu.org>
Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc

index 20aef0301ec970180bfeb1872b9ceb4a7170df04..76bdb02c0adfdfaca24d4774564cec6b2b1e33af 100644 (file)
@@ -2541,7 +2541,12 @@ void OSDService::check_nearfull_warning(const osd_stat_t &osd_stat)
 
   time_t now = ceph_clock_gettime(NULL);
 
-  float ratio = ((float)osd_stat.kb_used) / ((float)osd_stat.kb);
+  // We base ratio on kb_avail rather than kb_used because they can
+  // differ significantly e.g. on btrfs volumes with a large number of
+  // chunks reserved for metadata, and for our purposes (avoiding
+  // completely filling the disk) it's far more important to know how
+  // much space is available to use than how much we've already used.
+  float ratio = ((float)(osd_stat.kb - osd_stat.kb_avail)) / ((float)osd_stat.kb);
   float nearfull_ratio = get_nearfull_ratio();
   float full_ratio = get_full_ratio();
   cur_ratio = ratio;