diff options
| author | Kaushal M <kaushal@redhat.com> | 2013-07-03 16:31:22 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2013-10-17 11:26:45 -0700 | 
| commit | fc637b14cfad4d08e72bee7064194c8007a388d0 (patch) | |
| tree | bd74a24f8138f1b68ca6dfd18084e4d6fa7f079f /cli | |
| parent | 390221fcc4cc974074750be223e551bd9f4405d9 (diff) | |
cli,glusterd: Changes to cli-glusterd communication
Glusterd changes:
With this patch, glusterd creates a socket file in
DATADIR/run/glusterd.socket , and listen on it for cli requests. It
listens for 2 rpc programs on the socket file,
- The glusterd cli rpc program, for all cli commands
- A reduced glusterd handshake program, just for the 'system:: getspec'
  command
The location of the socket file can be changed with the glusterd option
'glusterd-sockfile'.
To retain compatibility with the '--remote-host' cli option, glusterd
also listens for the cli requests on port 24007. But, for the sake of
security, it listens using a reduced cli rpc program on the port. The
reduced rpc program only contains read-only procs used for 'volume
(info|list|status)', 'peer status' and 'system:: getwd' cli commands.
CLI changes:
The gluster cli now uses the glusterd socket file for communicating with
glusterd by default. A new option '--gluster-sock' has been added to
allow specifying the sockfile used to connect. Using the '--remote-host'
option will make cli connect to the given host & port.
Tests changes:
cluster.rc has been modified to make use of socket files and use
different log files for each glusterd.
Some of the tests using cluster.rc have been fixed.
Change-Id: Iaf24bc22f42f8014a5fa300ce37c7fc9b1b92b53
BUG: 980754
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.org/5280
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/src/cli.c | 56 | ||||
| -rw-r--r-- | cli/src/cli.h | 2 | 
2 files changed, 44 insertions, 14 deletions
diff --git a/cli/src/cli.c b/cli/src/cli.c index f87038b61..91b315ff1 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -353,6 +353,12 @@ cli_opt_parse (char *opt, struct cli_state *state)                  return 0;          } +        oarg = strtail (opt, "glusterd-sock="); +        if (oarg) { +                state->glusterd_sock = oarg; +                return 0; +        } +          return -1;  } @@ -414,7 +420,6 @@ cli_state_init (struct cli_state *state)          int                   ret = 0; -        state->remote_host = "localhost";          state->log_level = -1;          tree = &state->tree; @@ -501,23 +506,46 @@ cli_rpc_init (struct cli_state *state)          if (!options)                  goto out; -        ret = dict_set_str (options, "remote-host", state->remote_host); -        if (ret) -                goto out; +        /* Connect using to glusterd using the specified method, giving +         * preference to unix socket connection. If nothing is specified connect +         * to the default glusterd socket +         */ +        if (state->glusterd_sock) { +                gf_log ("cli", GF_LOG_INFO, "Connecting to glusterd using " +                        "sockfile %s", state->glusterd_sock); +                ret = rpc_transport_unix_options_build (&options, +                                                        state->glusterd_sock, +                                                        0); +                if (ret) +                        goto out; +        } else if (state->remote_host) { +                gf_log ("cli", GF_LOG_INFO, "Connecting to remote glusterd at " +                        "%s", state->remote_host); +                ret = dict_set_str (options, "remote-host", state->remote_host); +                if (ret) +                        goto out; -        if (state->remote_port) -                port = state->remote_port; +                if (state->remote_port) +                        port = state->remote_port; -        ret = dict_set_int32 (options, "remote-port", port); -        if (ret) -                goto out; +                ret = dict_set_int32 (options, "remote-port", port); +                if (ret) +                        goto out; -        ret = dict_set_str (options, "transport.address-family", "inet"); -        if (ret) -                goto out; +                ret = dict_set_str (options, "transport.address-family", +                                    "inet"); +                if (ret) +                        goto out; +        } else { +                gf_log ("cli", GF_LOG_DEBUG, "Connecting to glusterd using " +                        "default socket"); +                ret = rpc_transport_unix_options_build +                        (&options, DEFAULT_GLUSTERD_SOCKFILE, 0); +                if (ret) +                        goto out; +        }          rpc = rpc_clnt_new (options, this->ctx, this->name, 16); -          if (!rpc)                  goto out; @@ -527,7 +555,7 @@ cli_rpc_init (struct cli_state *state)                  goto out;          } -        rpc_clnt_start (rpc); +        ret = rpc_clnt_start (rpc);  out:          if (ret) {                  if (rpc) diff --git a/cli/src/cli.h b/cli/src/cli.h index a36c1606f..d7b64cfbf 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -128,6 +128,8 @@ struct cli_state {          char                 *log_file;          gf_loglevel_t         log_level; + +        char                 *glusterd_sock;  };  struct cli_local {  | 
