summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilind Changire <mchangir@redhat.com>2019-01-22 12:10:59 +0530
committerAmar Tumballi <amarts@redhat.com>2019-01-22 13:47:19 +0000
commitb6c417785e54620331ae35d6971fe8bef98b4619 (patch)
tree828099423d2cc2cfee056b0431ebd54a205d533f
parent67bc3775685198b9ab10c1f2a0d957b157bb4acd (diff)
rpc: use address-family option from vol file
This patch helps enable IPv6 connections in the cluster. The default address-family is IPv4 without using this option explicitly. When address-family is set to "inet6" in the /etc/glusterfs/glusterd.vol file, the mount command-line also needs to have -o xlator-option="transport.address-family=inet6" added to it. This option also gets added to the brick command-line. Snapshot and gfapi use-cases should also use this option to pass in the inet6 address-family. Change-Id: I97db91021af27bacb6d7578e33ea4817f66d7270 fixes: bz#1635863 Signed-off-by: Milind Changire <mchangir@redhat.com>
-rw-r--r--api/src/glfs-mgmt.c11
-rw-r--r--glusterfsd/src/glusterfsd-mgmt.c5
-rw-r--r--libglusterfs/src/common-utils.c17
-rw-r--r--libglusterfs/src/glusterfs/common-utils.h3
-rw-r--r--libglusterfs/src/libglusterfs.sym1
-rw-r--r--rpc/rpc-lib/src/rpc-transport.c4
-rw-r--r--rpc/rpc-lib/src/rpc-transport.h2
-rw-r--r--xlators/features/snapview-server/src/snapview-server-mgmt.c5
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c11
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c7
10 files changed, 52 insertions, 14 deletions
diff --git a/api/src/glfs-mgmt.c b/api/src/glfs-mgmt.c
index e8ad020c752..d502b4f46b6 100644
--- a/api/src/glfs-mgmt.c
+++ b/api/src/glfs-mgmt.c
@@ -697,9 +697,9 @@ volfile:
* volfile if topology hasn't changed.
* glusterfs_volfile_reconfigure returns 3 possible return states
* return 0 =======> reconfiguration of options has succeeded
- * return 1 =======> the graph has to be reconstructed and all the
- * xlators should be inited return -1(or -ve) =======> Some Internal Error
- * occurred during the operation
+ * return 1 =======> the graph has to be reconstructed and all
+ * the xlators should be inited return -1(or -ve) =======> Some Internal
+ * Error occurred during the operation
*/
pthread_mutex_lock(&fs->mutex);
@@ -1031,7 +1031,10 @@ glfs_mgmt_init(struct glfs *fs)
!strcmp(cmd_args->volfile_server_transport, "unix")) {
ret = rpc_transport_unix_options_build(&options, host, 0);
} else {
- ret = rpc_transport_inet_options_build(&options, host, port);
+ xlator_cmdline_option_t *opt = find_xlator_option_in_cmd_args_t(
+ "address-family", cmd_args);
+ ret = rpc_transport_inet_options_build(&options, host, port,
+ (opt ? opt->value : NULL));
}
if (ret)
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
index 7c5ce523d26..f8934b184ed 100644
--- a/glusterfsd/src/glusterfsd-mgmt.c
+++ b/glusterfsd/src/glusterfsd-mgmt.c
@@ -2645,6 +2645,7 @@ glusterfs_mgmt_init(glusterfs_ctx_t *ctx)
int ret = -1;
int port = GF_DEFAULT_BASE_PORT;
char *host = NULL;
+ xlator_cmdline_option_t *opt = NULL;
cmd_args = &ctx->cmd_args;
GF_VALIDATE_OR_GOTO(THIS->name, cmd_args->volfile_server, out);
@@ -2663,7 +2664,9 @@ glusterfs_mgmt_init(glusterfs_ctx_t *ctx)
!strcmp(cmd_args->volfile_server_transport, "unix")) {
ret = rpc_transport_unix_options_build(&options, host, 0);
} else {
- ret = rpc_transport_inet_options_build(&options, host, port);
+ opt = find_xlator_option_in_cmd_args_t("address-family", cmd_args);
+ ret = rpc_transport_inet_options_build(&options, host, port,
+ (opt ? opt->value : NULL));
}
if (ret)
goto out;
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index 4104c576fd2..0798661806d 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -503,8 +503,7 @@ gf_resolve_ip6(const char *hostname, uint16_t port, int family, void **dnscache,
if ((ret = getaddrinfo(hostname, port_str, &hints, &cache->first)) !=
0) {
gf_msg("resolver", GF_LOG_ERROR, 0, LG_MSG_GETADDRINFO_FAILED,
- "getaddrinfo failed"
- " (%s)",
+ "getaddrinfo failed (family:%d) (%s)", family,
gai_strerror(ret));
GF_FREE(*dnscache);
@@ -5328,3 +5327,17 @@ gf_replace_new_iatt_in_dict(dict_t *xdata)
return ret;
}
+
+xlator_cmdline_option_t *
+find_xlator_option_in_cmd_args_t(const char *option_name, cmd_args_t *args)
+{
+ xlator_cmdline_option_t *pos = NULL;
+ xlator_cmdline_option_t *tmp = NULL;
+
+ list_for_each_entry_safe(pos, tmp, &args->xlator_options, cmd_args)
+ {
+ if (strcmp(pos->key, option_name) == 0)
+ return pos;
+ }
+ return NULL;
+}
diff --git a/libglusterfs/src/glusterfs/common-utils.h b/libglusterfs/src/glusterfs/common-utils.h
index e7101be4aab..9061861ce3b 100644
--- a/libglusterfs/src/glusterfs/common-utils.h
+++ b/libglusterfs/src/glusterfs/common-utils.h
@@ -1064,4 +1064,7 @@ gf_replace_old_iatt_in_dict(struct _dict *);
int
gf_replace_new_iatt_in_dict(struct _dict *);
+xlator_cmdline_option_t *
+find_xlator_option_in_cmd_args_t(const char *option_name, cmd_args_t *args);
+
#endif /* _COMMON_UTILS_H */
diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym
index e03cc987c81..beeab5468f9 100644
--- a/libglusterfs/src/libglusterfs.sym
+++ b/libglusterfs/src/libglusterfs.sym
@@ -1149,3 +1149,4 @@ gf_replace_new_iatt_in_dict
gf_changelog_init
gf_changelog_register_generic
gf_gfid_generate_from_xxh64
+find_xlator_option_in_cmd_args_t
diff --git a/rpc/rpc-lib/src/rpc-transport.c b/rpc/rpc-lib/src/rpc-transport.c
index 0c9291380be..e6421fcfab5 100644
--- a/rpc/rpc-lib/src/rpc-transport.c
+++ b/rpc/rpc-lib/src/rpc-transport.c
@@ -648,7 +648,7 @@ out:
int
rpc_transport_inet_options_build(dict_t **options, const char *hostname,
- int port)
+ int port, char *af)
{
dict_t *dict = NULL;
char *host = NULL;
@@ -688,7 +688,7 @@ rpc_transport_inet_options_build(dict_t **options, const char *hostname,
goto out;
}
- ret = dict_set_str(dict, "address-family", addr_family);
+ ret = dict_set_str(dict, "address-family", (af != NULL ? af : addr_family));
if (ret) {
gf_log(THIS->name, GF_LOG_WARNING, "failed to set address-family to %s",
addr_family);
diff --git a/rpc/rpc-lib/src/rpc-transport.h b/rpc/rpc-lib/src/rpc-transport.h
index 18412cc85f7..7be1ba14a0c 100644
--- a/rpc/rpc-lib/src/rpc-transport.h
+++ b/rpc/rpc-lib/src/rpc-transport.h
@@ -307,7 +307,7 @@ rpc_transport_unix_options_build(dict_t **options, char *filepath,
int
rpc_transport_inet_options_build(dict_t **options, const char *hostname,
- int port);
+ int port, char *af);
void
rpc_transport_cleanup(rpc_transport_t *);
diff --git a/xlators/features/snapview-server/src/snapview-server-mgmt.c b/xlators/features/snapview-server/src/snapview-server-mgmt.c
index 8e23b9adb2e..b608cdfcd44 100644
--- a/xlators/features/snapview-server/src/snapview-server-mgmt.c
+++ b/xlators/features/snapview-server/src/snapview-server-mgmt.c
@@ -86,6 +86,7 @@ svs_mgmt_init(xlator_t *this)
char *host = NULL;
cmd_args_t *cmd_args = NULL;
glusterfs_ctx_t *ctx = NULL;
+ xlator_cmdline_option_t *opt = NULL;
GF_VALIDATE_OR_GOTO("snapview-server", this, out);
GF_VALIDATE_OR_GOTO(this->name, this->private, out);
@@ -100,7 +101,9 @@ svs_mgmt_init(xlator_t *this)
if (cmd_args->volfile_server)
host = cmd_args->volfile_server;
- ret = rpc_transport_inet_options_build(&options, host, port);
+ opt = find_xlator_option_in_cmd_args_t("address-family", cmd_args);
+ ret = rpc_transport_inet_options_build(&options, host, port,
+ (opt != NULL ? opt->value : NULL));
if (ret) {
gf_msg(this->name, GF_LOG_ERROR, 0, SVS_MSG_BUILD_TRNSPRT_OPT_FAILED,
"failed to build the "
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index ab57c199954..614d34db670 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -3417,7 +3417,7 @@ out:
int
glusterd_transport_inet_options_build(dict_t **options, const char *hostname,
- int port)
+ int port, char *af)
{
xlator_t *this = NULL;
dict_t *dict = NULL;
@@ -3435,7 +3435,7 @@ glusterd_transport_inet_options_build(dict_t **options, const char *hostname,
port = GLUSTERD_DEFAULT_PORT;
/* Build default transport options */
- ret = rpc_transport_inet_options_build(&dict, hostname, port);
+ ret = rpc_transport_inet_options_build(&dict, hostname, port, af);
if (ret)
goto out;
@@ -3489,6 +3489,7 @@ glusterd_friend_rpc_create(xlator_t *this, glusterd_peerinfo_t *peerinfo,
int ret = -1;
glusterd_peerctx_t *peerctx = NULL;
data_t *data = NULL;
+ char *af = NULL;
peerctx = GF_CALLOC(1, sizeof(*peerctx), gf_gld_mt_peerctx_t);
if (!peerctx)
@@ -3504,8 +3505,12 @@ glusterd_friend_rpc_create(xlator_t *this, glusterd_peerinfo_t *peerinfo,
uniquely identify a
peerinfo */
+ ret = dict_get_str(this->options, "transport.address-family", &af);
+ if (ret)
+ gf_log(this->name, GF_LOG_TRACE,
+ "option transport.address-family is not set in xlator options");
ret = glusterd_transport_inet_options_build(&options, peerinfo->hostname,
- peerinfo->port);
+ peerinfo->port, af);
if (ret)
goto out;
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index fd6e360a730..1aa6947fbba 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -2044,6 +2044,7 @@ glusterd_volume_start_glusterfs(glusterd_volinfo_t *volinfo,
int pid = -1;
int32_t len = 0;
glusterd_brick_proc_t *brick_proc = NULL;
+ char *inet_family = NULL;
GF_ASSERT(volinfo);
GF_ASSERT(brickinfo);
@@ -2219,6 +2220,12 @@ retry:
else if (volinfo->transport_type == GF_TRANSPORT_BOTH_TCP_RDMA)
runner_argprintf(&runner, "--volfile-server-transport=socket,rdma");
+ ret = dict_get_str(this->options, "transport.address-family", &inet_family);
+ if (!ret) {
+ runner_add_arg(&runner, "--xlator-option");
+ runner_argprintf(&runner, "transport.address-family=%s", inet_family);
+ }
+
if (volinfo->memory_accounting)
runner_add_arg(&runner, "--mem-accounting");