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@xxxxxxxxx> wrote: > From e533f88b1ff4870cb9dda7d12a185ff39c4f87af Mon Sep 17 00:00:00 2001 > From: Paul Rawson <plrca2@xxxxxxxxx> > 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@xxxxxxxxxx > http://lists.nongnu.org/mailman/listinfo/gluster-devel > >