summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amarts@redhat.com>2017-09-18 23:03:32 +0530
committerAmar Tumballi <amarts@redhat.com>2017-11-03 14:40:52 +0530
commitbf5c5841c443a8da5b8f73c27b2ed83420f2303e (patch)
tree2006ede8204f8b27b46765840c08e395d79d05e9
parentcf62283467d7dd30b89b80717f1fbc24670cb44b (diff)
global options: add a sample option to handle
Fixes #303 Change-Id: Icdaa804711c43c65b9684f2649437aae1b5c1ed5 Signed-off-by: Amar Tumballi <amarts@redhat.com>
-rw-r--r--libglusterfs/src/globals.c36
-rw-r--r--libglusterfs/src/globals.h2
-rw-r--r--libglusterfs/src/options.h2
-rw-r--r--libglusterfs/src/xlator.c15
4 files changed, 50 insertions, 5 deletions
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;
}