From 52915ee818e8a6d0f052d8a2deeadd8ff7bd85dc Mon Sep 17 00:00:00 2001 From: Ankit raj Date: Fri, 21 Apr 2017 11:50:35 +0530 Subject: dht: Send an event when disks get full Send an event if DHT determines that a subvol is getting full or running out of inodes. Change-Id: Ie026f4ee1832b5df1e80b16cb949b2cc31a25d6f Bug: 1440659 Signed-off-by: Ankit raj Signed-off-by: N Balachandran --- events/eventskeygen.py | 4 ++++ xlators/cluster/dht/src/dht-diskusage.c | 26 ++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/events/eventskeygen.py b/events/eventskeygen.py index 23dfb478904..98c26dcbcb1 100644 --- a/events/eventskeygen.py +++ b/events/eventskeygen.py @@ -191,6 +191,10 @@ keys = ( #tier events "EVENT_TIER_START", "EVENT_TIER_START_FORCE", + + #brick/inodes events + "EVENT_DHT_DISK_USAGE", + "EVENT_DHT_INODES_USAGE", ) LAST_EVENT = "EVENT_LAST" diff --git a/xlators/cluster/dht/src/dht-diskusage.c b/xlators/cluster/dht/src/dht-diskusage.c index b1de9ff44aa..c2b9b2e37c4 100644 --- a/xlators/cluster/dht/src/dht-diskusage.c +++ b/xlators/cluster/dht/src/dht-diskusage.c @@ -18,6 +18,7 @@ #include "defaults.h" #include +#include "events.h" int @@ -221,10 +222,12 @@ gf_boolean_t dht_is_subvol_filled (xlator_t *this, xlator_t *subvol) { int i = 0; + char vol_name[256]; dht_conf_t *conf = NULL; gf_boolean_t subvol_filled_inodes = _gf_false; gf_boolean_t subvol_filled_space = _gf_false; gf_boolean_t is_subvol_filled = _gf_false; + double usage = 0; conf = this->private; @@ -259,23 +262,38 @@ dht_is_subvol_filled (xlator_t *this, xlator_t *subvol) if (subvol_filled_space && conf->subvolume_status[i]) { if (!(conf->du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) { + usage = 100 - conf->du_stats[i].avail_percent; + gf_msg (this->name, GF_LOG_WARNING, 0, DHT_MSG_SUBVOL_INSUFF_SPACE, "disk space on subvolume '%s' is getting " "full (%.2f %%), consider adding more bricks", - subvol->name, - (100 - conf->du_stats[i].avail_percent)); + subvol->name, usage); + + strncpy(vol_name, this->name, sizeof(vol_name)); + vol_name[(strlen(this->name)-4)] = '\0'; + + gf_event(EVENT_DHT_DISK_USAGE, + "volume=%s;subvol=%s;usage=%.2f %%", + vol_name, subvol->name, usage); } } if (subvol_filled_inodes && conf->subvolume_status[i]) { if (!(conf->du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) { + usage = 100 - conf->du_stats[i].avail_inodes; gf_msg (this->name, GF_LOG_CRITICAL, 0, DHT_MSG_SUBVOL_INSUFF_INODES, "inodes on subvolume '%s' are at " "(%.2f %%), consider adding more bricks", - subvol->name, - (100 - conf->du_stats[i].avail_inodes)); + subvol->name, usage); + + strncpy(vol_name, this->name, sizeof(vol_name)); + vol_name[(strlen(this->name)-4)] = '\0'; + + gf_event(EVENT_DHT_INODES_USAGE, + "volume=%s;subvol=%s;usage=%.2f %%", + vol_name, subvol->name, usage); } } -- cgit