From: Samuel Just Date: Thu, 21 Mar 2013 18:37:24 +0000 (-0700) Subject: OSDService: add too_full_for_backfill X-Git-Tag: v0.62~184^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cec3d82ec427811044fde0ea017e3e48a1b99dcb;p=ceph.git OSDService: add too_full_for_backfill Signed-off-by: Samuel Just --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 978c24056f5..c32f36df728 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -186,6 +186,7 @@ OSDService::OSDService(OSD *osd) : full_status_lock("OSDService::full_status_lock"), cur_state(NONE), last_msg(0), + cur_ratio(0), is_stopping_lock("OSDService::is_stopping_lock"), state(NOT_STOPPING) {} @@ -1997,6 +1998,7 @@ void OSDService::check_nearfull_warning(const osd_stat_t &osd_stat) float ratio = ((float)osd_stat.kb_used) / ((float)osd_stat.kb); float nearfull_ratio = get_nearfull_ratio(); float full_ratio = get_full_ratio(); + cur_ratio = ratio; if (full_ratio > 0 && ratio > full_ratio) { new_state = FULL; @@ -2027,6 +2029,19 @@ bool OSDService::check_failsafe_full() return false; } +bool OSDService::too_full_for_backfill(double *_ratio, double *_max_ratio) +{ + Mutex::Locker l(full_status_lock); + double max_ratio; + max_ratio = g_conf->osd_backfill_full_ratio; + if (_ratio) + *_ratio = cur_ratio; + if (_max_ratio) + *_max_ratio = max_ratio; + return cur_ratio >= max_ratio; +} + + void OSD::update_osd_stat() { // fill in osd stats too diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 148b761f532..5166ae74aa4 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -401,10 +401,13 @@ public: Mutex full_status_lock; enum s_names { NONE, NEAR, FULL } cur_state; time_t last_msg; + double cur_ratio; float get_full_ratio(); float get_nearfull_ratio(); void check_nearfull_warning(const osd_stat_t &stat); bool check_failsafe_full(); + bool too_full_for_backfill(double *ratio, double *max_ratio); + // -- stopping -- Mutex is_stopping_lock;