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 /libglusterfs/src/iobuf.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 'libglusterfs/src/iobuf.c')
| -rw-r--r-- | libglusterfs/src/iobuf.c | 104 | 
1 files changed, 104 insertions, 0 deletions
diff --git a/libglusterfs/src/iobuf.c b/libglusterfs/src/iobuf.c index 6d6fca13388..e9408f86bac 100644 --- a/libglusterfs/src/iobuf.c +++ b/libglusterfs/src/iobuf.c @@ -19,6 +19,7 @@  #include "iobuf.h" +#include "statedump.h"  #include <stdio.h> @@ -636,3 +637,106 @@ iobref_size (struct iobref *iobref)  out:          return size;  } + +void  +iobuf_info_dump (struct iobuf *iobuf, const char *key_prefix) +{ +        char   key[GF_DUMP_MAX_BUF_LEN]; +        struct iobuf my_iobuf; +        int    ret = 0; + +        if (!iobuf)  +                return; + +        memset(&my_iobuf, 0, sizeof(my_iobuf)); +         +        ret = TRY_LOCK(&iobuf->lock); +        if (ret) { +                gf_log("", GF_LOG_WARNING, "Unable to dump iobuf" +                " errno: %d", errno); +                return; +        } +        memcpy(&my_iobuf, iobuf, sizeof(my_iobuf)); +        UNLOCK(&iobuf->lock); + +	gf_proc_dump_build_key(key, key_prefix,"ref"); +        gf_proc_dump_write(key, "%d", my_iobuf.ref); +	gf_proc_dump_build_key(key, key_prefix,"ptr"); +        gf_proc_dump_write(key, "%p", my_iobuf.ptr); + +} + +void  +iobuf_arena_info_dump (struct iobuf_arena *iobuf_arena, const char *key_prefix) +{ +	char key[GF_DUMP_MAX_BUF_LEN]; +	int  i = 1; +        struct iobuf *trav; + +	if (!iobuf_arena) +                return; + +        gf_proc_dump_build_key(key, key_prefix,"mem_base"); +        gf_proc_dump_write(key, "%p", iobuf_arena->mem_base); +	gf_proc_dump_build_key(key, key_prefix, "active_cnt"); +        gf_proc_dump_write(key, "%d", iobuf_arena->active_cnt); +	gf_proc_dump_build_key(key, key_prefix, "passive_cnt"); +        gf_proc_dump_write(key, "%d", iobuf_arena->passive_cnt); +	list_for_each_entry (trav, &iobuf_arena->active.list, list) { +                gf_proc_dump_build_key(key, key_prefix,"active_iobuf.%d", i++); +                gf_proc_dump_add_section(key); +                iobuf_info_dump(trav, key); +        } + +        i = 1; +        list_for_each_entry (trav, &iobuf_arena->passive.list, list) { +                gf_proc_dump_build_key(key, key_prefix, +                                        "passive_iobuf.%d",i++); +                gf_proc_dump_add_section(key); +                iobuf_info_dump(trav, key); +        } + +} + +void +iobuf_stats_dump (struct iobuf_pool *iobuf_pool) +{ +     +        char               msg[1024]; +        struct iobuf_arena *trav; +        int                i = 1; +        int                ret = -1; + +        if (!iobuf_pool) +                return; + +        memset(msg, 0, sizeof(msg)); + +        ret = pthread_mutex_trylock(&iobuf_pool->mutex); + +        if (ret) { +                gf_log("", GF_LOG_WARNING, "Unable to dump iobuf pool" +                " errno: %d", errno); +                return; +        } +        gf_proc_dump_add_section("iobuf.global"); +        gf_proc_dump_write("iobuf.global.iobuf_pool","%p", iobuf_pool); +        gf_proc_dump_write("iobuf.global.iobuf_pool.page_size", "%d", +						 iobuf_pool->page_size); +        gf_proc_dump_write("iobuf.global.iobuf_pool.arena_size", "%d", +						 iobuf_pool->arena_size); +        gf_proc_dump_write("iobuf.global.iobuf_pool.arena_cnt", "%d", +						 iobuf_pool->arena_cnt); + +        list_for_each_entry (trav, &iobuf_pool->arenas.list, list) { +                snprintf(msg, sizeof(msg), "iobuf.global.iobuf_pool.arena.%d", +                                                                            i); +		gf_proc_dump_add_section(msg); +                iobuf_arena_info_dump(trav,msg); +                i++; +        } +         +        pthread_mutex_unlock(&iobuf_pool->mutex); + +        return; +}  | 
