diff options
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 15 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 38 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 42 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 6 | ||||
| -rwxr-xr-x | xlators/mount/fuse/utils/mount.glusterfs.in | 3 | ||||
| -rwxr-xr-x | xlators/mount/fuse/utils/mount_glusterfs.in | 3 | 
6 files changed, 103 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index 3ecb4f064f1..093548de712 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -266,6 +266,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          xlator_t                                *this               = NULL;          gf_boolean_t                             is_force           = _gf_false;          gsync_status_param_t                     param              = {0,}; +        char                                    *c                  = NULL;          this = THIS;          GF_ASSERT (this); @@ -417,8 +418,18 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                          GD_MSG_NO_MEMORY, "Memory allocation failed");                  goto out;          } -        host = strtok_r (dup_dstbrick, ":", &savetok); -        path = strtok_r (NULL, ":", &savetok); + +        /* +         * IPv4 address contains '.' and ipv6 addresses contains ':' +         * So finding the last occurance of ':' to +         * mark the start of brick path +         */ +        c = strrchr(dup_dstbrick, ':'); +        if (c != NULL) { +                c[0] = '\0'; +                host = dup_dstbrick; +                path = c++; +        }          if (!host || !path) {                  gf_msg (this->name, GF_LOG_ERROR, 0, diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index c808b07cbf2..cc599846bb9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -2210,6 +2210,7 @@ brick_graph_add_server (volgen_graph_t *graph, glusterd_volinfo_t *volinfo,          char            key[1024] = {0};          char            *ssl_user = NULL;          char            *value = NULL; +        char            *address_family_data = NULL;          if (!graph || !volinfo || !set_dict || !brickinfo)                  goto out; @@ -2246,6 +2247,17 @@ brick_graph_add_server (volgen_graph_t *graph, glusterd_volinfo_t *volinfo,          RPC_SET_OPT(xl, SSL_DH_PARAM_OPT,   "ssl-dh-param",         return -1);          RPC_SET_OPT(xl, SSL_EC_CURVE_OPT,   "ssl-ec-curve",         return -1); +        if (dict_get_str (volinfo->dict, "transport.address-family", +                &address_family_data) == 0) { +                ret = xlator_set_option (xl, "transport.address-family", +                                address_family_data); +                if (ret) { +                        gf_log ("glusterd", GF_LOG_WARNING, +                                        "failed to set transport.address-family"); +                        return -1; +                } +        } +          if (username) {                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "auth.login.%s.allow", @@ -2293,6 +2305,7 @@ brick_graph_add_pump (volgen_graph_t *graph, glusterd_volinfo_t *volinfo,          char            *password      = NULL;          char            *ptranst       = NULL;          char            *value         = NULL; +        char            *address_family_data = NULL;          if (!graph || !volinfo || !set_dict) @@ -2354,6 +2367,18 @@ brick_graph_add_pump (volgen_graph_t *graph, glusterd_volinfo_t *volinfo,                  if (ret)                          return -1; +                if (dict_get_str (volinfo->dict, "transport.address-family", +                                        &address_family_data) == 0) { +                        ret = xlator_set_option (rbxl, +                                        "transport.address-family", +                                        address_family_data); +                        if (ret) { +                                gf_log ("glusterd", GF_LOG_WARNING, +                                                "failed to set transport.address-family"); +                                return -1; +                        } +                } +                  xl = volgen_graph_add_nolink (graph, "cluster/pump", "%s-pump",                                                volinfo->volname);                  if (!xl) @@ -2831,6 +2856,7 @@ volgen_graph_build_client (volgen_graph_t *graph, glusterd_volinfo_t *volinfo,          char                    *ssl_str            = NULL;          gf_boolean_t             ssl_bool           = _gf_false;          char                    *value              = NULL; +        char                    *address_family_data = NULL;          GF_ASSERT (graph);          GF_ASSERT (subvol); @@ -2860,6 +2886,18 @@ volgen_graph_build_client (volgen_graph_t *graph, glusterd_volinfo_t *volinfo,          if (ret)                  goto err; +        if (dict_get_str (volinfo->dict, "transport.address-family", +                                &address_family_data) == 0) { +                ret = xlator_set_option (xl, +                                "transport.address-family", +                                address_family_data); +                if (ret) { +                        gf_log ("glusterd", GF_LOG_WARNING, +                                "failed to set transport.address-family"); +                        goto err; +                } +        } +          ret = dict_get_uint32 (set_dict, "trusted-client",                                 &client_type); diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 4850ce64fee..f02ac80ccb0 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -279,6 +279,7 @@ __glusterd_handle_create_volume (rpcsvc_request_t *req)          xlator_t               *this        = NULL;          char                   *free_ptr    = NULL;          char                   *trans_type  = NULL; +        char                   *address_family_str  = NULL;          uuid_t                  volume_id   = {0,};          uuid_t                  tmp_uuid    = {0};          int32_t                 type        = 0; @@ -359,6 +360,8 @@ __glusterd_handle_create_volume (rpcsvc_request_t *req)                  goto out;          } + +          ret = dict_get_str (dict, "transport", &trans_type);          if (ret) {                  snprintf (err_str, sizeof (err_str), "Unable to get " @@ -367,6 +370,30 @@ __glusterd_handle_create_volume (rpcsvc_request_t *req)                          GD_MSG_DICT_GET_FAILED, "%s", err_str);                  goto out;          } + +        ret = dict_get_str (this->options, "transport.address-family", +                        &address_family_str); + +        if (!ret) { +                ret = dict_set_dynstr_with_alloc (dict, +                                "transport.address-family", +                                address_family_str); +                if (ret) { +                        gf_log (this->name, GF_LOG_ERROR, +                                "failed to set transport.address-family"); +                        goto out; +                } +        } else if (!strcmp(trans_type, "tcp")) { +                /* Setting default as inet for trans_type tcp */ +                ret = dict_set_dynstr_with_alloc (dict, +                                "transport.address-family", +                                "inet"); +                if (ret) { +                        gf_log (this->name, GF_LOG_ERROR, +                                "failed to set transport.address-family"); +                        goto out; +                } +        }          ret = dict_get_str (dict, "bricks", &bricks);          if (ret) {                  snprintf (err_str, sizeof (err_str), "Unable to get bricks for " @@ -2084,6 +2111,7 @@ glusterd_op_create_volume (dict_t *dict, char **op_errstr)          char                  msg[1024] __attribute__((unused)) = {0, };          char                 *brick_mount_dir = NULL;          char                  key[PATH_MAX]   = ""; +        char                 *address_family_str = NULL;          this = THIS;          GF_ASSERT (this); @@ -2356,6 +2384,20 @@ glusterd_op_create_volume (dict_t *dict, char **op_errstr)                  goto out;          } +        ret = dict_get_str (dict, "transport.address-family", +                        &address_family_str); + +        if (!ret) { +                ret = dict_set_dynstr_with_alloc(volinfo->dict, +                                "transport.address-family", address_family_str); +                if (ret) { +                        gf_log (this->name, GF_LOG_ERROR, +                                        "Failed to set transport.address-family for %s", +                                        volinfo->volname); +                        goto out; +                } +        } +          gd_update_volume_op_versions (volinfo);          volinfo->caps = caps; diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index c0059d83cfe..dd9d159f0ca 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -1636,6 +1636,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {            .option     = "!ssl-ec-curve",            .op_version = GD_OP_VERSION_3_7_4,          }, +        { .key         = "transport.address-family", +          .voltype     = "protocol/server", +          .option      = "!address-family", +          .op_version  = GD_OP_VERSION_3_7_4, +          .type        = NO_DOC, +        },          /* Performance xlators enable/disbable options */          { .key         = "performance.write-behind", diff --git a/xlators/mount/fuse/utils/mount.glusterfs.in b/xlators/mount/fuse/utils/mount.glusterfs.in index 32168df5a33..78e32826b0b 100755 --- a/xlators/mount/fuse/utils/mount.glusterfs.in +++ b/xlators/mount/fuse/utils/mount.glusterfs.in @@ -617,7 +617,8 @@ main ()      fi      [ -r "$volfile_loc" ] || { -        server_ip=$(echo "$volfile_loc" | sed -n 's/\([a-zA-Z0-9:.\-]*\):.*/\1/p'); +        # '%' included to support ipv6 link local addresses +        server_ip=$(echo "$volfile_loc" | sed -n 's/\([a-zA-Z0-9:%.\-]*\):.*/\1/p');          volume_str=$(echo "$volfile_loc" | sed -n 's/.*:\([^ ]*\).*/\1/p');          [ -n "$volume_str" ] && {              volume_id="$volume_str"; diff --git a/xlators/mount/fuse/utils/mount_glusterfs.in b/xlators/mount/fuse/utils/mount_glusterfs.in index 50a301c26a8..ea34dabf0b6 100755 --- a/xlators/mount/fuse/utils/mount_glusterfs.in +++ b/xlators/mount/fuse/utils/mount_glusterfs.in @@ -494,7 +494,8 @@ main ()      done      [ -r "$volfile_loc" ] || { -        server_ip=$(echo "$volfile_loc" | sed -n 's/\([a-zA-Z0-9:.\-]*\):.*/\1/p'); +        # '%' included to support ipv6 link local addresses +        server_ip=$(echo "$volfile_loc" | sed -n 's/\([a-zA-Z0-9:%.\-]*\):.*/\1/p');          volume_str=$(echo "$volfile_loc" | sed -n 's/.*:\([^ ]*\).*/\1/p');          [ -n "$volume_str" ] && {              volume_id="$volume_str";  | 
