diff options
| author | Anand Avati <avati@gluster.com> | 2011-06-18 03:53:46 +0000 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2011-06-19 02:16:10 -0700 | 
| commit | 4c81f6268d254f452b861bcd63608982c3ddb560 (patch) | |
| tree | b9bfef7c88905197783d1d45157dfed3295b030b /libglusterfs/src | |
| parent | 50001216d26a16736691ab06758049c22e664936 (diff) | |
stack: make process state dump more debug friendly
store points of stack wind and unwind (function names) for each
frame and dump them in process state dump
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 1059 (enhancements for getting statistics from performance translators)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1059
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/stack.c | 16 | ||||
| -rw-r--r-- | libglusterfs/src/stack.h | 14 | 
2 files changed, 30 insertions, 0 deletions
diff --git a/libglusterfs/src/stack.c b/libglusterfs/src/stack.c index ebaf814ad05..1fccd8813c5 100644 --- a/libglusterfs/src/stack.c +++ b/libglusterfs/src/stack.c @@ -76,6 +76,22 @@ gf_proc_dump_call_frame (call_frame_t *call_frame, const char *key_buf,...)                  gf_proc_dump_build_key(key, prefix,"parent");                  gf_proc_dump_write(key, "%s", my_frame.parent->this->name);          } +        if (my_frame.wind_from) { +                gf_proc_dump_build_key(key, prefix, "wind_from"); +                gf_proc_dump_write(key, "%s", my_frame.wind_from); +        } +        if (my_frame.wind_to) { +                gf_proc_dump_build_key(key, prefix, "wind_to"); +                gf_proc_dump_write(key, "%s", my_frame.wind_to); +        } +        if (my_frame.unwind_from) { +                gf_proc_dump_build_key(key, prefix, "unwind_from"); +                gf_proc_dump_write(key, "%s", my_frame.unwind_from); +        } +        if (my_frame.unwind_to) { +                gf_proc_dump_build_key(key, prefix, "unwind_to"); +                gf_proc_dump_write(key, "%s", my_frame.unwind_to); +        }  } diff --git a/libglusterfs/src/stack.h b/libglusterfs/src/stack.h index 63b14ca467a..323c64c6675 100644 --- a/libglusterfs/src/stack.h +++ b/libglusterfs/src/stack.h @@ -83,6 +83,10 @@ struct _call_frame_t {          glusterfs_fop_t op;          struct timeval begin;      /* when this frame was created */          struct timeval end;        /* when this frame completed */ +        const char      *wind_from; +        const char      *wind_to; +        const char      *unwind_from; +        const char      *unwind_to;  };  struct _call_stack_t { @@ -223,6 +227,9 @@ STACK_DESTROY (call_stack_t *stack)                  _new->parent = frame;                                   \                  _new->cookie = _new;                                    \                  LOCK_INIT (&_new->lock);                                \ +                _new->wind_from = __FUNCTION__;                         \ +                _new->wind_to = #fn;                                    \ +                _new->unwind_to = #rfn;                                 \                  frame->ref_count++;                                     \                  old_THIS = THIS;                                        \                  THIS = obj;                                             \ @@ -254,6 +261,9 @@ STACK_DESTROY (call_stack_t *stack)                  _new->parent = frame;                                   \                  _new->cookie = cky;                                     \                  LOCK_INIT (&_new->lock);                                \ +                _new->wind_from = __FUNCTION__;                         \ +                _new->wind_to = #fn;                                    \ +                _new->unwind_to = #rfn;                                 \                  frame->ref_count++;                                     \                  fn##_cbk = rfn;                                         \                  old_THIS = THIS;                                        \ @@ -279,6 +289,7 @@ STACK_DESTROY (call_stack_t *stack)                  old_THIS = THIS;                                        \                  THIS = _parent->this;                                   \                  frame->complete = _gf_true;                             \ +                frame->unwind_from = __FUNCTION__;                      \                  fn (_parent, frame->cookie, _parent->this, params);     \                  THIS = old_THIS;                                        \          } while (0) @@ -301,6 +312,7 @@ STACK_DESTROY (call_stack_t *stack)                  old_THIS = THIS;                                        \                  THIS = _parent->this;                                   \                  frame->complete = _gf_true;                             \ +                frame->unwind_from = __FUNCTION__;                      \                  fn (_parent, frame->cookie, _parent->this, params);     \                  THIS = old_THIS;                                        \          } while (0) @@ -327,6 +339,8 @@ copy_frame (call_frame_t *frame)          newstack->gid = oldstack->gid;          newstack->pid = oldstack->pid;          newstack->ngrps = oldstack->ngrps; +        newstack->op  = oldstack->op; +        newstack->type = oldstack->type;          memcpy (newstack->groups, oldstack->groups,                  sizeof (uint32_t) * GF_REQUEST_MAXGROUPS);          newstack->unique = oldstack->unique;  | 
