diff options
| -rw-r--r-- | cli/src/cli-xml-output.c | 26 | ||||
| -rwxr-xr-x | tests/bugs/bug-955588.t | 27 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 10 | 
3 files changed, 60 insertions, 3 deletions
diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index 680270550..6103a2cbd 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -2341,6 +2341,7 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)          int                     count = 0;          char                    *volname = NULL;          char                    *volume_id = NULL; +        char                    *uuid = NULL;          int                     type = 0;          int                     status = 0;          int                     brick_count = 0; @@ -2473,15 +2474,34 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)                                                   (xmlChar *)"bricks");                  XML_RET_CHECK_AND_GOTO (ret, out);                  while (j <= brick_count) { +                        ret = xmlTextWriterStartElement +                                (local->writer, (xmlChar *)"brick"); +                        XML_RET_CHECK_AND_GOTO (ret, out); + +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "volume%d.brick%d.uuid", +                                  i, j); +                        ret = dict_get_str (dict, key, &uuid); +                        if (ret) +                                goto out; +                        ret = xmlTextWriterWriteFormatAttribute +                                (local->writer, (xmlChar *)"uuid", "%s", +                                 uuid); +                        XML_RET_CHECK_AND_GOTO (ret, out); +                          memset (key, 0, sizeof (key));                          snprintf (key, sizeof (key), "volume%d.brick%d", i, j);                          ret = dict_get_str (dict, key, &brick);                          if (ret)                                  goto out; -                        ret = xmlTextWriterWriteFormatElement -                                (local->writer, (xmlChar *)"brick", "%s", -                                 brick); +                        ret = xmlTextWriterWriteFormatString +                                (local->writer, "%s", brick);                          XML_RET_CHECK_AND_GOTO (ret, out); + +                        /* </brick> */ +                        ret = xmlTextWriterEndElement (local->writer); +                        XML_RET_CHECK_AND_GOTO (ret, out); +                          j++;                  }                  /* </bricks> */ diff --git a/tests/bugs/bug-955588.t b/tests/bugs/bug-955588.t new file mode 100755 index 000000000..3f0361167 --- /dev/null +++ b/tests/bugs/bug-955588.t @@ -0,0 +1,27 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; +TEST glusterd +TEST pidof glusterd + +function get_brick_host_uuid() +{ +    local vol=$1; +    local uuid_regex='[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}' +    local host_uuid_list=$($CLI volume info $vol --xml | grep "brick.uuid" | grep -o -E "$uuid_regex"); + +    echo $host_uuid_list | awk '{print $1}' +} + +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0,1} + +uuid=`grep UUID /var/lib/glusterd/glusterd.info | cut -f2 -d=` +EXPECT $uuid get_brick_host_uuid $V0 + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index a74c52303..4893c8245 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -408,6 +408,7 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,          list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {                  char    brick[1024] = {0,}; +                char    brick_uuid[64] = {0,};                  snprintf (key, 256, "volume%d.brick%d", count, i);                  snprintf (brick, 1024, "%s:%s", brickinfo->hostname,                            brickinfo->path); @@ -415,6 +416,15 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,                  ret = dict_set_dynstr (volumes, key, buf);                  if (ret)                          goto out; +                snprintf (key, 256, "volume%d.brick%d.uuid", count, i); +                snprintf (brick_uuid, 64, "%s", uuid_utoa (brickinfo->uuid)); +                buf = gf_strdup (brick_uuid); +                if (!buf) +                        goto out; +                ret = dict_set_dynstr (volumes, key, buf); +                if (ret) +                        goto out; +                  i++;          }  | 
