diff options
| author | vmallika <vmallika@redhat.com> | 2015-06-15 12:31:48 +0530 | 
|---|---|---|
| committer | Niels de Vos <ndevos@redhat.com> | 2015-07-07 09:11:38 -0700 | 
| commit | c9e92231e8fb31e6e4a9f061746daaedd77ad1b7 (patch) | |
| tree | e5598f0a0bbf7ce7b67e9358997bd283b9ef7aff /cli/src/cli-xml-output.c | |
| parent | 5c8ee98a2dc6e7754ad37adcfd3a0e04014f266c (diff) | |
features/quota : Fix XML output for quota list command
This is a backport of http://review.gluster.org/#/c/9481/
> Sample output:
> ---------------
>
> Sample 1)
> ----------
> [root@snapshot-28 glusterfs]# gluster volume quota vol1 list /dir1 /dir4
> /dir5 --xml
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <cliOutput>
>   <opRet>0</opRet>
>   <opErrno>0</opErrno>
>   <opErrstr/>
>   <volQuota>
>     <limit>
>       <path>/dir1</path>
>       <hard_limit>10.0MB</hard_limit>
>       <soft_limit>80%</soft_limit>
>       <used_space>0Bytes</used_space>
>       <avail_space>10.0MB</avail_space>
>     </limit>
>     <limit>
>       <path>/dir4</path>
>       <path>No such file or directory</path>
>     </limit>
>     <limit>
>       <path>/dir5</path>
>       <path>No such file or directory</path>
>     </limit>
>   </volQuota>
> </cliOutput>
>
> Sample 2)
> ---------
> gluster volume quota vol1 list --xml
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <cliOutput>
>   <opRet>0</opRet>
>   <opErrno>0</opErrno>
>   <opErrstr/>
>   <volQuota/>
> </cliOutput>
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <cliOutput>
>   <volQuota>
>     <limit>
>       <path>/dir</path>
>       <hard_limit>10.0MB</hard_limit>
>       <soft_limit>80%</soft_limit>
>       <used_space>0Bytes</used_space>
>       <avail_space>10.0MB</avail_space>
>     </limit>
>     <limit>
>       <path>/dir1</path>
>       <hard_limit>10.0MB</hard_limit>
>       <soft_limit>80%</soft_limit>
>       <used_space>0Bytes</used_space>
>       <avail_space>10.0MB</avail_space>
>     </limit>
>   </volQuota>
> </cliOutput>
>
> Change-Id: I8a8d83cff88f778e5ee01fbca07d9f94c412317a
> BUG: 1185259
> Signed-off-by: Sachin Pandit <spandit@redhat.com>
> Reviewed-on: http://review.gluster.org/9481
> Reviewed-by: Vijaikumar Mallikarjuna <vmallika@redhat.com>
> Tested-by: Gluster Build System <jenkins@build.gluster.com>
> Reviewed-by: Kaushal M <kaushal@redhat.com>
Change-Id: Ibdf51db626a07e68b5ace98140877f6d21918c20
BUG: 1231641
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/11220
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Sachin Pandit <spandit@redhat.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Diffstat (limited to 'cli/src/cli-xml-output.c')
| -rw-r--r-- | cli/src/cli-xml-output.c | 234 | 
1 files changed, 111 insertions, 123 deletions
| diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index 8def609459e..4787cec322f 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -2828,145 +2828,46 @@ out:  }  int -cli_xml_output_vol_quota_limit_list (char *volname, char *limit_list, -                                     int op_ret, int op_errno, -                                     char *op_errstr) +cli_xml_output_vol_quota_limit_list_end (cli_local_t *local)  {  #if (HAVE_LIB_XML)          int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        int64_t                 size = 0; -        int64_t                 limit_value = 0; -        int                     i = 0; -        int                     j = 0; -        int                     k = 0; -        int                     len = 0; -        char                    *size_str = NULL; -        char                    path[PATH_MAX] = {0,}; -        char                    ret_str[1024] = {0,}; -        char                    value[1024] = {0,}; -        char                    mountdir[] = "/tmp/mountXXXXXX"; -        char                    abspath[PATH_MAX] = {0,}; -        runner_t                runner = {0,}; - -        GF_ASSERT (volname); -        GF_ASSERT (limit_list); - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; - -        /* <volQuota> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volQuota"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        if (!limit_list) -                goto cont; - -        len = strlen (limit_list); -        if (len == 0) -                goto cont; - -        if (mkdtemp (mountdir) == NULL) { -                gf_log ("cli", GF_LOG_ERROR, "failed to create a temporary" -                        " mount directory"); -                ret = -1; -                goto out; -        } - -        ret = runcmd (SBIN_DIR"/glusterfs", "-s", "localhost", -                      "--volfile-id", volname, "-l", -                      DEFAULT_LOG_FILE_DIRECTORY"/quota-list-xml.log", -                      mountdir, NULL); +        ret = xmlTextWriterEndElement (local->writer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "failed to mount glusterfs client"); -                ret = -1; -                goto rm_dir; +                goto out;          } -        while (i < len) { -                j = 0; -                k = 0; -                size = 0; - -                while (limit_list[i] != ':') -                        path[k++] = limit_list[i++]; -                path[k] = '\0'; - -                i++; - -                while (limit_list[i] != ',' && limit_list[i] != '\0') -                        value[j++] = limit_list[i++]; -                i++; - -                snprintf (abspath, sizeof (abspath), "%s/%s", mountdir, path); -                ret = sys_lgetxattr (abspath, "trusted.limit.list", -                                     (void *)ret_str, 4096); -                if (ret >= 0) { -                        sscanf (ret_str, "%"SCNd64",%"SCNd64, &size, -                                &limit_value); -                        size_str = gf_uint64_2human_readable ((uint64_t)size); -                } - -                /* <quota> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"quota"); -                XML_RET_CHECK_AND_GOTO (ret, unmount); - -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"path", "%s", path); -                XML_RET_CHECK_AND_GOTO (ret, unmount); - -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"limit", "%s", value); -                XML_RET_CHECK_AND_GOTO (ret, unmount); - -                if (size_str) { -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"size", "%s", size_str); -                        XML_RET_CHECK_AND_GOTO (ret, unmount); -                        GF_FREE (size_str); -                } else { -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"size", "%"PRId64, size); -                        XML_RET_CHECK_AND_GOTO (ret, unmount); -                } +        ret = cli_end_xml_output (local->writer, local->doc); -                /* </quota> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, unmount); +out: +        return ret; +#else +        return 0 +#endif +} -        } +int +cli_xml_output_vol_quota_limit_list_begin (cli_local_t *local, int op_ret, +                                           int op_errno, char *op_errstr) +{ +#if (HAVE_LIB_XML) +        int                     ret = -1; -unmount: -        runinit (&runner); -        runner_add_args (&runner, "umount", -#if GF_LINUX_HOST_OS -                         "-l", -#endif -                         mountdir, NULL); -        ret = runner_run_reuse (&runner); +        ret = cli_begin_xml_output (&(local->writer), &(local->doc));          if (ret) -                runner_log (&runner, "cli", GF_LOG_WARNING, "error executing"); -        runner_end (&runner); +                goto out; -rm_dir: -        rmdir (mountdir); +        ret = cli_xml_output_common (local->writer, op_ret, op_errno, +                                     op_errstr); +        if (ret) +                goto out; -cont: -        /* </volQuota> */ -        ret = xmlTextWriterEndElement (writer); +        /* <volQuota> */ +        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volQuota");          XML_RET_CHECK_AND_GOTO (ret, out); -        ret = cli_end_xml_output (writer, doc); -  out: -        GF_FREE (size_str);          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret;  #else @@ -3808,3 +3709,90 @@ out:          return 0;  #endif  } + +int +cli_quota_list_xml_error (cli_local_t *local, char *path, +                          char *errstr) +{ +#if (HAVE_LIB_XML) +        int     ret     =       -1; + +        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"limit"); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterWriteFormatElement (local->writer, +                                              (xmlChar *)"path", +                                               "%s", path); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterWriteFormatElement (local->writer, +                                              (xmlChar *)"errstr", +                                               "%s", errstr); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterEndElement (local->writer); +        XML_RET_CHECK_AND_GOTO (ret, out); + +out: +        return ret; +#else +        return 0; +#endif +} + +int +cli_quota_xml_output (cli_local_t *local, char *path, char *hl_str, +                      char *sl_final, void *used, void *avail) +{ +#if (HAVE_LIB_XML) +        int     ret             = -1; + +        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"limit"); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterWriteFormatElement (local->writer, +                                              (xmlChar *)"path", +                                              "%s", path); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterWriteFormatElement (local->writer, +                                              (xmlChar *)"hard_limit", +                                               "%s", hl_str); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterWriteFormatElement (local->writer, +                                              (xmlChar *)"soft_limit", +                                               "%s", sl_final); +        XML_RET_CHECK_AND_GOTO (ret, out); + +        if ((char *)used) { +                ret = xmlTextWriterWriteFormatElement +                        (local->writer, (xmlChar *)"used_space", "%s", +                        (char *)used); +        } else { +                ret = xmlTextWriterWriteFormatElement +                        (local->writer, (xmlChar *)"user_space", "%11"PRIu64, +                        *(long unsigned int *)used); +        } +        XML_RET_CHECK_AND_GOTO (ret, out); + +        if ((char *)avail) { +                ret = xmlTextWriterWriteFormatElement +                        (local->writer, (xmlChar *)"avail_space", "%s", +                        (char *)avail); +        } else { +                ret = xmlTextWriterWriteFormatElement +                        (local->writer, (xmlChar *)"avail_space", "%11"PRIu64, +                        *(long unsigned int *)avail); +        } +        XML_RET_CHECK_AND_GOTO (ret, out); + +        ret = xmlTextWriterEndElement (local->writer); +        XML_RET_CHECK_AND_GOTO (ret, out); + +out: +        return ret; +#else +        return 0; +#endif /* HAVE_LIB_XML */ +} | 
