]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDService: add too_full_for_backfill
authorSamuel Just <sam.just@inktank.com>
Thu, 21 Mar 2013 18:37:24 +0000 (11:37 -0700)
committerSamuel Just <sam.just@inktank.com>
Fri, 22 Mar 2013 01:51:39 +0000 (18:51 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc
src/osd/OSD.h

index 978c24056f5b5db46e456b8c1b32103d51b79015..c32f36df72808ee8aad7240ba45b4094e79231af 100644 (file)
@@ -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
index 148b761f53246868e16b06c2d13d8a70ba2eac4c..5166ae74aa49015b27be6704e903b8f45960468a 100644 (file)
@@ -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;