diff --git a/libglusterfs/src/globals.c b/libglusterfs/src/globals.c index a43b80aa060..f182b1c7208 100644 --- a/libglusterfs/src/globals.c +++ b/libglusterfs/src/globals.c @@ -144,8 +144,20 @@ static struct xlator_fops global_fops = { static int global_xl_reconfigure (xlator_t *this, dict_t *options) { + int ret = -1; + gf_boolean_t bool_opt = _gf_false; + + /* This is not added in volume dump, hence adding the options in log + would be helpful for debugging later */ dict_dump_to_log (options); - return 0; + + GF_OPTION_RECONF ("measure-latency", bool_opt, options, bool, out); + this->ctx->measure_latency = bool_opt; + + /* TODO: add more things here */ + ret = 0; +out: + return ret; } static int @@ -160,11 +172,25 @@ global_xl_fini (xlator_t *this) return; } +struct volume_options global_xl_options[] = { + { .key = {"measure-latency"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "no", + .op_version = {GD_OP_VERSION_4_0_0}, + .flags = OPT_FLAG_SETTABLE, + .tags = {"global", "context"}, + .description = "Use this option to toggle measuring latency" + }, + + { .key = {NULL},}, +}; + +static volume_opt_list_t global_xl_opt_list; + int glusterfs_this_init () { - int ret = 0; - + int ret = 0; ret = pthread_key_create (&this_xlator_key, glusterfs_this_destroy); if (ret != 0) { gf_msg ("", GF_LOG_WARNING, ret, @@ -182,6 +208,10 @@ glusterfs_this_init () global_xlator.fini = global_xl_fini; INIT_LIST_HEAD (&global_xlator.volume_options); + INIT_LIST_HEAD (&global_xl_opt_list.list); + global_xl_opt_list.given_opt = global_xl_options; + + list_add_tail (&global_xl_opt_list.list, &global_xlator.volume_options); return ret; } diff --git a/libglusterfs/src/globals.h b/libglusterfs/src/globals.h index bf73f2e6671..1fc9b562b9b 100644 --- a/libglusterfs/src/globals.h +++ b/libglusterfs/src/globals.h @@ -98,6 +98,7 @@ #define GD_OP_VER_PERSISTENT_AFR_XATTRS GD_OP_VERSION_3_6_0 #include "xlator.h" +#include "options.h" /* THIS */ #define THIS (*__glusterfs_this_location()) @@ -108,6 +109,7 @@ xlator_t *glusterfs_this_get (void); int glusterfs_this_set (xlator_t *); extern xlator_t global_xlator; +extern struct volume_options global_xl_options[]; /* syncopctx */ void *syncopctx_getctx (void); diff --git a/libglusterfs/src/options.h b/libglusterfs/src/options.h index 6308773a3e1..af6a651a41d 100644 --- a/libglusterfs/src/options.h +++ b/libglusterfs/src/options.h @@ -296,7 +296,7 @@ xlator_option_reconf_##type (xlator_t *this, dict_t *options, char *key, \ "option %s using default value %s", \ key, value); \ } else { \ - gf_msg_debug (this->name, 0, \ + gf_msg (this->name, GF_LOG_INFO, 0, 0, \ "option %s using set value %s", \ key, value); \ } \ diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index fdc2be144a6..4817da43da1 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -308,6 +308,8 @@ xlator_set_type (xlator_t *xl, const char *type) /* Handle 'global' translator differently */ if (!strncmp (GF_GLOBAL_XLATOR_NAME, type, strlen (GF_GLOBAL_XLATOR_NAME))) { + volume_opt_list_t *vol_opt = NULL; + /* set the required values from Global xlator */ xl->type = gf_strdup (GF_GLOBAL_XLATOR_NAME); xl->cbks = global_xlator.cbks; @@ -316,10 +318,21 @@ xlator_set_type (xlator_t *xl, const char *type) xl->fini = global_xlator.fini; xl->reconfigure = global_xlator.reconfigure; + vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t), + gf_common_mt_volume_opt_list_t); + if (!vol_opt) { + ret = -1; + goto out; + } + + vol_opt->given_opt = global_xl_options; + INIT_LIST_HEAD (&xl->volume_options); + INIT_LIST_HEAD (&vol_opt->list); + list_add_tail (&vol_opt->list, &xl->volume_options); fill_defaults(xl); - + ret = 0; goto out; }