diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-volgen.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 69 |
1 files changed, 61 insertions, 8 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 24e99d2be9f..23890238933 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -5081,7 +5081,7 @@ build_nfs_graph (volgen_graph_t *graph, dict_t *mod_dict) static void get_brick_filepath (char *filename, glusterd_volinfo_t *volinfo, - glusterd_brickinfo_t *brickinfo) + glusterd_brickinfo_t *brickinfo, char *prefix) { char path[PATH_MAX] = {0,}; char brick[PATH_MAX] = {0,}; @@ -5092,10 +5092,14 @@ get_brick_filepath (char *filename, glusterd_volinfo_t *volinfo, GLUSTERD_REMOVE_SLASH_FROM_PATH (brickinfo->path, brick); GLUSTERD_GET_VOLUME_DIR (path, volinfo, priv); - snprintf (filename, PATH_MAX, "%s/%s.%s.%s.vol", - path, volinfo->volname, - brickinfo->hostname, - brick); + if (prefix) + snprintf (filename, PATH_MAX, "%s/%s.%s.%s.%s.vol", + path, volinfo->volname, prefix, + brickinfo->hostname, brick); + else + snprintf (filename, PATH_MAX, "%s/%s.%s.%s.vol", + path, volinfo->volname, + brickinfo->hostname, brick); } gf_boolean_t @@ -5128,7 +5132,7 @@ glusterd_is_valid_volfpath (char *volname, char *brick) goto out; } strncpy (volinfo->volname, volname, sizeof (volinfo->volname)); - get_brick_filepath (volfpath, volinfo, brickinfo); + get_brick_filepath (volfpath, volinfo, brickinfo, NULL); ret = ((strlen(volfpath) < PATH_MAX) && strlen (strrchr(volfpath, '/')) < _POSIX_PATH_MAX); @@ -5153,7 +5157,7 @@ glusterd_generate_brick_volfile (glusterd_volinfo_t *volinfo, GF_ASSERT (volinfo); GF_ASSERT (brickinfo); - get_brick_filepath (filename, volinfo, brickinfo); + get_brick_filepath (filename, volinfo, brickinfo, NULL); ret = build_server_graph (&graph, volinfo, mod_dict, brickinfo); if (!ret) @@ -5417,6 +5421,55 @@ generate_single_transport_client_volfile (glusterd_volinfo_t *volinfo, return ret; } +int +glusterd_generate_client_per_brick_volfile (glusterd_volinfo_t *volinfo) +{ + char filepath[PATH_MAX] = {0, }; + glusterd_brickinfo_t *brick = NULL; + volgen_graph_t graph = {0, }; + dict_t *dict = NULL; + xlator_t *xl = NULL; + int ret = -1; + + dict = dict_new (); + if (!dict) + goto out; + + ret = dict_set_uint32 (dict, "trusted-client", GF_CLIENT_TRUSTED); + if (ret) + goto out; + + cds_list_for_each_entry (brick, &volinfo->bricks, brick_list) { + xl = volgen_graph_build_client (&graph, volinfo, + brick->hostname, brick->path, + brick->brick_id, + "tcp", dict); + if (!xl) { + ret = -1; + goto out; + } + + get_brick_filepath (filepath, volinfo, brick, "client"); + ret = volgen_write_volfile (&graph, filepath); + if (ret < 0) + goto out; + + volgen_graph_free (&graph); + memset (&graph, 0, sizeof (graph)); + } + + + ret = 0; +out: + if (ret) + volgen_graph_free (&graph); + + if (dict) + dict_unref (dict); + + return ret; +} + static void enumerate_transport_reqs (gf_transport_type type, char **types) { @@ -6089,7 +6142,7 @@ glusterd_delete_volfile (glusterd_volinfo_t *volinfo, GF_ASSERT (volinfo); GF_ASSERT (brickinfo); - get_brick_filepath (filename, volinfo, brickinfo); + get_brick_filepath (filename, volinfo, brickinfo, NULL); ret = sys_unlink (filename); if (ret) gf_msg ("glusterd", GF_LOG_ERROR, errno, |