diff options
Diffstat (limited to 'xlators/cluster')
-rw-r--r-- | xlators/cluster/afr/src/afr.c | 225 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht.c | 62 | ||||
-rw-r--r-- | xlators/cluster/stripe/src/stripe.c | 36 |
3 files changed, 320 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index e1154f9d1..a5906550d 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -61,6 +61,231 @@ mem_acct_init (xlator_t *this) } +int +reconfigure (xlator_t *this, dict_t *options) +{ + + gf_boolean_t metadata_self_heal; /* on/off */ + gf_boolean_t entry_self_heal; + gf_boolean_t data_self_heal; + gf_boolean_t data_change_log; /* on/off */ + gf_boolean_t metadata_change_log; /* on/off */ + gf_boolean_t entry_change_log; /* on/off */ + gf_boolean_t strict_readdir; + + afr_private_t * priv = NULL; + xlator_list_t * trav = NULL; + + char * read_subvol = NULL; + char * self_heal = NULL; + char * change_log = NULL; + char * str_readdir = NULL; + + int32_t background_count = 0; + int32_t window_size = 0; + + int read_ret = -1; + int dict_ret = -1; + int flag = 1; + int ret = 0; + int temp_ret = -1; + + priv = this->private; + + dict_ret = dict_get_int32 (options, "background-self-heal-count", + &background_count); + if (dict_ret == 0) { + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring background self-heal count to %d", + background_count); + + priv->background_self_heal_count = background_count; + } + + dict_ret = dict_get_str (options, "metadata-self-heal", + &self_heal); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (self_heal, &metadata_self_heal); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Reconfiguration Invalid 'option metadata" + "-self-heal %s'. Defaulting to old value.", + self_heal); + ret = -1; + goto out; + } + + priv->metadata_self_heal = metadata_self_heal; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option metadata" + "-self-heal %s'.", + self_heal); + } + + dict_ret = dict_get_str (options, "data-self-heal", + &self_heal); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (self_heal, &data_self_heal); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Reconfiguration Invalid 'option data" + "-self-heal %s'. Defaulting to old value.", + self_heal); + ret = -1; + goto out; + } + + priv->data_self_heal = data_self_heal; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option data" + "-self-heal %s'.", self_heal); + } + + dict_ret = dict_get_str (options, "entry-self-heal", + &self_heal); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (self_heal, &entry_self_heal); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Reconfiguration Invalid 'option data" + "-self-heal %s'. Defaulting to old value.", + self_heal); + ret = -1; + goto out; + } + + priv->entry_self_heal = entry_self_heal; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option entry" + "-self-heal %s'.", self_heal); + } + + + dict_ret = dict_get_str (options, "strict-readdir", + &str_readdir); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (str_readdir, &strict_readdir); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Invalid 'option strict-readdir %s'. " + "Defaulting to old value.", + str_readdir); + ret = -1; + goto out; + } + + priv->strict_readdir = strict_readdir; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option strict" + "-readdir %s'.", str_readdir); + } + + dict_ret = dict_get_int32 (options, "data-self-heal-window-size", + &window_size); + if (dict_ret == 0) { + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring, Setting data self-heal window size to %d", + window_size); + + priv->data_self_heal_window_size = window_size; + } + + dict_ret = dict_get_str (options, "data-change-log", + &change_log); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (change_log, &data_change_log); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Reconfiguration Invalid 'option data-" + "change-log %s'. Defaulting to old value.", + change_log); + ret = -1; + goto out; + } + + priv->data_change_log = data_change_log; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option data-" + "change-log %s'.", change_log); + } + + dict_ret = dict_get_str (options, "metadata-change-log", + &change_log); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (change_log, + &metadata_change_log); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Invalid 'option metadata-change-log %s'. " + "Defaulting to metadata-change-log as 'off'.", + change_log); + ret = -1; + goto out; + } + + priv->metadata_change_log = metadata_change_log; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option metadata-" + "change-log %s'.", change_log); + } + + dict_ret = dict_get_str (options, "entry-change-log", + &change_log); + if (dict_ret == 0) { + temp_ret = gf_string2boolean (change_log, &entry_change_log); + if (temp_ret < 0) { + gf_log (this->name, GF_LOG_WARNING, + "Invalid 'option entry-change-log %s'. " + "Defaulting to entry-change-log as 'on'.", + change_log); + ret = -1; + goto out; + } + + priv->entry_change_log = entry_change_log; + gf_log (this->name, GF_LOG_DEBUG, + "Reconfiguring 'option entry-" + "change-log %s'.", change_log); + } + + read_ret = dict_get_str (options, "read-subvolume", &read_subvol); + + if (read_ret == -1) + goto next;// No need to traverse, hence set the next option + + trav = this->children; + flag = 0; + while (trav) { + if (!read_ret && !strcmp (read_subvol, trav->xlator->name)) { + gf_log (this->name, GF_LOG_DEBUG, + "Subvolume '%s' specified as read child.", + trav->xlator->name); + + flag = 1; + ret = -1; + goto out; + } + + + trav = trav->next; + } + + if (flag == 0 ) { + + gf_log (this->name, GF_LOG_ERROR, + "Invalid 'option read-subvolume %s', no such subvolume" + , read_subvol); + ret = -1; + goto out; + } + +next: +out: + return ret; + +} + + static const char *favorite_child_warning_str = "You have specified subvolume '%s' " "as the 'favorite child'. This means that if a discrepancy in the content " "or attributes (ownership, permission, etc.) of a file is detected among " diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index c926a1cf4..bd0258eae 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -252,6 +252,68 @@ mem_acct_init (xlator_t *this) } int +reconfigure (xlator_t *this, dict_t *options) +{ + dht_conf_t *conf = NULL; + char *temp_str = NULL; + gf_boolean_t search_unhashed; + uint32_t temp_free_disk = 0; + int ret = 0; + + + conf = this->private; + + if (dict_get_str (options, "lookup-unhashed", &temp_str) == 0) { + /* If option is not "auto", other options _should_ be boolean*/ + if (strcasecmp (temp_str, "auto")) { + if (!gf_string2boolean (temp_str, &search_unhashed)) { + gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" + " lookup-unahashed reconfigured (%s)", + temp_str); + conf->search_unhashed = search_unhashed; + } + else { + gf_log(this->name, GF_LOG_ERROR, "Reconfigure:" + " lookup-unahashed should be boolean," + " not (%s), defaulting to (%d)", + temp_str, conf->search_unhashed); + //return -1; + ret = -1; + goto out; + } + + } + else { + gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" + " lookup-unahashed reconfigured auto "); + conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO; + } + } + + if (dict_get_str (options, "min-free-disk", &temp_str) == 0) { + if (gf_string2percent (temp_str, &temp_free_disk) == 0) { + if (temp_free_disk > 100) { + gf_string2bytesize (temp_str, + &conf->min_free_disk); + conf->disk_unit = 'b'; + } else { + conf->min_free_disk = (uint64_t)temp_free_disk; + } + } else { + gf_string2bytesize (temp_str, &conf->min_free_disk); + conf->disk_unit = 'b'; + } + + gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" + " min-free-disk reconfigured to ", + temp_str); + } + +out: + return ret; +} + +int init (xlator_t *this) { dht_conf_t *conf = NULL; diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c index a9f620389..00c888f68 100644 --- a/xlators/cluster/stripe/src/stripe.c +++ b/xlators/cluster/stripe/src/stripe.c @@ -3674,8 +3674,7 @@ set_stripe_block_size (xlator_t *this, stripe_private_t *priv, char *data) stripe_str = strtok_r (data, ",", &tmp_str); while (stripe_str) { dup_str = gf_strdup (stripe_str); - stripe_opt = GF_CALLOC (1, sizeof (struct stripe_options), - gf_stripe_mt_stripe_options); + stripe_opt = CALLOC (1, sizeof (struct stripe_options)); if (!stripe_opt) { GF_FREE (dup_str); goto out; @@ -3735,6 +3734,37 @@ out: return ret; } +int +reconfigure (xlator_t *this, dict_t *options) +{ + + stripe_private_t *priv = NULL; + data_t *data = NULL; + int ret = 0; + + + priv = this->private; + + data = dict_get (options, "block-size"); + if (data) { + gf_log (this->name, GF_LOG_TRACE,"Reconfiguring Stripe" + " Block-size"); + ret = set_stripe_block_size (this, priv, data->data); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Reconfigue: Block-Size reconfiguration failed"); + ret = -1; + goto out; + } + gf_log (this->name, GF_LOG_TRACE, + "Reconfigue: Block-Size reconfigured Successfully"); + } + +out: + return ret; + +} + /** * init - This function is called when xlator-graph gets initialized. * The option given in volfiles are parsed here. @@ -3873,7 +3903,7 @@ fini (xlator_t *this) while (trav) { prev = trav; trav = trav->next; - GF_FREE (prev); + FREE (prev); } LOCK_DESTROY (&priv->lock); GF_FREE (priv); |