diff options
| author | Kaushal M <kaushal@redhat.com> | 2012-09-06 13:08:00 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-10-11 16:34:16 -0700 | 
| commit | f1f3d1c62d1e066c065f250caa0fc005b66dba37 (patch) | |
| tree | c8956a9dd3c4df49ad4500f84b3333c3cb8c410e /xlators/mgmt/glusterd/src/glusterd-replace-brick.c | |
| parent | 6be13228c45188b104ffde22cee36fb24db8484d (diff) | |
cli: Changes and enhancements to XML output
This patch contains several xml related changes which fix some bugs and
introduce xml output for commands which were missing it. These include,
* XML output for rebalance & remove-brick status
* XML output for replace-brick
* XML output for 'volume status all' in on xml document
* proper XML output for "volume {create|start|stop|delete}"
* type & status of a volume in 'volume info' is now given as a string as well
This patch also cleans up the '#if (HAVE_LIB_XML)' sections from the code-base,
so that it is not littered around.
Change-Id: I5bb022adf0fedf7e3ead92b4b79bfa02b0b5fef5
BUG: 828131
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.org/3869
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-replace-brick.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 89 | 
1 files changed, 82 insertions, 7 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index 29c79872908..edc2627c1b3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -1113,11 +1113,17 @@ rb_send_cmd (glusterd_volinfo_t *volinfo,               glusterd_brickinfo_t *dst,               gf1_cli_replace_op op)  { -        char         start_value[8192] = {0,}; -        char         status[8192]      = {0,}; -        char        *status_reply      = NULL; -        dict_t      *ctx               = NULL; -        int          ret               = 0; +        char         start_value[8192]          = {0,}; +        char         status_str[8192]           = {0,}; +        char        *status_reply               = NULL; +        char        *tmp                        = NULL; +        char        *save_ptr                   = NULL; +        char         filename[PATH_MAX]         = {0,}; +        char        *current_file               = NULL; +        uint64_t     files                      = 0; +        int          status                     = 0; +        dict_t      *ctx                        = NULL; +        int          ret                        = 0;          GF_ASSERT (volinfo);          GF_ASSERT (src); @@ -1161,7 +1167,7 @@ rb_send_cmd (glusterd_volinfo_t *volinfo,                  {                          ret = rb_get_xattr_command (volinfo, src, dst,                                                      RB_PUMP_CMD_STATUS, -                                                    status); +                                                    status_str);                          if (ret)                                  goto out; @@ -1174,7 +1180,76 @@ rb_send_cmd (glusterd_volinfo_t *volinfo,                                  goto out;                          } -                        status_reply = gf_strdup (status); +                        /* Split status reply into different parts */ +                        tmp = strtok_r (status_str, ":", &save_ptr); +                        if (!tmp) { +                                ret = -1; +                                gf_log (THIS->name, GF_LOG_ERROR, +                                        "Couldn't tokenize status string"); +                                goto out; +                        } +                        sscanf (tmp, "status=%d", &status); +                        ret = dict_set_int32 (ctx, "status", status); +                        if (ret) { +                                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't " +                                        "set rb status in context"); +                                goto out; +                        } + +                        tmp = NULL; +                        tmp = strtok_r (NULL, ":", &save_ptr); +                        if (!tmp) { +                                ret = -1; +                                gf_log (THIS->name, GF_LOG_ERROR, +                                        "Couldn't tokenize status string"); +                                goto out; +                        } +                        sscanf (tmp, "no_of_files=%"SCNu64, &files); +                        ret = dict_set_uint64 (ctx, "files", files); +                        if (ret) { +                                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't " +                                        "set rb files in context"); +                                goto out; +                        } + +                        if (status == 0) { +                                tmp = NULL; +                                tmp = strtok_r (NULL, ":", &save_ptr); +                                if (!tmp) { +                                        ret = -1; +                                        gf_log (THIS->name, GF_LOG_ERROR, +                                                "Couldn't tokenize status " +                                                "string"); +                                        goto out; +                                } +                                sscanf (tmp, "current_file=%s", filename); +                                current_file = gf_strdup (filename); +                                ret = dict_set_dynstr (ctx, "current_file", +                                                       current_file); +                                if (ret) { +                                        GF_FREE (current_file); +                                        gf_log (THIS->name, GF_LOG_ERROR, +                                                "Couldn't set rb current file " +                                                "in context"); +                                        goto out; +                                } +                        } +                        if (status) { +                                ret = gf_asprintf (&status_reply, +                                                  "Number of files migrated = %" +                                                  PRIu64"\tMigration complete", +                                                  files); +                        } else { +                                ret = gf_asprintf (&status_reply, +                                                  "Number of files migrated = %" +                                                  PRIu64"\tCurrent file = %s", +                                                  files, filename); +                        } +                        if (ret == -1) { +                                gf_log (THIS->name, GF_LOG_ERROR, +                                        "Failed to create status_reply string"); +                                goto out; +                        }                          ret = dict_set_dynstr (ctx, "status-reply",                                                 status_reply);                          if (ret) {  | 
