diff options
author | hari gowtham <hgowtham@redhat.com> | 2017-07-25 18:07:05 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2017-08-16 15:38:49 +0000 |
commit | def09c4fbb2805618715c5a125ddf482d7e53de3 (patch) | |
tree | 24841f29b93959b1090a6ad58f248323266e7af7 | |
parent | 468ca877807625817b72921d1e9585036687b640 (diff) |
Infra to indentify process
Problem: currently we can't identify which process is running and
how many instances of it are available.
Fix: name the process when its spawned and send it to the server
and save it in the client_t
The processes that abide by this change from this patch are:
1) fuse mount,
2) rebalance,
3) selfheal,
4) tier,
5) quota,
6) snapshot,
7) brick.
8) gfapi (by default. gfapi.<processname> if processname is found)
Note: fuse gets a process name as native-fuse-client by default.
If the user gives a name for the fuse and spawns it, it will be of
this type --process-name native-fuse-client.<name_specified>.
This can be made use by the process like aux mount done by quota,
geo-rep, etc by adding another option in the aux mount " -o
process-name=gsync_mount"
Updates: #178
Signed-off-by: hari gowtham <hgowtham@redhat.com>
Change-Id: Ie4d02257216839338043737691753bab9a974d5e
Reviewed-on: https://review.gluster.org/17957
Smoke: Gluster Build System <jenkins@build.gluster.org>
Tested-by: hari gowtham <hari.gowtham005@gmail.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-by: Aravinda VK <avishwan@redhat.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
-rw-r--r-- | api/src/glfs.c | 16 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 10 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd.h | 1 | ||||
-rw-r--r-- | libglusterfs/src/client_t.c | 1 | ||||
-rw-r--r-- | libglusterfs/src/client_t.h | 1 | ||||
-rw-r--r-- | libglusterfs/src/glusterfs.h | 2 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quotad-svc.c | 2 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rebalance.c | 1 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-shd-svc.c | 9 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapd-svc.c | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-tierd-svc.c | 1 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 1 | ||||
-rwxr-xr-x | xlators/mount/fuse/utils/mount.glusterfs.in | 9 | ||||
-rwxr-xr-x | xlators/mount/fuse/utils/mount_glusterfs.in | 9 | ||||
-rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 6 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-handshake.c | 7 |
16 files changed, 78 insertions, 2 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 8369546667b..3313fab0372 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -31,6 +31,9 @@ #include <sys/types.h> #include <unistd.h> #include <limits.h> +#ifdef GF_LINUX_HOST_OS +#include <sys/prctl.h> +#endif #include "glusterfs.h" #include "logging.h" @@ -739,6 +742,8 @@ pub_glfs_new (const char *volname) int ret = -1; glusterfs_ctx_t *ctx = NULL; xlator_t *old_THIS = NULL; + char pname[16] = ""; + char msg[32] = ""; if (!volname) { errno = EINVAL; @@ -789,6 +794,16 @@ pub_glfs_new (const char *volname) goto out; } + ret = -1; +#ifdef GF_LINUX_HOST_OS + ret = prctl (PR_GET_NAME, (unsigned long) pname, 0, 0, 0); +#endif + if (ret) + fs->ctx->cmd_args.process_name = gf_strdup ("gfapi"); + else { + snprintf (msg, sizeof(msg), "gfapi.%s", pname); + fs->ctx->cmd_args.process_name = gf_strdup (msg); + } ret = 0; out: @@ -1115,6 +1130,7 @@ glusterfs_ctx_destroy (glusterfs_ctx_t *ctx) GF_FREE (ctx->process_uuid); GF_FREE (ctx->cmd_args.volfile_id); + GF_FREE (ctx->cmd_args.process_name); LOCK_DESTROY (&ctx->lock); pthread_mutex_destroy (&ctx->notify_lock); diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 78b06bf4701..31a9bf71688 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -244,6 +244,8 @@ static struct argp_option gf_options[] = { "Override default for secure (SSL) management connections"}, {"localtime-logging", ARGP_LOCALTIME_LOGGING_KEY, 0, 0, "Enable localtime logging"}, + {"process-name", ARGP_PROCESS_NAME_KEY, "PROCESS-NAME", OPTION_HIDDEN, + "option to specify the process type" }, {0, 0, 0, 0, "Miscellaneous Options:"}, {0, } }; @@ -300,7 +302,7 @@ set_fuse_mount_options (glusterfs_ctx_t *ctx, dict_t *options) cmd_args->fuse_attribute_timeout); if (ret < 0) { - gf_msg ("glusterfsd", GF_LOG_ERROR, errno, + gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_4, ZR_ATTR_TIMEOUT_OPT); goto err; } @@ -1278,6 +1280,9 @@ no_oom_api: case ARGP_LOCALTIME_LOGGING_KEY: cmd_args->localtime_logging = 1; + + case ARGP_PROCESS_NAME_KEY: + cmd_args->process_name = gf_strdup (arg); break; case ARGP_SUBDIR_MOUNT_KEY: if (arg[0] != '/') { @@ -1928,6 +1933,9 @@ parse_cmdline (int argc, char *argv[], glusterfs_ctx_t *ctx) process_mode = gf_get_process_mode (argv[0]); ctx->process_mode = process_mode; + if (cmd_args->process_name) { + ctx->cmd_args.process_name = cmd_args->process_name; + } /* Make sure after the parsing cli, if '--volfile-server' option is given, then '--volfile-id' is mandatory */ if (cmd_args->volfile_server && !cmd_args->volfile_id) { diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index 871bcf61e58..99d9ec4e258 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -98,6 +98,7 @@ enum argp_option_keys { #endif ARGP_LOCALTIME_LOGGING_KEY = 177, ARGP_SUBDIR_MOUNT_KEY = 178, + ARGP_PROCESS_NAME_KEY = 179, }; struct _gfd_vol_top_priv { diff --git a/libglusterfs/src/client_t.c b/libglusterfs/src/client_t.c index eda1c465827..a51fb7a88c0 100644 --- a/libglusterfs/src/client_t.c +++ b/libglusterfs/src/client_t.c @@ -386,6 +386,7 @@ client_destroy (client_t *client) GF_FREE (client->scratch_ctx.ctx); GF_FREE (client->client_uid); GF_FREE (client->subdir_mount); + GF_FREE (client->client_name); GF_FREE (client); out: return; diff --git a/libglusterfs/src/client_t.h b/libglusterfs/src/client_t.h index 530c0a331ea..dff812b0602 100644 --- a/libglusterfs/src/client_t.h +++ b/libglusterfs/src/client_t.h @@ -33,6 +33,7 @@ typedef struct _client { xlator_t *this; int tbl_index; char *client_uid; + char *client_name; struct { int flavour; size_t len; diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index 8dcc4a367d0..8a55d724c6e 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -421,6 +421,8 @@ struct _cmd_args { /* For the subdir mount */ char *subdir_mount; + + char *process_name; }; typedef struct _cmd_args cmd_args_t; diff --git a/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c b/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c index e0eb38f494a..ac8694fc440 100644 --- a/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c @@ -122,6 +122,8 @@ glusterd_quotadsvc_start (glusterd_svc_t *svc, int flags) dict_t *cmdline = NULL; char key[16] = {0}; char *options[] = { + svc->name, + "--process-name", "*replicate*.entry-self-heal=off", "--xlator-option", "*replicate*.metadata-self-heal=off", diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index 4c24b99d0b8..70b391e4188 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -289,6 +289,7 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr, "*replicate*.metadata-self-heal=off", "--xlator-option", "*replicate*.entry-self-heal=off", "--xlator-option", "*dht.readdir-optimize=on", + "--process-name", "rebalance", NULL); if (volinfo->type == GF_CLUSTER_TYPE_TIER) { diff --git a/xlators/mgmt/glusterd/src/glusterd-shd-svc.c b/xlators/mgmt/glusterd/src/glusterd-shd-svc.c index e0135ea2be3..8716a0bd10b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-shd-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-shd-svc.c @@ -17,6 +17,7 @@ #include "glusterd-shd-svc.h" #include "glusterd-svc-helper.h" +#define GD_SHD_PROCESS_NAME "--process-name" char *shd_svc_name = "glustershd"; void @@ -162,6 +163,14 @@ glusterd_shdsvc_start (glusterd_svc_t *svc, int flags) /* Pass cmdline arguments as key-value pair. The key is merely * a carrier and is not used. Since dictionary follows LIFO the value * should be put in reverse order*/ + ret = dict_set_str (cmdline, "arg4", svc->name); + if (ret) + goto out; + + ret = dict_set_str (cmdline, "arg3", GD_SHD_PROCESS_NAME); + if (ret) + goto out; + ret = dict_set_str (cmdline, "arg2", glusterd_uuid_option); if (ret) goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c b/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c index 59d8fbdfa6a..ea56d8012aa 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c @@ -297,7 +297,9 @@ glusterd_snapdsvc_start (glusterd_svc_t *svc, int flags) "-p", svc->proc.pidfile, "-l", svc->proc.logfile, "--brick-name", snapd_id, - "-S", svc->conn.sockpath, NULL); + "-S", svc->conn.sockpath, + "--process-name", svc->name, + NULL); snapd_port = pmap_assign_port (THIS, volinfo->snapd.port, snapd_id); volinfo->snapd.port = snapd_port; diff --git a/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c b/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c index c75b378140c..bb2cbff6e93 100644 --- a/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c @@ -330,6 +330,7 @@ glusterd_tierdsvc_start (glusterd_svc_t *svc, int flags) "--xlator-option", "*dht.readdir-optimize=on", "--xlator-option", "*tier-dht.xattr-name=trusted.tier.tier-dht", + "--process-name", svc->name, NULL); diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index ee3498f3e86..9e98225e73e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2060,6 +2060,7 @@ retry: "--brick-name", brickinfo->path, "-l", brickinfo->logfile, "--xlator-option", glusterd_uuid, + "--process-name", "brick", NULL); if (dict_get_str (priv->opts, GLUSTERD_LOCALTIME_LOGGING_KEY, diff --git a/xlators/mount/fuse/utils/mount.glusterfs.in b/xlators/mount/fuse/utils/mount.glusterfs.in index 826991ba402..216d03c4182 100755 --- a/xlators/mount/fuse/utils/mount.glusterfs.in +++ b/xlators/mount/fuse/utils/mount.glusterfs.in @@ -257,6 +257,12 @@ start_glusterfs () cmd_line=$(echo "$cmd_line --xlator-option=$xlator_option"); fi + if [ -n "$process_name" ]; then + cmd_line=$(echo "$cmd_line --process-name fuse.$process_name"); + else + cmd_line=$(echo "$cmd_line --process-name fuse"); + fi + # if trasnport type is specified, we have to append it to # volume name, so that it fetches the right client vol file @@ -510,6 +516,9 @@ with_options() "halo-min-replicas") halo_min_replicas=$value ;; + "process-name") + process_name=$value + ;; x-*) # comments or userspace application-specific options, drop them ;; diff --git a/xlators/mount/fuse/utils/mount_glusterfs.in b/xlators/mount/fuse/utils/mount_glusterfs.in index eca84557e87..d3571dea706 100755 --- a/xlators/mount/fuse/utils/mount_glusterfs.in +++ b/xlators/mount/fuse/utils/mount_glusterfs.in @@ -234,6 +234,12 @@ start_glusterfs () cmd_line=$(echo "$cmd_line --xlator-option=$xlator_option"); fi + if [ -n "$process_name" ]; then + cmd_line=$(echo "$cmd_line --process-name fuse.$process_name"); + else + cmd_line=$(echo "$cmd_line --process-name fuse"); + fi + # for rdma volume, we have to fetch volfile with '.rdma' added # to volume name, so that it fetches the right client vol file volume_id_rdma=""; @@ -398,6 +404,9 @@ with_options() [ $value = "false" ] ; then no_root_squash=1; fi ;; + "process-name") + process_name=$value + ;; *) warn "Invalid option: $key" exit 1 diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index b6dc0797dd9..cd71c2c34a2 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -1360,6 +1360,12 @@ client_setvolume (xlator_t *this, struct rpc_clnt *rpc) goto fail; } + ret = dict_set_str (options, "process-name", this->ctx->cmd_args.process_name); + if (ret < 0) { + gf_msg (this->name, GF_LOG_INFO, 0, PC_MSG_DICT_SET_FAILED, + "failed to set process-name in handshake msg"); + } + ret = dict_set_str (options, "client-version", PACKAGE_VERSION); if (ret < 0) { gf_msg (this->name, GF_LOG_WARNING, 0, PC_MSG_DICT_SET_FAILED, diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c index fa2f61315df..6dc9a38aa71 100644 --- a/xlators/protocol/server/src/server-handshake.c +++ b/xlators/protocol/server/src/server-handshake.c @@ -475,6 +475,7 @@ server_setvolume (rpcsvc_request_t *req) glusterfs_ctx_t *ctx = NULL; struct _child_status *tmp = NULL; char *subdir_mount = NULL; + char *client_name = NULL; params = dict_new (); reply = dict_new (); @@ -609,6 +610,10 @@ server_setvolume (rpcsvc_request_t *req) if (ret < 0) { /* Not a problem at all as the key is optional */ } + ret = dict_get_str (params, "process-name", &client_name); + if (ret < 0) { + client_name = "unknown"; + } /*lk_verion :: [1..2^31-1]*/ ret = dict_get_uint32 (params, "clnt-lk-version", &lk_version); @@ -631,6 +636,8 @@ server_setvolume (rpcsvc_request_t *req) goto fail; } + client->client_name = gf_strdup(client_name); + gf_msg_debug (this->name, 0, "Connected to %s", client->client_uid); cancelled = server_cancel_grace_timer (this, client); if (cancelled)//Do gf_client_put on behalf of grace-timer-handler. |