From a05c579f1c3695c4ddead0a5cfc2c92422bd4f8f Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sat, 3 May 2014 13:25:41 -0700 Subject: 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 Reviewed-on: http://review.gluster.org/7653 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/meta/src/cmdline-file.c | 15 +++-- xlators/meta/src/frames-file.c | 142 ++++++++++++++++++++++++---------------- xlators/meta/src/version-file.c | 13 ++-- 3 files changed, 99 insertions(+), 71 deletions(-) (limited to 'xlators') diff --git a/xlators/meta/src/cmdline-file.c b/xlators/meta/src/cmdline-file.c index 1eded6d19b8..88411f2629b 100644 --- a/xlators/meta/src/cmdline-file.c +++ b/xlators/meta/src/cmdline-file.c @@ -26,22 +26,23 @@ static int cmdline_file_fill (xlator_t *this, inode_t *file, strfd_t *strfd) { - if (this->ctx->cmdlinestr) - strprintf (strfd, "%s\n", this->ctx->cmdlinestr); - return strfd->size; + if (this->ctx->cmdlinestr) + strprintf (strfd, "{ \n \"Cmdlinestr\": \"%s\"\n}", + this->ctx->cmdlinestr); + return strfd->size; } static struct meta_ops cmdline_file_ops = { - .file_fill = cmdline_file_fill, + .file_fill = cmdline_file_fill, }; int meta_cmdline_file_hook (call_frame_t *frame, xlator_t *this, loc_t *loc, - dict_t *xdata) + dict_t *xdata) { - meta_ops_set (loc->inode, this, &cmdline_file_ops); + meta_ops_set (loc->inode, this, &cmdline_file_ops); - return 0; + return 0; } 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; } diff --git a/xlators/meta/src/version-file.c b/xlators/meta/src/version-file.c index 77f2dea3d66..c402453ee96 100644 --- a/xlators/meta/src/version-file.c +++ b/xlators/meta/src/version-file.c @@ -26,21 +26,22 @@ static int version_file_fill (xlator_t *this, inode_t *file, strfd_t *strfd) { - strprintf (strfd, "%s\n", PACKAGE_VERSION); - return strfd->size; + strprintf (strfd, "{ \n \"Package Version\": \"%s\"\n}", + PACKAGE_VERSION); + return strfd->size; } static struct meta_ops version_file_ops = { - .file_fill = version_file_fill, + .file_fill = version_file_fill, }; int meta_version_file_hook (call_frame_t *frame, xlator_t *this, loc_t *loc, - dict_t *xdata) + dict_t *xdata) { - meta_ops_set (loc->inode, this, &version_file_ops); + meta_ops_set (loc->inode, this, &version_file_ops); - return 0; + return 0; } -- cgit