diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 7 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 42 | ||||
| -rw-r--r-- | cli/src/cli-xml-output.c | 59 | 
3 files changed, 106 insertions, 2 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index dcb317f54fc..100be0b7337 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1829,7 +1829,12 @@ struct cli_cmd volume_cmds[] = {            "list information of all volumes"},          { "volume create <NEW-VOLNAME> [stripe <COUNT>] [replica <COUNT>] " -          "[transport <tcp|rdma|tcp,rdma>] <NEW-BRICK> ... [force]", +          "[transport <tcp|rdma|tcp,rdma>] <NEW-BRICK>" +#ifdef HAVE_BD_XLATOR +          "?<vg_name>" +#endif +          "... [force]", +            cli_cmd_volume_create_cbk,            "create a new volume of specified type with mentioned bricks"}, diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 0ff997dc55e..80814501541 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -496,6 +496,8 @@ gf_cli_get_volume_cbk (struct rpc_req *req, struct iovec *iov,          char                       key[1024]            = {0};          char                       err_str[2048]        = {0};          gf_cli_rsp                 rsp                  = {0}; +        char                      *caps                 = NULL; +        int                        k __attribute__((unused)) = 0;          if (-1 == req->rpc_status)                  goto out; @@ -658,6 +660,40 @@ xml_output:                  cli_out ("Volume ID: %s", volume_id_str);                  cli_out ("Status: %s", cli_vol_status_str[status]); +#ifdef HAVE_BD_XLATOR +                k = 0; +                memset (key, 0, sizeof (key)); +                snprintf (key, sizeof (key), "volume%d.xlator%d", i, k); +                ret = dict_get_str (dict, key, &caps); +                if (ret) +                        goto next; +                do { +                        j = 0; +                        cli_out ("Xlator %d: %s", k + 1, caps); +                        do { +                                memset (key, 0, sizeof (key)); +                                snprintf (key, sizeof (key), +                                          "volume%d.xlator%d.caps%d", +                                          i, k, j++); +                                ret = dict_get_str (dict, key, &caps); +                                if (ret) +                                        break; +                                cli_out ("Capability %d: %s", j, caps); +                        } while (1); + +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), +                                  "volume%d.xlator%d", i, ++k); +                        ret = dict_get_str (dict, key, &caps); +                        if (ret) +                                break; +                } while (1); + +next: +#else +                caps = 0; /* Avoid compiler warnings when BD not enabled */ +#endif +                  if (type == GF_CLUSTER_TYPE_STRIPE_REPLICATE) {                          cli_out ("Number of Bricks: %d x %d x %d = %d",                                   (brick_count / dist_count), @@ -693,6 +729,12 @@ xml_output:                                  goto out;                          cli_out ("Brick%d: %s", j, brick); +#ifdef HAVE_BD_XLATOR +                        snprintf (key, 256, "volume%d.vg%d", i, j); +                        ret = dict_get_str (dict, key, &caps); +                        if (!ret) +                                cli_out ("Brick%d VG: %s", j, caps); +#endif                          j++;                  } diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index cc021a34d64..0f837fc7428 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -2497,7 +2497,8 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)          char                    key[1024] = {0,};          int                     i = 0;          int                     j = 1; - +        char                    *caps = NULL; +        int                     k __attribute__((unused)) = 0;          ret = dict_get_int32 (dict, "count", &count);          if (ret) @@ -2613,6 +2614,62 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)                                                         "%d", transport);                  XML_RET_CHECK_AND_GOTO (ret, out); +#ifdef HAVE_BD_XLATOR +                /* <xlators> */ +                ret = xmlTextWriterStartElement (local->writer, +                                                 (xmlChar *)"xlators"); +                XML_RET_CHECK_AND_GOTO (ret, out); + +                for (k = 0; ; k++) { +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key),"volume%d.xlator%d", i, k); +                        ret = dict_get_str (dict, key, &caps); +                        if (ret) +                                break; + +                        /* <xlator> */ +                        ret = xmlTextWriterStartElement (local->writer, +                                                         (xmlChar *)"xlator"); +                        XML_RET_CHECK_AND_GOTO (ret, out); + +                        ret = xmlTextWriterWriteFormatElement +                                (local->writer, (xmlChar *)"name", "%s", caps); +                        XML_RET_CHECK_AND_GOTO (ret, out); + +                        /* <capabilities> */ +                        ret = xmlTextWriterStartElement (local->writer, +                                                         (xmlChar *) +                                                         "capabilities"); +                        XML_RET_CHECK_AND_GOTO (ret, out); + +                        j = 0; +                        for (j = 0; ;j++) { +                                memset (key, 0, sizeof (key)); +                                snprintf (key, sizeof (key), +                                          "volume%d.xlator%d.caps%d", i, k, j); +                                ret = dict_get_str (dict, key, &caps); +                                if (ret) +                                        break; +                                ret = xmlTextWriterWriteFormatElement +                                        (local->writer, (xmlChar *)"capability", +                                         "%s", caps); +                                XML_RET_CHECK_AND_GOTO (ret, out); +                        } +                        /* </capabilities> */ +                        ret = xmlTextWriterEndElement (local->writer); +                        XML_RET_CHECK_AND_GOTO (ret, out); +                        /* </xlator> */ +                        ret = xmlTextWriterEndElement (local->writer); +                        XML_RET_CHECK_AND_GOTO (ret, out); +                } +                ret = xmlTextWriterFullEndElement (local->writer); +                XML_RET_CHECK_AND_GOTO (ret, out); +                /* </xlators> */ +#else +                caps = 0; /* Avoid compiler warnings when BD not enabled */ +#endif +                j = 1; +                  /* <bricks> */                  ret = xmlTextWriterStartElement (local->writer,                                                   (xmlChar *)"bricks");  | 
