summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@gnu.org>2013-09-17 04:23:32 -0300
committerSage Weil <sage@inktank.com>2013-09-17 06:31:48 -0700
commit59147be9aeea47576884e5587dd7da8bb58c6c53 (patch)
tree52fec485ef59bde3177470ca075f874af281b93b
parent109cd50ca9b859ff7098c4c08a8f1f6cfbc7906e (diff)
downloadceph-59147be9aeea47576884e5587dd7da8bb58c6c53.tar.gz
osd: compute full ratio from kb_avail
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>
-rw-r--r--src/osd/OSD.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 20aef0301ec..76bdb02c0ad 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -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;