diff options
| author | Vijay Bellur <vijay@gluster.com> | 2009-08-15 12:58:08 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2009-08-19 17:57:53 -0700 | 
| commit | b4d6c3d1bb461d2c8a396c9ed3881a4da40fc6ab (patch) | |
| tree | 7a5a15665d46a91b9d4d744b0da599c4628d7f6c /xlators/protocol/server/src/server-protocol.c | |
| parent | a31b0016347b3bc9b341fa0f4541ed137224f593 (diff) | |
TAKE2[PATCH BUG:213 1/1] Support for Process State Dump
Support for process state dump.
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 213 (Support for process state dump)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=213
Diffstat (limited to 'xlators/protocol/server/src/server-protocol.c')
| -rw-r--r-- | xlators/protocol/server/src/server-protocol.c | 81 | 
1 files changed, 81 insertions, 0 deletions
diff --git a/xlators/protocol/server/src/server-protocol.c b/xlators/protocol/server/src/server-protocol.c index 220f5b3b4..47a6f0277 100644 --- a/xlators/protocol/server/src/server-protocol.c +++ b/xlators/protocol/server/src/server-protocol.c @@ -40,6 +40,7 @@  #include "dict.h"  #include "compat.h"  #include "compat-errno.h" +#include "statedump.h"  static void @@ -7512,7 +7513,80 @@ server_nop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  	return 0;  } +/* + * server_fd - fdtable dump function for server protocol + * @this: + * + */ +int +server_fd (xlator_t *this) +{ +         server_conf_t        *conf = NULL; + 	 server_connection_t  *trav = NULL; +         char                 key[GF_DUMP_MAX_BUF_LEN]; +         int                  i = 1; +         int                  ret = -1; + 	 +         if (!this) +                 return -1; + 	 +         conf = this->private; +         if (!conf) { + 		gf_log (this->name, GF_LOG_WARNING, + 			"conf null in xlator"); +                return -1; +         } +  +         gf_proc_dump_add_section("xlator.protocol.server.conn"); +          +         ret = pthread_mutex_trylock (&conf->mutex); +         if (ret) {  +                gf_log("", GF_LOG_WARNING, "Unable to dump fdtable" +                " errno: %d", errno); +                return -1; +        } + 	 +         list_for_each_entry (trav, &conf->conns, list) { +                 if (trav->id) { +                         gf_proc_dump_build_key(key,  +                                          "xlator.protocol.server.conn",  +                                          "%d.id", i); +                         gf_proc_dump_write(key, "%s", trav->id); +                 } +                          +                 gf_proc_dump_build_key(key,"xlator.protocol.server.conn", +                                        "%d.ref",i)  +                 gf_proc_dump_write(key, "%d", trav->ref); +                 if (trav->bound_xl) { +                         gf_proc_dump_build_key(key,  +                                          "xlator.protocol.server.conn",  +                                          "%d.bound_xl", i); +                         gf_proc_dump_write(key, "%s", trav->bound_xl->name); +                 } +                          +                 gf_proc_dump_build_key(key,  +                                        "xlator.protocol.server.conn",  +                                         "%d.id", i); +                 fdtable_dump(trav->fdtable,key); +                 i++; +         } + 	pthread_mutex_unlock (&conf->mutex); +  +  + 	return 0; + } + +int +server_priv (xlator_t *this)  +{ +        return 0; +} +int +server_inode (xlator_t *this) +{ +        return 0; +}  static void  get_auth_types (dict_t *this, char *key, data_t *value, void *data)  { @@ -7841,6 +7915,13 @@ struct xlator_fops fops = {  struct xlator_cbks cbks = {  }; +struct xlator_dumpops dumpops = { +        .inode = server_inode, +        .priv  = server_priv, +        .fd    = server_fd, +}; + +  struct volume_options options[] = {   	{ .key   = {"transport-type"},   	  .value = {"tcp", "socket", "ib-verbs", "unix", "ib-sdp",   | 
