diff options
author | Amar Tumballi <amarts@redhat.com> | 2018-06-29 23:40:53 +0530 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2018-08-22 15:47:38 +0000 |
commit | a2112bd6fa2e4851cd982a691165f76f0c90d977 (patch) | |
tree | 51dd84fbaaa75a3a94167337dc8de920a2111f57 /xlators | |
parent | bfba1d3602b20895956767c668e86390f16cb782 (diff) |
xlators/playground: fix the template files with latest requirements
* Make use of xlator_api
* Make use of gf_msg()
* Make use of mem-pool
* Add a sample metrics dump function
* Provide an dummy option, which can be initialized, and reconfigured
* Add a test case to make sure template xlator is built and used
with default fops
* Make a change in rpc-coverage to run without lock tests.
Updates: bz#1193929
Change-Id: I377dd67b656f440f9bc7c0098e21c0c1934e9096
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/playground/template/src/Makefile.am | 2 | ||||
-rw-r--r-- | xlators/playground/template/src/template.c | 169 | ||||
-rw-r--r-- | xlators/playground/template/src/template.h | 29 |
3 files changed, 185 insertions, 15 deletions
diff --git a/xlators/playground/template/src/Makefile.am b/xlators/playground/template/src/Makefile.am index 92cbe974093..e76a717a550 100644 --- a/xlators/playground/template/src/Makefile.am +++ b/xlators/playground/template/src/Makefile.am @@ -1,5 +1,5 @@ xlator_LTLIBRARIES = template.la -xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/testing/features +xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/playground template_la_LDFLAGS = -module $(GF_XLATOR_DEFAULT_LDFLAGS) diff --git a/xlators/playground/template/src/template.c b/xlators/playground/template/src/template.c index c4db42debd0..45d310a8c6e 100644 --- a/xlators/playground/template/src/template.c +++ b/xlators/playground/template/src/template.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2006-2012 Red Hat, Inc. <http://www.redhat.com> + Copyright (c) 2006-2018 Red Hat, Inc. <http://www.redhat.com> This file is part of GlusterFS. This file is licensed to you under your choice of the GNU Lesser @@ -8,37 +8,180 @@ cases as published by the Free Software Foundation. */ #include "template.h" +#include "statedump.h" -int32_t -init (xlator_t *this) +static int32_t +template_mem_acct_init (xlator_t *this) { + int ret = -1; + + GF_VALIDATE_OR_GOTO ("template", this, out); + + ret = xlator_mem_acct_init (this, gf_template_mt_end + 1); + + if (ret != 0) { + gf_msg (this->name, GF_LOG_ERROR, ENOMEM, TEMPLATE_MSG_NO_MEMORY, + "Memory accounting init failed"); + goto out; + } + + ret = 0; +out: + return ret; +} + +static int32_t +template_priv_to_dict (xlator_t *this, dict_t *dict, char *brickname) +{ + int ret = 0; + template_private_t *priv = NULL; + + priv = this->private; + ret = dict_set_uint64 (dict, "template.dummy", priv->dummy); + if (ret) + gf_msg_debug (this->name, ENOMEM, + "dict_set of dummy key failed"); + + return 0; +} + + +static int32_t +template_priv (xlator_t *this) +{ + template_private_t *priv = NULL; + + priv = this->private; + gf_proc_dump_write ("template.dummy", "%lu", priv->dummy); + + return 0; +} + +static int32_t +template_dump_metrics (xlator_t *this, int fd) +{ + template_private_t *priv = NULL; + + priv = this->private; + /* NOTE: currently this is adding private variable, which can + be constant here. But in reality, things which are changing + can be added here, so we get to plot them on graph. */ + dprintf (fd, "%s.private.dummy %d\n", this->name, priv->dummy); + + return 0; +} + +static int32_t +template_init (xlator_t *this) +{ + int ret = -1; + template_private_t *priv = NULL; if (!this->children || this->children->next) { - gf_log (this->name, GF_LOG_ERROR, + gf_msg (this->name, GF_LOG_ERROR, EINVAL, TEMPLATE_MSG_NO_GRAPH, "not configured with exactly one child. exiting"); - return -1; + goto out; } if (!this->parents) { - gf_log (this->name, GF_LOG_WARNING, + gf_msg (this->name, GF_LOG_ERROR, EINVAL, TEMPLATE_MSG_NO_GRAPH, "dangling volume. check volfile "); + goto out; } - return 0; + priv = GF_CALLOC (1, sizeof (template_private_t), + gf_template_mt_private_t); + if (!priv) { + gf_msg (this->name, GF_LOG_ERROR, ENOMEM, TEMPLATE_MSG_NO_MEMORY, + "priv allocation failed"); + goto out; + } + + GF_OPTION_INIT ("dummy", priv->dummy, int32, out); + + this->private = priv; + ret = 0; + +out: + return ret; } -void -fini (xlator_t *this) +static int +template_reconfigure (xlator_t *this, dict_t *options) { - return; + int ret = -1; + template_private_t *priv = NULL; + + priv = this->private; + + GF_OPTION_RECONF ("dummy", priv->dummy, options, int32, out); + + ret = 0; + out: + return ret; } -struct xlator_fops fops = { +static void +template_fini (xlator_t *this) +{ + template_private_t *priv = NULL; + + priv = this->private; + this->private = NULL; + + GF_FREE (priv); +} + +static int +template_notify (xlator_t *this, int32_t event, void *data, ...) +{ + switch (event) { + default: + default_notify (this, event, data); + gf_msg_debug (this->name, 0, "event %d received", event); + } + + return 0; +} + +struct xlator_fops template_fops = { +}; + +struct xlator_cbks template_cbks = { }; -struct xlator_cbks cbks = { +struct xlator_dumpops template_dumpops = { + .priv = template_priv, + .priv_to_dict = template_priv_to_dict, }; -struct volume_options options[] = { +struct volume_options template_options[] = { + { .key = {"dummy"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 1024, + .default_value = "1", + .description = "a dummy option to show how to set the option", + .op_version = {GD_OP_VERSION_4_2_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC, + .level = OPT_STATUS_EXPERIMENTAL, + .tags = { "development", "experimental", "template" }, + }, { .key = {NULL} }, }; + + +xlator_api_t xlator_api = { + .init = template_init, + .fini = template_fini, + .notify = template_notify, + .reconfigure = template_reconfigure, + .mem_acct_init = template_mem_acct_init, + .dump_metrics = template_dump_metrics, + .op_version = {GD_OP_VERSION_4_2_0}, + .dumpops = &template_dumpops, + .fops = &template_fops, + .cbks = &template_cbks, + .options = template_options, + .identifier = "template", +}; diff --git a/xlators/playground/template/src/template.h b/xlators/playground/template/src/template.h index 2e9752cac09..e384c0181f7 100644 --- a/xlators/playground/template/src/template.h +++ b/xlators/playground/template/src/template.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com> + Copyright (c) 2013-2018 Red Hat, Inc. <http://www.redhat.com> This file is part of GlusterFS. This file is licensed to you under your choice of the GNU Lesser @@ -16,4 +16,31 @@ #include "xlator.h" #include "defaults.h" +struct template_private { + /* Add all the relevant fields you need here */ + int32_t dummy; +}; + +typedef struct template_private template_private_t; + +/* Below section goes to template-mem-types.h */ +#include "mem-types.h" + +enum gf_template_mem_types_ { + gf_template_mt_private_t = gf_common_mt_end + 1, + gf_template_mt_end, +}; + +/* This normally goes to another file 'template-messages.h", + required for 'gf_msg()'. + NOTE: make sure you have added your component (in this case, + TEMPLATE) in `libglusterfs/src/glfs-message-id.h`. + */ +#include "glfs-message-id.h" + +GLFS_MSGID(TEMPLATE, + TEMPLATE_MSG_NO_MEMORY, + TEMPLATE_MSG_NO_GRAPH + ); + #endif /* __TEMPLATE_H__ */ |