diff options
| author | Harshavardhana <harsha@harshavardhana.net> | 2014-05-03 13:25:41 -0700 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2014-05-05 17:29:59 -0700 | 
| commit | a05c579f1c3695c4ddead0a5cfc2c92422bd4f8f (patch) | |
| tree | 769ad843f263d354bcf6ed544093ac562cc8b2f4 /xlators/meta/src/frames-file.c | |
| parent | f01626d5bad8eb0298897e90a124301008cdd0da (diff) | |
meta: print in json for stack/frames, cmdline and version
- Follow formatting rules based on RFC4627 -
  http://www.ietf.org/rfc/rfc4627.txt
- Add checks for json in regression test meta.t
Change-Id: I480d32ce042b202d3ed8939623c629a03b458551
BUG: 1089216
Signed-off-by: Harshavardhana <harsha@harshavardhana.net>
Reviewed-on: http://review.gluster.org/7653
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/meta/src/frames-file.c')
| -rw-r--r-- | xlators/meta/src/frames-file.c | 142 | 
1 files changed, 84 insertions, 58 deletions
diff --git a/xlators/meta/src/frames-file.c b/xlators/meta/src/frames-file.c index 0c3b9a2eb71..0e9777c9da2 100644 --- a/xlators/meta/src/frames-file.c +++ b/xlators/meta/src/frames-file.c @@ -22,75 +22,101 @@  #include "globals.h"  #include "lkowner.h" -  static int  frames_file_fill (xlator_t *this, inode_t *file, strfd_t *strfd)  { -	struct call_pool *pool = NULL; -	call_stack_t *stack = NULL; -	call_frame_t *frame = NULL; -	int i = 0; -	int j = 0; - -	pool = this->ctx->pool; - -	LOCK (&pool->lock); -	{ -		strprintf (strfd, "Call_Count: %d\n", (int)pool->cnt); - -		list_for_each_entry (stack, &pool->all_frames, all_frames) { -			strprintf (strfd, "== Stack %d ==\n", i++); -			strprintf (strfd, "Unique: %"PRId64"\n", stack->unique); -			strprintf (strfd, "Type: %s\n", gf_fop_list[stack->op]); -			strprintf (strfd, "UID: %d\n", stack->uid); -			strprintf (strfd, "GID: %d\n", stack->gid); -			strprintf (strfd, "LK_owner: %s\n", -				   lkowner_utoa (&stack->lk_owner)); - -			j = 0; -			for (frame = &stack->frames; frame; frame = frame->next) { -				strprintf (strfd, "\t-- Frame %d --\n", j++); -				strprintf (strfd, "\tXlator: %s\n", frame->this->name); -				if (frame->begin.tv_sec) -					strprintf (strfd, "\tCreation_time: %d.%d\n", -						   (int)frame->begin.tv_sec, -						   (int)frame->begin.tv_usec); -				strprintf (strfd, "\tRefcount: %d\n", frame->ref_count); -				strprintf (strfd, "\tComplete: %d\n", frame->complete); -				if (frame->parent) -					strprintf (strfd, "\tParent: %s\n", -						   frame->parent->this->name); -				if (frame->wind_from) -					strprintf (strfd, "\tWind_from: %s\n", -						   frame->wind_from); -				if (frame->wind_to) -					strprintf (strfd, "\tWind_to: %s\n", -						   frame->wind_to); -				if (frame->unwind_from) -					strprintf (strfd, "\tUnwind_from: %s\n", -						   frame->unwind_from); -				if (frame->unwind_to) -					strprintf (strfd, "\tUnwind_to: %s\n", -						   frame->unwind_to); -			} -		} -	} -	UNLOCK (&pool->lock); - -	return strfd->size; +        struct call_pool *pool = NULL; +        call_stack_t *stack = NULL; +        call_frame_t *frame = NULL; +        int i = 0; +        int j = 1; + +        if (!this || !file || !strfd) +                return -1; + +        pool = this->ctx->pool; + +        LOCK (&pool->lock); +        { +                strprintf (strfd, "{ \n\t\"Stack\": [\n"); +                list_for_each_entry (stack, &pool->all_frames, all_frames) { +                        strprintf (strfd, "\t   {\n"); +                        strprintf (strfd, "\t\t\"Number\": %d,\n", ++i); +                        strprintf (strfd, "\t\t\"Frame\": [\n"); +                        j = 1; +                        for (frame = &stack->frames; frame; +                             frame = frame->next) { +                                strprintf (strfd, "\t\t   {\n"); +                                strprintf (strfd, "\t\t\t\"Number\": %d,\n", +                                                j++); +                                strprintf (strfd, +                                                "\t\t\t\"Xlator\": \"%s\",\n", +                                                frame->this->name); +                                if (frame->begin.tv_sec) +                                        strprintf (strfd, +                                                        "\t\t\t\"Creation_time\": %d.%d,\n", +                                                        (int)frame->begin.tv_sec, +                                                        (int)frame->begin.tv_usec); +                                strprintf (strfd, " \t\t\t\"Refcount\": %d,\n", +                                                frame->ref_count); +                                if (frame->parent) +                                        strprintf (strfd, "\t\t\t\"Parent\": \"%s\",\n", +                                                        frame->parent->this->name); +                                if (frame->wind_from) +                                        strprintf (strfd, "\t\t\t\"Wind_from\": \"%s\",\n", +                                                        frame->wind_from); +                                if (frame->wind_to) +                                        strprintf (strfd, "\t\t\t\"Wind_to\": \"%s\",\n", +                                                        frame->wind_to); +                                if (frame->unwind_from) +                                        strprintf (strfd, "\t\t\t\"Unwind_from\": \"%s\",\n", +                                                        frame->unwind_from); +                                if (frame->unwind_to) +                                        strprintf (strfd, "\t\t\t\"Unwind_to\": \"%s\",\n", +                                                        frame->unwind_to); +                                strprintf (strfd, "\t\t\t\"Complete\": %d\n", +                                                frame->complete); +                                if (frame->next == NULL) +                                        strprintf (strfd, "\t\t   }\n"); +                                else +                                        strprintf (strfd, "\t\t   },\n"); +                        } +                        strprintf (strfd, "\t\t],\n"); +                        strprintf (strfd, "\t\t\"Unique\": %"PRId64",\n", +                                        stack->unique); +                        strprintf (strfd, "\t\t\"Type\": \"%s\",\n", +                                        gf_fop_list[stack->op]); +                        strprintf (strfd, "\t\t\"UID\": %d,\n", +                                        stack->uid); +                        strprintf (strfd, "\t\t\"GID\": %d,\n", +                                        stack->gid); +                        strprintf (strfd, "\t\t\"LK_owner\": \"%s\"\n", +                                        lkowner_utoa (&stack->lk_owner)); +                        if (i == (int)pool->cnt) +                                strprintf (strfd, "\t   }\n"); +                        else +                                strprintf (strfd, "\t   },\n"); +                } +                strprintf (strfd, "\t],\n"); +                strprintf (strfd, "\t\"Call_Count\": %d\n", +                                (int)pool->cnt); +                strprintf (strfd, "}"); +        } +        UNLOCK (&pool->lock); + +        return strfd->size;  }  static struct meta_ops frames_file_ops = { -	.file_fill = frames_file_fill, +        .file_fill = frames_file_fill,  };  int  meta_frames_file_hook (call_frame_t *frame, xlator_t *this, loc_t *loc, -		       dict_t *xdata) +                       dict_t *xdata)  { -	meta_ops_set (loc->inode, this, &frames_file_ops); - -	return 0; +        meta_ops_set (loc->inode, this, &frames_file_ops); +        return 0;  }  | 
