[Gluster-devel] [PATCH: glusterfs] allow min-free-disk in bytes as option for dht and new nufa (requires changes mad

Anand Avati avati at gluster.com
Wed Apr 22 07:22:49 UTC 2009


Paul,
  Can you indent the patch and resubmit? The preferred style, via emacs, is -

M-x set-c-style linux
M-x mark-whole-buffer (or specific region)
M-x indent-region

Then run ./commit.sh --amend followed by a git-format-patch

Thanks

Avati

On Wed, Apr 22, 2009 at 12:43 PM,  <plrca2 at gmail.com> wrote:
> From e533f88b1ff4870cb9dda7d12a185ff39c4f87af Mon Sep 17 00:00:00 2001
> From: Paul Rawson <plrca2 at gmail.com>
> Date: Tue, 21 Apr 2009 23:54:31 -0700
> Subject: [PATCH] Patch to allow min-free-disk for dht and the new nufa to be
> specified
> as a percent or a valid glusterfs size (KB,MB,GB,TB,PB).
>
> ---
> libglusterfs/src/xlator.c | 2 +-
> scheduler/alu/src/alu.c | 8 +++--
> xlators/cluster/dht/src/dht-common.h | 3 +-
> xlators/cluster/dht/src/dht-diskusage.c | 48 +++++++++++++++++++++++--------
> xlators/cluster/dht/src/dht.c | 24 +++++++++------
> xlators/cluster/dht/src/nufa.c | 24 ++++++++++-----
> 6 files changed, 75 insertions(+), 34 deletions(-)
>
> diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c
> index 5b5067a..0345037 100644
> --- a/libglusterfs/src/xlator.c
> +++ b/libglusterfs/src/xlator.c
> @@ -434,7 +434,7 @@ _volume_option_value_validate (xlator_t *xl,
> case GF_OPTION_TYPE_PERCENTORSIZET:
> {
> uint32_t percent = 0;
> - uint32_t input_size = 0;
> + input_size = 0;
>
> /* Check if the value is valid percentage */
> if (gf_string2percent (pair->value->data,
> diff --git a/scheduler/alu/src/alu.c b/scheduler/alu/src/alu.c
> index 8939531..967eece 100644
> --- a/scheduler/alu/src/alu.c
> +++ b/scheduler/alu/src/alu.c
> @@ -98,6 +98,7 @@ get_stats_free_disk (struct xlator_stats *this)
> return this->free_disk;
> }
> }
> + return 0;
> }
>
> static int64_t
> @@ -384,10 +385,11 @@ alu_init (xlator_t *xl)
> _limit_fn->next = tmp_limits;
> alu_sched->limits_fn = _limit_fn;
>
> - if (gf_string2percent (limits->data, &min_free_disk) == 0) {
> - alu_sched->spec_limit.disk_unit = 'p';
> - } else {
> + if (gf_string2bytesize (limits->data, &min_free_disk)) {
> alu_sched->spec_limit.disk_unit = 'b';
> + } else {
> + gf_string2percent (limits->data, &min_free_disk);
> + alu_sched->spec_limit.disk_unit = 'p';
> }
>
> alu_sched->spec_limit.free_disk = min_free_disk;
> diff --git a/xlators/cluster/dht/src/dht-common.h
> b/xlators/cluster/dht/src/dht-common.h
> index 6d78479..06d79ca 100644
> --- a/xlators/cluster/dht/src/dht-common.h
> +++ b/xlators/cluster/dht/src/dht-common.h
> @@ -117,7 +117,8 @@ struct dht_conf {
> gf_boolean_t search_unhashed;
> int gen;
> dht_du_t *du_stats;
> - uint32_t min_free_disk;
> + uint64_t min_free_disk;
> + char disk_unit;
> int32_t refresh_interval;
> struct timeval last_stat_fetch;
> };
> diff --git a/xlators/cluster/dht/src/dht-diskusage.c
> b/xlators/cluster/dht/src/dht-diskusage.c
> index 5e3dc23..a809380 100644
> --- a/xlators/cluster/dht/src/dht-diskusage.c
> +++ b/xlators/cluster/dht/src/dht-diskusage.c
> @@ -43,6 +43,7 @@ dht_du_info_cbk (call_frame_t *frame, void *cookie,
> xlator_t *this,
> int this_call_cnt = 0;
> int i = 0;
> double percent = 0;
> + uint64_t bytes = 0;
>
> local = frame->local;
> conf = this->private;
> @@ -52,12 +53,20 @@ dht_du_info_cbk (call_frame_t *frame, void *cookie,
> xlator_t *this,
> goto out;
>
> percent = (statvfs->f_bfree * 100) / statvfs->f_blocks;
> + bytes = (statvfs->f_bfree) * (statvfs->f_bsize);
>
> LOCK (&conf->subvolume_lock);
> {
> for (i = 0; i < conf->subvolume_cnt; i++)
> - if (prev->this == conf->subvolumes[i])
> + if (prev->this == conf->subvolumes[i]){
> conf->du_stats[i].avail_percent = percent;
> + conf->du_stats[i].avail_space = bytes;
> + gf_log (this->name, GF_LOG_DEBUG,
> + "avail_percent on %d is: %f, "
> + "and avail_space on %d is: %llu",
> + i, conf->du_stats[i].avail_percent,
> + i, conf->du_stats[i].avail_space);
> + }
> }
> UNLOCK (&conf->subvolume_lock);
>
> @@ -174,15 +183,24 @@ dht_is_subvol_filled (xlator_t *this, xlator_t
> *subvol)
>
> conf = this->private;
>
> - /* Check for values above 90% free disk */
> + /* Check for values above specified percent or free disk */
> LOCK (&conf->subvolume_lock);
> {
> for (i = 0; i < conf->subvolume_cnt; i++) {
> - if ((subvol == conf->subvolumes[i]) &&
> - (conf->du_stats[i].avail_percent <
> - conf->min_free_disk)) {
> - subvol_filled = 1;
> - break;
> + if (subvol == conf->subvolumes[i]) {
> + if (conf->disk_unit == 'p') {
> + if (conf->du_stats[i].avail_percent <
> + conf->min_free_disk) {
> + subvol_filled = 1;
> + break;
> + }
> + } else {
> + if (conf->du_stats[i].avail_space <
> + conf->min_free_disk) {
> + subvol_filled = 1;
> + break;
> + }
> + }
> }
> }
> }
> @@ -190,7 +208,7 @@ dht_is_subvol_filled (xlator_t *this, xlator_t *subvol)
>
> if (subvol_filled) {
> if (!(conf->du_stats[i].log++ % GF_UNIVERSAL_ANSWER)) {
> - gf_log (this->name, GF_LOG_CRITICAL,
> + gf_log (this->name, GF_LOG_WARNING,
> "disk space on subvolume '%s' is getting "
> "full (%.2f %%), consider adding more nodes",
> subvol->name,
> @@ -205,7 +223,7 @@ xlator_t *
> dht_free_disk_available_subvol (xlator_t *this, xlator_t *subvol)
> {
> int i = 0;
> - double max_avail = 0;
> + uint64_t max_avail = 0;
> xlator_t *avail_subvol = NULL;
> dht_conf_t *conf = NULL;
>
> @@ -215,10 +233,16 @@ dht_free_disk_available_subvol (xlator_t *this,
> xlator_t *subvol)
> LOCK (&conf->subvolume_lock);
> {
> for (i = 0; i < conf->subvolume_cnt; i++) {
> - if (conf->du_stats[i].avail_percent > max_avail) {
> - max_avail = conf->du_stats[i].avail_percent;
> + if (conf->disk_unit == 'p') {
> + if (conf->du_stats[i].avail_percent > max_avail) {
> + max_avail = conf->du_stats[i].avail_percent;
> + }
> avail_subvol = conf->subvolumes[i];
> - }
> + } else {
> + if (conf->du_stats[i].avail_space > max_avail) {
> + max_avail = conf->du_stats[i].avail_space;
> + }
> + }
> }
> }
> UNLOCK (&conf->subvolume_lock);
> diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c
> index ddf9583..7e65d6b 100644
> --- a/xlators/cluster/dht/src/dht.c
> +++ b/xlators/cluster/dht/src/dht.c
> @@ -81,7 +81,7 @@ int
> init (xlator_t *this)
> {
> dht_conf_t *conf = NULL;
> - char *lookup_unhashed_str = NULL;
> + char *temp_str = NULL;
> int ret = -1;
> int i = 0;
>
> @@ -106,17 +106,23 @@ init (xlator_t *this)
> conf->search_unhashed = 0;
>
> if (dict_get_str (this->options, "lookup-unhashed",
> - &lookup_unhashed_str) == 0) {
> - gf_string2boolean (lookup_unhashed_str,
> + &temp_str) == 0) {
> + gf_string2boolean (temp_str,
> &conf->search_unhashed);
> }
>
> conf->min_free_disk = 10;
> + conf->disk_unit = 'p';
>
> if (dict_get_str (this->options, "min-free-disk",
> - &lookup_unhashed_str) == 0) {
> - gf_string2percent (lookup_unhashed_str,
> - &conf->min_free_disk);
> + &temp_str) == 0) {
> + if (!gf_string2bytesize (temp_str,
> + &conf->min_free_disk)) {
> + conf->disk_unit = 'b';
> + } else {
> + gf_string2percent (temp_str, &conf->min_free_disk);
> + conf->disk_unit = 'p';
> + }
> }
>
>
> @@ -234,11 +240,11 @@ struct xlator_cbks cbks = {
>
>
> struct volume_options options[] = {
> + { .key = {"min-free-disk"},
> + .type = GF_OPTION_TYPE_PERCENTORSIZET
> + },
> { .key = {"lookup-unhashed"},
> .type = GF_OPTION_TYPE_BOOL
> },
> - { .key = {"min-free-disk"},
> - .type = GF_OPTION_TYPE_PERCENT
> - },
> { .key = {NULL} },
> };
> diff --git a/xlators/cluster/dht/src/nufa.c b/xlators/cluster/dht/src/nufa.c
> index 57ac6b0..eb84479 100644
> --- a/xlators/cluster/dht/src/nufa.c
> +++ b/xlators/cluster/dht/src/nufa.c
> @@ -527,7 +527,7 @@ init (xlator_t *this)
> xlator_list_t *trav = NULL;
> data_t *data = NULL;
> char *local_volname = NULL;
> - char *lookup_unhashed_str = NULL;
> + char *temp_str = NULL;
> int ret = -1;
> int i = 0;
> char my_hostname[256];
> @@ -553,8 +553,8 @@ init (xlator_t *this)
> conf->search_unhashed = 0;
>
> if (dict_get_str (this->options, "lookup-unhashed",
> - &lookup_unhashed_str) == 0) {
> - gf_string2boolean (lookup_unhashed_str,
> + &temp_str) == 0) {
> + gf_string2boolean (temp_str,
> &conf->search_unhashed);
> }
>
> @@ -607,11 +607,19 @@ init (xlator_t *this)
> conf->local_volume = trav->xlator;
>
> conf->min_free_disk = 10;
> + conf->disk_unit = 'p';
> +
> + if (dict_get_str (this->options, "min-free-disk",
> + &temp_str) == 0) {
> + if (!gf_string2bytesize (temp_str,
> + &conf->min_free_disk)) {
> + conf->disk_unit = 'b';
> + } else {
> + gf_string2percent (temp_str, &conf->min_free_disk);
> + conf->disk_unit = 'p';
> + }
> + }
>
> - data = dict_get (this->options, "min-free-disk");
> - if (data) {
> - gf_string2percent (data->data, &conf->min_free_disk);
> - }
>
> conf->du_stats = CALLOC (conf->subvolume_cnt, sizeof (dht_du_t));
> if (!conf->du_stats) {
> @@ -720,7 +728,7 @@ struct volume_options options[] = {
> .type = GF_OPTION_TYPE_BOOL
> },
> { .key = {"min-free-disk"},
> - .type = GF_OPTION_TYPE_PERCENT
> + .type = GF_OPTION_TYPE_PERCENTORSIZET
> },
> { .key = {NULL} },
> };
> --
> 1.6.0.6
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at nongnu.org
> http://lists.nongnu.org/mailman/listinfo/gluster-devel
>
>





More information about the Gluster-devel mailing list