From 9206f5b770bbfc2cf1697f10c1e650cae35272f1 Mon Sep 17 00:00:00 2001 From: Jeff Darcy Date: Tue, 26 Jul 2016 08:49:36 -0400 Subject: io-stats: fix translator names Change-Id: Icf5afaee8b7c704aecab7f8a8a1df9f1bc9288ce BUG: 1360401 Signed-off-by: Jeff Darcy Reviewed-on: http://review.gluster.org/15016 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Vijay Bellur --- glusterfsd/src/glusterfsd-mgmt.c | 9 +++++++++ xlators/debug/io-stats/src/io-stats.c | 30 +++++++++++++++++++++++++---- xlators/mgmt/glusterd/src/glusterd-volgen.c | 9 +++++++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index d5dc5607cd8..51680e68b67 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -341,6 +341,15 @@ cont: goto out; } + /* + * Searching by name will only get us to the decompounder translator, + * but we really want io-stats. Since we know the exact relationship + * between these two, it's easy to get from one to the other. + * + * TBD: should this even be notify, or something else? + */ + xlator = FIRST_CHILD(xlator); + output = dict_new (); ret = xlator->notify (xlator, GF_EVENT_TRANSLATOR_INFO, dict, output); diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 5e82fb4c029..d7684e16470 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -146,6 +146,18 @@ struct ios_conf { ios_sample_buf_t *ios_sample_buf; struct dnscache *dnscache; int32_t ios_dnscache_ttl_sec; + /* + * What we really need here is just a unique value to keep files + * created by this instance distinct from those created by any other. + * On the client side this isn't a problem, so we just use the + * translator name. On the server side conflicts can occur, so the + * volfile-generation code automatically sets this (via an option) + * to be the brick path. + * + * NB While the *field* name has changed, it didn't seem worth changing + * all of the cases where "xlator_name" is used as a *variable* name. + */ + char *unique_id; }; @@ -702,8 +714,9 @@ _io_stats_get_key_prefix (xlator_t *this, char **key_prefix) { int bytes_written = 0; int i = 0; int ret = 0; + struct ios_conf *conf = this->private; - xlator_name = strdupa (this->name); + xlator_name = strdupa (conf->unique_id); for (i = 0; i < strlen (xlator_name); i++) { if (xlator_name[i] == '/') xlator_name[i] = '_'; @@ -1036,7 +1049,7 @@ _io_stats_write_latency_sample (xlator_t *this, ios_sample_t *sample, hostname = "Unknown"; } - xlator_name = this->name; + xlator_name = conf->unique_id; if (!xlator_name || strlen (xlator_name) == 0) xlator_name = "Unknown"; @@ -2911,7 +2924,7 @@ _ios_dump_thread (xlator_t *this) { conf = this->private; gf_log (this->name, GF_LOG_INFO, "IO stats dump thread started, " "polling IO stats every %d seconds", conf->ios_dump_interval); - xlator_name = strdupa (this->name); + xlator_name = strdupa (conf->unique_id); for (i = 0; i < strlen (xlator_name); i++) { if (xlator_name[i] == '/') xlator_name[i] = '_'; @@ -3654,6 +3667,11 @@ init (xlator_t *this) if (!conf) goto out; + if (dict_get_str (this->options, "unique-id", &conf->unique_id) != 0) { + /* This is always set on servers, so we must be a client. */ + conf->unique_id = this->name; + } + /* * Init it just after calloc, so that we are sure the lock is inited * in case of error paths. @@ -3724,7 +3742,6 @@ init (xlator_t *this) GF_OPTION_INIT ("log-flush-timeout", log_flush_timeout, time, out); gf_log_set_log_flush_timeout (log_flush_timeout); - this->private = conf; if (conf->ios_dump_interval > 0) { pthread_create (&conf->dump_thread, NULL, @@ -4086,6 +4103,11 @@ struct volume_options options[] = { "log messages that can be buffered for a time equal to" " the value of the option brick-log-flush-timeout." }, + { .key = {"unique-id"}, + .type = GF_OPTION_TYPE_STR, + .default_value = "/no/such/path", + .description = "Unique ID for our files." + }, { .key = {NULL} }, }; diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 9eefd2a8491..699137d8f9e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -1555,7 +1555,8 @@ brick_graph_add_decompounder (volgen_graph_t *graph, glusterd_volinfo_t *volinfo conf = this->private; GF_VALIDATE_OR_GOTO (this->name, conf, out); - xl = volgen_graph_add (graph, "performance/decompounder", volinfo->volname); + xl = volgen_graph_add_as (graph, "performance/decompounder", + brickinfo->path); if (xl) ret = 0; out: @@ -2170,10 +2171,14 @@ brick_graph_add_io_stats (volgen_graph_t *graph, glusterd_volinfo_t *volinfo, if (!graph || !volinfo || !set_dict || !brickinfo) goto out; - xl = volgen_graph_add_as (graph, "debug/io-stats", brickinfo->path); + xl = volgen_graph_add (graph, "debug/io-stats", volinfo->volname); if (!xl) goto out; + ret = xlator_set_option (xl, "unique-id", brickinfo->path); + if (ret) + goto out; + ret = 0; out: return ret; -- cgit