summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-volgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-volgen.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c117
1 files changed, 103 insertions, 14 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c
index 46a05d965e5..120cef0c210 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c
@@ -462,7 +462,8 @@ static int
__write_client_xlator (FILE *file, dict_t *dict,
char *remote_subvol,
char *remote_host,
- int count)
+ int count,
+ char *last_xlator)
{
char *volname = NULL;
char *opt_transtype = NULL;
@@ -533,6 +534,9 @@ __write_client_xlator (FILE *file, dict_t *dict,
ret = 0;
+ snprintf (last_xlator, 1024, "%s-%s-%d",
+ volname, "client", count);
+
out:
return ret;
}
@@ -772,7 +776,8 @@ __write_replicate_xlator (FILE *file, dict_t *dict,
char *subvolume,
int replicate_count,
int subvol_count,
- int count)
+ int count,
+ char *last_xlator)
{
char *volname = NULL;
char *opt_readsubvol = NULL;
@@ -1028,6 +1033,9 @@ __write_replicate_xlator (FILE *file, dict_t *dict,
ret = 0;
+ snprintf (last_xlator, 1024, "%s-%s-%d",
+ volname, "replicate", count);
+
out:
if (subvol_str)
GF_FREE (subvol_str);
@@ -1039,7 +1047,8 @@ __write_stripe_xlator (FILE *file, dict_t *dict,
char *subvolume,
int stripe_count,
int subvol_count,
- int count)
+ int count,
+ char *last_xlator)
{
char *volname = NULL;
char *opt_blocksize = NULL;
@@ -1122,6 +1131,9 @@ __write_stripe_xlator (FILE *file, dict_t *dict,
ret = 0;
+ snprintf (last_xlator, 1024, "%s-%s-%d",
+ volname, "stripe", count);
+
out:
if (subvol_str)
GF_FREE (subvol_str);
@@ -1132,7 +1144,8 @@ out:
static int
__write_distribute_xlator (FILE *file, dict_t *dict,
char *subvolume,
- int dist_count)
+ int dist_count,
+ char *last_xlator)
{
char *volname = NULL;
char *subvol_str = NULL;
@@ -1223,6 +1236,9 @@ __write_distribute_xlator (FILE *file, dict_t *dict,
ret = 0;
+ snprintf (last_xlator, 1024, "%s-%s",
+ volname, "dht");
+
out:
if (subvol_str)
GF_FREE (subvol_str);
@@ -1581,6 +1597,33 @@ out:
}
static int
+__write_iostats_xlator (FILE *file, dict_t *dict,
+ char *subvolume)
+{
+ char *volname = NULL;
+ int ret = -1;
+
+ const char *iostats_str = "volume %s\n"
+ " type debug/io-stats\n"
+ " subvolumes %s\n"
+ "end-volume\n\n";
+
+ ret = dict_get_str (dict, "volname", &volname);
+ if (ret) {
+ goto out;
+ }
+
+ fprintf (file, iostats_str,
+ volname,
+ subvolume);
+
+ ret = 0;
+
+out:
+ return ret;
+}
+
+static int
generate_server_volfile (glusterd_brickinfo_t *brickinfo,
dict_t *dict,
const char *filename)
@@ -1863,11 +1906,12 @@ destroy_perf_xlator_list (char *perf_xlator_list[])
static int
write_perf_xlators (glusterd_volinfo_t *volinfo, FILE *file,
int32_t dist_count, int32_t replicate_count,
- int32_t stripe_count)
+ int32_t stripe_count, char *last_xlator)
{
char *perf_xlator_list[256] = {0,};
char subvol[2048] = {0,};
- int i = 0;
+ int i = 0;
+ int last_idx = 0;
int ret = 0;
char *volname = NULL;
dict_t *dict = NULL;
@@ -1883,6 +1927,19 @@ write_perf_xlators (glusterd_volinfo_t *volinfo, FILE *file,
goto out;
}
+ while (perf_xlator_list[i]) {
+ i++;
+ }
+
+ if (i == 0) {
+ gf_log ("", GF_LOG_DEBUG,
+ "No perf xlators enabled");
+ ret = 0;
+ goto out;
+ }
+
+ i = 0;
+
if (dist_count > 1) {
VOLGEN_GENERATE_VOLNAME (subvol, volname, "dht");
ret = __write_perf_xlator (perf_xlator_list[i], file,
@@ -1929,6 +1986,17 @@ write_perf_xlators (glusterd_volinfo_t *volinfo, FILE *file,
}
}
+ if (i >= 1) {
+ last_idx = i - 1;
+
+ if (perf_xlator_list[last_idx] && last_idx >= 0) {
+ VOLGEN_GENERATE_VOLNAME (last_xlator, volname,
+ perf_xlator_list[last_idx]);
+ gf_log ("", GF_LOG_DEBUG,
+ "last xlator copied to %s", last_xlator);
+ }
+ }
+
out:
destroy_perf_xlator_list (perf_xlator_list);
@@ -1943,6 +2011,7 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
dict_t *dict = NULL;
char *volname = NULL;
glusterd_brickinfo_t *brick = NULL;
+ char last_xlator[1024] = {0,};
char subvol[2048] = {0,};
int32_t replicate_count = 0;
int32_t stripe_count = 0;
@@ -2015,7 +2084,8 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
list_for_each_entry (brick, &volinfo->bricks, brick_list) {
ret = __write_client_xlator (file, dict, brick->path,
- brick->hostname, count);
+ brick->hostname, count,
+ last_xlator);
if (ret) {
gf_log ("", GF_LOG_DEBUG,
"Could not write xlator");
@@ -2041,7 +2111,8 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
ret = __write_replicate_xlator (file, dict, subvol,
replicate_count,
subvol_count,
- i);
+ i,
+ last_xlator);
if (ret) {
gf_log ("", GF_LOG_DEBUG,
"Count not write xlator");
@@ -2062,7 +2133,8 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
ret = __write_stripe_xlator (file, dict, subvol,
stripe_count,
subvol_count,
- i);
+ i,
+ last_xlator);
if (ret) {
gf_log ("", GF_LOG_DEBUG,
"Count not write xlator");
@@ -2090,7 +2162,8 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
ret = __write_distribute_xlator (file,
dict,
subvol,
- dist_count);
+ dist_count,
+ last_xlator);
if (ret) {
gf_log ("", GF_LOG_DEBUG,
"Count not write xlator");
@@ -2099,13 +2172,29 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
}
- write_perf_xlators (volinfo, file, dist_count,
- replicate_count, stripe_count);
+ ret = write_perf_xlators (volinfo, file, dist_count,
+ replicate_count, stripe_count,
+ last_xlator);
+ if (ret) {
+ gf_log ("", GF_LOG_DEBUG,
+ "Could not write performance xlators");
+ goto out;
+ }
- fclose (file);
- file = NULL;
+ ret = __write_iostats_xlator (file,
+ dict,
+ last_xlator);
+ if (ret) {
+ gf_log ("", GF_LOG_DEBUG,
+ "Could not write io-stats xlator");
+ goto out;
+ }
out:
+ if (file)
+ fclose (file);
+ file = NULL;
+
return ret;
}