diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/Makefile.am | 5 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-statedump.c | 245 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-statedump.h | 23 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 223 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 9 |
5 files changed, 272 insertions, 233 deletions
diff --git a/xlators/mgmt/glusterd/src/Makefile.am b/xlators/mgmt/glusterd/src/Makefile.am index 913a2a70729..950fc17e712 100644 --- a/xlators/mgmt/glusterd/src/Makefile.am +++ b/xlators/mgmt/glusterd/src/Makefile.am @@ -10,7 +10,7 @@ glusterd_la_SOURCES = glusterd.c glusterd-handler.c glusterd-sm.c \ glusterd-volume-ops.c glusterd-brick-ops.c glusterd-mountbroker.c \ glusterd-syncop.c glusterd-hooks.c glusterd-volume-set.c \ glusterd-locks.c glusterd-snapshot.c glusterd-mgmt-handler.c \ - glusterd-mgmt.c glusterd-peer-utils.c + glusterd-mgmt.c glusterd-peer-utils.c glusterd-statedump.c glusterd_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la \ $(top_builddir)/rpc/xdr/src/libgfxdr.la \ @@ -24,7 +24,8 @@ noinst_HEADERS = glusterd.h glusterd-utils.h glusterd-op-sm.h \ glusterd-sm.h glusterd-store.h glusterd-mem-types.h \ glusterd-pmap.h glusterd-volgen.h glusterd-mountbroker.h \ glusterd-syncop.h glusterd-hooks.h glusterd-locks.h \ - glusterd-mgmt.h glusterd-messages.h glusterd-peer-utils.h + glusterd-mgmt.h glusterd-messages.h glusterd-peer-utils.h \ + glusterd-statedump.h AM_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src \ -I$(rpclibdir) -I$(CONTRIBDIR)/rbtree \ diff --git a/xlators/mgmt/glusterd/src/glusterd-statedump.c b/xlators/mgmt/glusterd/src/glusterd-statedump.c new file mode 100644 index 00000000000..e28624c6955 --- /dev/null +++ b/xlators/mgmt/glusterd/src/glusterd-statedump.c @@ -0,0 +1,245 @@ +/* + Copyright (c) 2014 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include "statedump.h" +#include "glusterd.h" +#include "glusterd-locks.h" + + + +static void +glusterd_dump_peer (glusterd_peerinfo_t *peerinfo, char *input_key, int index, + gf_boolean_t xpeers) +{ + char subkey[50] = {0,}; + char key[GF_DUMP_MAX_BUF_LEN] = {0,}; + + strncpy (key, input_key, (GF_DUMP_MAX_BUF_LEN - 1)); + + snprintf (subkey, sizeof (subkey), "%s%d", key, index); + + gf_proc_dump_build_key (key, subkey, "uuid"); + gf_proc_dump_write (key, "%s", + uuid_utoa (peerinfo->uuid)); + + gf_proc_dump_build_key (key, subkey, "hostname"); + gf_proc_dump_write (key, "%d", peerinfo->hostname); + + gf_proc_dump_build_key (key, subkey, "port"); + gf_proc_dump_write (key, "%d", peerinfo->port); + + gf_proc_dump_build_key (key, subkey, "state"); + gf_proc_dump_write (key, "%d", peerinfo->state.state); + + gf_proc_dump_build_key (key, subkey, "quorum-action"); + gf_proc_dump_write (key, "%d", peerinfo->quorum_action); + + gf_proc_dump_build_key (key, subkey, "quorum-contrib"); + gf_proc_dump_write (key, "%d", + peerinfo->quorum_contrib); + + gf_proc_dump_build_key (key, subkey, "detaching"); + gf_proc_dump_write (key, "%d", peerinfo->detaching); + + gf_proc_dump_build_key (key, subkey, "locked"); + gf_proc_dump_write (key, "%d", peerinfo->locked); + +} + + +static void +glusterd_dump_peer_rpcstat (glusterd_peerinfo_t *peerinfo, char *input_key, + int index) +{ + rpc_clnt_connection_t *conn = NULL; + int ret = -1; + rpc_clnt_t *rpc = NULL; + char rpcsvc_peername[RPCSVC_PEER_STRLEN] = {0,}; + char subkey[50] = {0,}; + char key[GF_DUMP_MAX_BUF_LEN] = {0,}; + + strncpy (key, input_key, (GF_DUMP_MAX_BUF_LEN - 1)); + + /* Dump the rpc connection statistics */ + rpc = peerinfo->rpc; + if (rpc) { + conn = &rpc->conn; + snprintf (subkey, sizeof (subkey), "%s%d", key, index); + ret = rpcsvc_transport_peername (conn->trans, + (char *)&rpcsvc_peername, + sizeof (rpcsvc_peername)); + if (!ret) { + gf_proc_dump_build_key (key, subkey, "rpc.peername"); + gf_proc_dump_write (key, "%s", rpcsvc_peername); + } + gf_proc_dump_build_key (key, subkey, "rpc.connected"); + gf_proc_dump_write (key, "%d", conn->connected); + + gf_proc_dump_build_key (key, subkey, "rpc.total-bytes-read"); + gf_proc_dump_write (key, "%"PRIu64, + conn->trans->total_bytes_read); + + gf_proc_dump_build_key (key, subkey, "rpc.total-bytes-written"); + gf_proc_dump_write (key, "%"PRIu64, + conn->trans->total_bytes_write); + + gf_proc_dump_build_key (key, subkey, "rpc.ping_msgs_sent"); + gf_proc_dump_write (key, "%"PRIu64, conn->pingcnt); + + gf_proc_dump_build_key (key, subkey, "rpc.msgs_sent"); + gf_proc_dump_write (key, "%"PRIu64, conn->msgcnt); + } + +} + + +static void +glusterd_dump_client_details (glusterd_conf_t *conf) +{ + rpc_transport_t *xprt = NULL; + char key[GF_DUMP_MAX_BUF_LEN] = {0,}; + char subkey[50] = {0,}; + int index = 1; + + pthread_mutex_lock (&conf->xprt_lock); + { + list_for_each_entry (xprt, &conf->xprt_list, list) { + snprintf (subkey, sizeof (subkey), "glusterd.client%d", + index); + + gf_proc_dump_build_key (key, subkey, "identifier"); + gf_proc_dump_write (key, "%s", + xprt->peerinfo.identifier); + + gf_proc_dump_build_key (key, subkey, "volname"); + gf_proc_dump_write (key, "%s", + xprt->peerinfo.volname); + + gf_proc_dump_build_key (key, subkey, "max-op-version"); + gf_proc_dump_write (key, "%u", + xprt->peerinfo.max_op_version); + + gf_proc_dump_build_key (key, subkey, "min-op-version"); + gf_proc_dump_write (key, "%u", + xprt->peerinfo.min_op_version); + index++; + } + } + pthread_mutex_unlock (&conf->xprt_lock); +} + + +/* The following function is just for dumping mgmt_v3_lock dictionary, any other + * dict passed to this API will not work */ + +static void +glusterd_dict_mgmt_v3_lock_statedump (dict_t *dict) +{ + int ret = 0; + int dumplen = 0; + data_pair_t *trav = NULL; + char key[GF_DUMP_MAX_BUF_LEN] = {0,}; + char dump[64*1024] = {0,}; + + if (!dict) { + gf_log_callingfn ("glusterd", GF_LOG_WARNING, "dict NULL"); + goto out; + } + for (trav = dict->members_list; trav; trav = trav->next) { + if (strstr (trav->key, "debug.last-success-bt") != NULL) { + ret = snprintf (&dump[dumplen], sizeof(dump) - dumplen, + "\n\t%s:%s", trav->key, + trav->value->data); + } else { + ret = snprintf (&dump[dumplen], sizeof(dump) - dumplen, + "\n\t%s:%s", trav->key, + uuid_utoa (((glusterd_mgmt_v3_lock_obj *) + (trav->value->data))->lock_owner)); + } + if ((ret == -1) || !ret) + return; + dumplen += ret; + } + + if (dumplen) { + gf_proc_dump_build_key (key, "glusterd", "mgmt_v3_lock"); + gf_proc_dump_write (key, "%s", dump); + } + +out: + return; +} + + +int +glusterd_dump_priv (xlator_t *this) +{ + int index = 1; + glusterd_conf_t *priv = NULL; + char key[GF_DUMP_MAX_BUF_LEN] = {0,}; + char subkey[50] = {0,}; + glusterd_peerinfo_t *peerinfo = NULL; + glusterd_volinfo_t *volinfo = NULL; + + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + + priv = this->private; + if (!priv) + return 0; + + gf_proc_dump_build_key (key, "xlator.glusterd", "priv"); + gf_proc_dump_add_section (key); + + pthread_mutex_lock (&priv->mutex); + { + gf_proc_dump_build_key (key, "glusterd", "my-uuid"); + gf_proc_dump_write (key, "%s", uuid_utoa (priv->uuid)); + + gf_proc_dump_build_key (key, "glusterd", "working-directory"); + gf_proc_dump_write (key, "%s", priv->workdir); + + gf_proc_dump_build_key (key, "glusterd", "max-op-version"); + gf_proc_dump_write (key, "%d", GD_OP_VERSION_MAX); + + gf_proc_dump_build_key (key, "glusterd", "min-op-version"); + gf_proc_dump_write (key, "%d", GD_OP_VERSION_MIN); + + gf_proc_dump_build_key (key, "glusterd", "current-op-version"); + gf_proc_dump_write (key, "%d", priv->op_version); + + gf_proc_dump_build_key (key, "glusterd", "ping-timeout"); + gf_proc_dump_write (key, "%d", priv->ping_timeout); + + gf_proc_dump_build_key (key, "glusterd", "shd.online"); + gf_proc_dump_write (key, "%d", priv->shd->online); + + gf_proc_dump_build_key (key, "glusterd", "nfs.online"); + gf_proc_dump_write (key, "%d", priv->nfs->online); + + gf_proc_dump_build_key (key, "glusterd", "quotad.online"); + gf_proc_dump_write (key, "%d", priv->quotad->online); + + GLUSTERD_DUMP_PEERS (&priv->peers, uuid_list, _gf_false); + GLUSTERD_DUMP_PEERS (&priv->xaction_peers, op_peers_list, + _gf_true); + glusterd_dump_client_details (priv); + glusterd_dict_mgmt_v3_lock_statedump(priv->mgmt_v3_lock); + dict_dump_to_statedump (priv->opts, "options", "glusterd"); + } + pthread_mutex_unlock (&priv->mutex); + +out: + return 0; +} diff --git a/xlators/mgmt/glusterd/src/glusterd-statedump.h b/xlators/mgmt/glusterd/src/glusterd-statedump.h new file mode 100644 index 00000000000..9917560b542 --- /dev/null +++ b/xlators/mgmt/glusterd/src/glusterd-statedump.h @@ -0,0 +1,23 @@ +/* + Copyright (c) 2014 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ + +#ifndef _GLUSTERD_STATEDUMP_H_ +#define _GLUSTERD_STATEDUMP_H_ + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include "xlator.h" + +int +glusterd_dump_priv (xlator_t *this); +#endif diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 4f99a736dcf..98ac403a4c1 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -31,7 +31,7 @@ #include "compat.h" #include "compat-errno.h" #include "syscall.h" -#include "statedump.h" +#include "glusterd-statedump.h" #include "glusterd-sm.h" #include "glusterd-op-sm.h" #include "glusterd-store.h" @@ -277,227 +277,6 @@ glusterd_fetchsnap_notify (xlator_t *this) return ret; } -void -glusterd_dump_peer (glusterd_peerinfo_t *peerinfo, char *input_key, int index, - gf_boolean_t xpeers) -{ - char subkey[50] = {0,}; - char key[GF_DUMP_MAX_BUF_LEN] = {0,}; - - strncpy (key, input_key, (GF_DUMP_MAX_BUF_LEN - 1)); - - snprintf (subkey, sizeof (subkey), "%s%d", key, index); - - gf_proc_dump_build_key (key, subkey, "uuid"); - gf_proc_dump_write (key, "%s", - uuid_utoa (peerinfo->uuid)); - - gf_proc_dump_build_key (key, subkey, "hostname"); - gf_proc_dump_write (key, "%d", peerinfo->hostname); - - gf_proc_dump_build_key (key, subkey, "port"); - gf_proc_dump_write (key, "%d", peerinfo->port); - - gf_proc_dump_build_key (key, subkey, "state"); - gf_proc_dump_write (key, "%d", peerinfo->state.state); - - gf_proc_dump_build_key (key, subkey, "quorum-action"); - gf_proc_dump_write (key, "%d", peerinfo->quorum_action); - - gf_proc_dump_build_key (key, subkey, "quorum-contrib"); - gf_proc_dump_write (key, "%d", - peerinfo->quorum_contrib); - - gf_proc_dump_build_key (key, subkey, "detaching"); - gf_proc_dump_write (key, "%d", peerinfo->detaching); - - gf_proc_dump_build_key (key, subkey, "locked"); - gf_proc_dump_write (key, "%d", peerinfo->locked); - -} - -void -glusterd_dump_peer_rpcstat (glusterd_peerinfo_t *peerinfo, char *input_key, - int index) -{ - rpc_clnt_connection_t *conn = NULL; - int ret = -1; - rpc_clnt_t *rpc = NULL; - char rpcsvc_peername[RPCSVC_PEER_STRLEN] = {0,}; - char subkey[50] = {0,}; - char key[GF_DUMP_MAX_BUF_LEN] = {0,}; - - strncpy (key, input_key, (GF_DUMP_MAX_BUF_LEN - 1)); - - /* Dump the rpc connection statistics */ - rpc = peerinfo->rpc; - if (rpc) { - conn = &rpc->conn; - snprintf (subkey, sizeof (subkey), "%s%d", key, index); - ret = rpcsvc_transport_peername (conn->trans, - (char *)&rpcsvc_peername, - sizeof (rpcsvc_peername)); - if (!ret) { - gf_proc_dump_build_key (key, subkey, "rpc.peername"); - gf_proc_dump_write (key, "%s", rpcsvc_peername); - } - gf_proc_dump_build_key (key, subkey, "rpc.connected"); - gf_proc_dump_write (key, "%d", conn->connected); - - gf_proc_dump_build_key (key, subkey, "rpc.total-bytes-read"); - gf_proc_dump_write (key, "%"PRIu64, - conn->trans->total_bytes_read); - - gf_proc_dump_build_key (key, subkey, "rpc.total-bytes-written"); - gf_proc_dump_write (key, "%"PRIu64, - conn->trans->total_bytes_write); - - gf_proc_dump_build_key (key, subkey, "rpc.ping_msgs_sent"); - gf_proc_dump_write (key, "%"PRIu64, conn->pingcnt); - - gf_proc_dump_build_key (key, subkey, "rpc.msgs_sent"); - gf_proc_dump_write (key, "%"PRIu64, conn->msgcnt); - } - -} - -static void -glusterd_dump_client_details (glusterd_conf_t *conf) -{ - rpc_transport_t *xprt = NULL; - char key[GF_DUMP_MAX_BUF_LEN] = {0,}; - char subkey[50] = {0,}; - int index = 1; - - pthread_mutex_lock (&conf->xprt_lock); - { - list_for_each_entry (xprt, &conf->xprt_list, list) { - snprintf (subkey, sizeof (subkey), "glusterd.client%d", - index); - - gf_proc_dump_build_key (key, subkey, "identifier"); - gf_proc_dump_write (key, "%s", - xprt->peerinfo.identifier); - - gf_proc_dump_build_key (key, subkey, "volname"); - gf_proc_dump_write (key, "%s", - xprt->peerinfo.volname); - - gf_proc_dump_build_key (key, subkey, "max-op-version"); - gf_proc_dump_write (key, "%u", - xprt->peerinfo.max_op_version); - - gf_proc_dump_build_key (key, subkey, "min-op-version"); - gf_proc_dump_write (key, "%u", - xprt->peerinfo.min_op_version); - index++; - } - } - pthread_mutex_unlock (&conf->xprt_lock); -} - - -/* The following function is just for dumping mgmt_v3_lock dictionary, any other - * dict passed to this API will not work */ - -static void -glusterd_dict_mgmt_v3_lock_statedump (dict_t *dict) -{ - int ret = 0; - int dumplen = 0; - data_pair_t *trav = NULL; - char key[GF_DUMP_MAX_BUF_LEN] = {0,}; - char dump[64*1024] = {0,}; - - if (!dict) { - gf_log_callingfn ("glusterd", GF_LOG_WARNING, "dict NULL"); - goto out; - } - for (trav = dict->members_list; trav; trav = trav->next) { - if (strstr (trav->key, "debug.last-success-bt") != NULL) { - ret = snprintf (&dump[dumplen], sizeof(dump) - dumplen, - "\n\t%s:%s", trav->key, - trav->value->data); - } else { - ret = snprintf (&dump[dumplen], sizeof(dump) - dumplen, - "\n\t%s:%s", trav->key, - uuid_utoa (((glusterd_mgmt_v3_lock_obj *) - (trav->value->data))->lock_owner)); - } - if ((ret == -1) || !ret) - return; - dumplen += ret; - } - - if (dumplen) { - gf_proc_dump_build_key (key, "glusterd", "mgmt_v3_lock"); - gf_proc_dump_write (key, "%s", dump); - } - -out: - return; -} - -int -glusterd_dump_priv (xlator_t *this) -{ - int index = 1; - glusterd_conf_t *priv = NULL; - char key[GF_DUMP_MAX_BUF_LEN] = {0,}; - char subkey[50] = {0,}; - glusterd_peerinfo_t *peerinfo = NULL; - glusterd_volinfo_t *volinfo = NULL; - - GF_VALIDATE_OR_GOTO ("glusterd", this, out); - - priv = this->private; - if (!priv) - return 0; - - gf_proc_dump_build_key (key, "xlator.glusterd", "priv"); - gf_proc_dump_add_section (key); - - pthread_mutex_lock (&priv->mutex); - { - gf_proc_dump_build_key (key, "glusterd", "my-uuid"); - gf_proc_dump_write (key, "%s", uuid_utoa (priv->uuid)); - - gf_proc_dump_build_key (key, "glusterd", "working-directory"); - gf_proc_dump_write (key, "%s", priv->workdir); - - gf_proc_dump_build_key (key, "glusterd", "max-op-version"); - gf_proc_dump_write (key, "%d", GD_OP_VERSION_MAX); - - gf_proc_dump_build_key (key, "glusterd", "min-op-version"); - gf_proc_dump_write (key, "%d", GD_OP_VERSION_MIN); - - gf_proc_dump_build_key (key, "glusterd", "current-op-version"); - gf_proc_dump_write (key, "%d", priv->op_version); - - gf_proc_dump_build_key (key, "glusterd", "ping-timeout"); - gf_proc_dump_write (key, "%d", priv->ping_timeout); - - gf_proc_dump_build_key (key, "glusterd", "shd.online"); - gf_proc_dump_write (key, "%d", priv->shd->online); - - gf_proc_dump_build_key (key, "glusterd", "nfs.online"); - gf_proc_dump_write (key, "%d", priv->nfs->online); - - gf_proc_dump_build_key (key, "glusterd", "quotad.online"); - gf_proc_dump_write (key, "%d", priv->quotad->online); - - GLUSTERD_DUMP_PEERS (&priv->peers, uuid_list, _gf_false); - GLUSTERD_DUMP_PEERS (&priv->xaction_peers, op_peers_list, - _gf_true); - glusterd_dump_client_details (priv); - glusterd_dict_mgmt_v3_lock_statedump(priv->mgmt_v3_lock); - dict_dump_to_statedump (priv->opts, "options", "glusterd"); - } - pthread_mutex_unlock (&priv->mutex); - -out: - return 0; -} int32_t mem_acct_init (xlator_t *this) diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 208e5fc918c..23a41d925ce 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -1076,13 +1076,4 @@ glusterd_add_brick_status_to_dict (dict_t *dict, glusterd_volinfo_t *volinfo, int32_t glusterd_handle_snap_limit (dict_t *dict, dict_t *rsp_dict); - -void -glusterd_dump_peer (glusterd_peerinfo_t *peerinfo, char *key, int index, - gf_boolean_t xpeers); - -void -glusterd_dump_peer_rpcstat (glusterd_peerinfo_t *peerinfo, char *key, - int index); - #endif |