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)
{}
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;
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
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;