summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvra Sengupta <asengupt@redhat.com>2013-02-18 14:22:07 +0530
committerAnand Avati <avati@redhat.com>2013-02-19 00:09:34 -0800
commiteac54f6f76e6fca4f94028b47d963108f63c8f02 (patch)
tree0992b0443f4df9e622bee77aef050d0cbe46b07e
parent81dceec250c9b2f5b87650e28e736e04c4b8597e (diff)
glusterd: Added option description, and validation function fields.
In volopt_map_entry table, added option description field, and option validation function pointer. Change-Id: I21c6bccd175970592b470ce3ef3f418cb99a5a43 BUG: 903478 Signed-off-by: Avra Sengupta <asengupt@redhat.com> Reviewed-on: http://review.gluster.org/4535 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c34
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.h6
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c36
3 files changed, 47 insertions, 29 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c
index d650111f04b..d154c4fd242 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c
@@ -1916,33 +1916,37 @@ glusterd_get_volopt_content (dict_t * ctx, gf_boolean_t xml_out)
if (get_key_from_volopt (vme, &key))
goto out; /*Some error while getin key*/
- if (!xlator_type || strcmp (vme->voltype, xlator_type)){
- ret = xlator_volopt_dynload (vme->voltype,
- &dl_handle,
- &vol_opt_handle);
- if (ret) {
- dl_handle = NULL;
- continue;
+ if (vme->description) {
+ descr = vme->description;
+ def_val = vme->value;
+ } else {
+ if (!xlator_type || strcmp (vme->voltype, xlator_type)){
+ ret = xlator_volopt_dynload (vme->voltype,
+ &dl_handle,
+ &vol_opt_handle);
+ if (ret) {
+ dl_handle = NULL;
+ continue;
+ }
}
+ ret = xlator_option_info_list (&vol_opt_handle, key,
+ &def_val, &descr);
+ if (ret) /*Swallow Error i.e if option not found*/
+ continue;
}
- ret = xlator_option_info_list (&vol_opt_handle, key,
- &def_val, &descr);
- if (ret) /*Swallow Error i.e if option not found*/
- continue;
-
if (xml_out) {
#if (HAVE_LIB_XML)
if (xml_add_volset_element (writer,vme->key,
- def_val, descr))
+ def_val, descr))
goto out;
#else
gf_log ("glusterd", GF_LOG_ERROR, "Libxml not present");
#endif
} else {
snprintf (tmp_str, 2048, "Option: %s\nDefault "
- "Value: %s\nDescription: %s\n\n",
- vme->key, def_val, descr);
+ "Value: %s\nDescription: %s\n\n",
+ vme->key, def_val, descr);
strcat (output_string, tmp_str);
}
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.h b/xlators/mgmt/glusterd/src/glusterd-volgen.h
index b495b4408bf..342183ccafc 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.h
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.h
@@ -86,6 +86,9 @@ typedef enum {
typedef enum { DOC, NO_DOC, GLOBAL_DOC, GLOBAL_NO_DOC } option_type_t;
+typedef int (*vme_option_validation) (char *key, dict_t *dict,
+ char **op_errstr);
+
struct volopt_map_entry {
char *key;
char *voltype;
@@ -94,7 +97,10 @@ struct volopt_map_entry {
option_type_t type;
uint32_t flags;
uint32_t op_version;
+ char *description;
+ vme_option_validation validate_fn;
};
+
int glusterd_create_rb_volfiles (glusterd_volinfo_t *volinfo,
glusterd_brickinfo_t *brickinfo);
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index 41719ec8993..62e7b4259cb 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -41,6 +41,12 @@
*
* Seventh field is <op-version>.
*
+ * Eight field is description of option: If NULL, tried to fetch from
+ * translator code's xlator_options table.
+ *
+ * Nineth field is validation function: If NULL, xlator's option specific
+ * validation will be tried, otherwise tried at glusterd code itself.
+ *
* There are two type of entries: basic and special.
*
* - Basic entries are the ones where the <option> does _not_ start with
@@ -463,50 +469,52 @@ struct volopt_map_entry glusterd_volopt_map[] = {
.voltype = "performance/write-behind",
.option = "!perf",
.value = "on",
- .type = NO_DOC,
- .op_version = 1
+ .op_version = 1,
+ .description = "enable/disable write-behind translator in the volume."
},
{ .key = "performance.read-ahead",
.voltype = "performance/read-ahead",
.option = "!perf",
.value = "on",
- .type = NO_DOC,
- .op_version = 1
+ .op_version = 1,
+ .description = "enable/disable read-ahead translator in the volume."
},
{ .key = "performance.io-cache",
.voltype = "performance/io-cache",
.option = "!perf",
.value = "on",
- .type = NO_DOC,
- .op_version = 1
+ .op_version = 1,
+ .description = "enable/disable io-cache translator in the volume."
},
{ .key = "performance.quick-read",
.voltype = "performance/quick-read",
.option = "!perf",
.value = "on",
- .type = NO_DOC,
- .op_version = 1
+ .op_version = 1,
+ .description = "enable/disable quick-read translator in the volume."
},
{ .key = "performance.open-behind",
.voltype = "performance/open-behind",
.option = "!perf",
.value = "on",
- .type = NO_DOC,
- .op_version = 2
+ .op_version = 2,
+ .description = "enable/disable open-behind translator in the volume."
},
{ .key = "performance.stat-prefetch",
.voltype = "performance/md-cache",
.option = "!perf",
.value = "on",
- .type = NO_DOC,
- .op_version = 1
+ .op_version = 1,
+ .description = "enable/disable meta-data caching translator in the "
+ "volume."
},
{ .key = "performance.client-io-threads",
.voltype = "performance/io-threads",
.option = "!perf",
.value = "off",
- .type = NO_DOC,
- .op_version = 1
+ .op_version = 1,
+ .description = "enable/disable io-threads translator in the client "
+ "graph of volume."
},
{ .key = "performance.nfs.write-behind",
.voltype = "performance/write-behind",