From 00d2fafa1bcab7758aa20741a20fb4ea38b9a8ff Mon Sep 17 00:00:00 2001 From: Vikas Gorur Date: Thu, 15 Oct 2009 04:48:09 +0000 Subject: cluster/afr: Pipeline the "full" data self-heal read-write loop. Start upto "data-self-heal-window-size" instances of the read-write loop of the "full" data self-heal algorithm simultaneously. Add a new option "data-self-heal-window-size" with range [1-1024], and a default value of 16. Signed-off-by: Anand V. Avati BUG: 320 (Improve self-heal performance) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=320 --- xlators/cluster/afr/src/afr.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'xlators/cluster/afr/src/afr.c') diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index eea030ad112..bf023ce27ce 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -2338,6 +2338,7 @@ init (xlator_t *this) char * change_log = NULL; int32_t lock_server_count = 1; + int32_t window_size; int fav_ret = -1; int read_ret = -1; @@ -2391,6 +2392,19 @@ init (xlator_t *this) priv->data_self_heal_algorithm = strdup (algo); } + + priv->data_self_heal_window_size = 16; + + dict_ret = dict_get_int32 (this->options, "data-self-heal-window-size", + &window_size); + if (dict_ret == 0) { + gf_log (this->name, GF_LOG_DEBUG, + "Setting data self-heal window size to %d.", + window_size); + + priv->data_self_heal_window_size = window_size; + } + dict_ret = dict_get_str (this->options, "metadata-self-heal", &self_heal); if (dict_ret == 0) { @@ -2665,6 +2679,11 @@ struct volume_options options[] = { { .key = {"data-self-heal-algorithm"}, .type = GF_OPTION_TYPE_STR }, + { .key = {"data-self-heal-window-size"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 1024 + }, { .key = {"metadata-self-heal"}, .type = GF_OPTION_TYPE_BOOL }, -- cgit