From 9e2aeea9242c04228049003bf8f878ea38af76da Mon Sep 17 00:00:00 2001 From: Avra Sengupta Date: Thu, 22 Nov 2012 16:02:47 +0530 Subject: cli: XML output for "gluster volume geo-replication status" Change-Id: I1a64bd5eb9b1040a2a2d9b97bfe9cc756835596e BUG: 864506 Signed-off-by: Avra Sengupta Reviewed-on: http://review.gluster.org/4227 Reviewed-by: Kaushal M Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- cli/src/cli-xml-output.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++- tests/bugs/bug-864506.t | 33 ++++++++++++++++++++ 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100755 tests/bugs/bug-864506.t diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index 47c0854b2..3e8bbdd4f 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -3169,6 +3169,82 @@ out: #endif } +int +cli_xml_output_vol_gsync_status (dict_t *dict, xmlTextWriterPtr writer) +{ + char master_key[PATH_MAX] = ""; + char slave_key[PATH_MAX] = ""; + char status_key[PATH_MAX] = ""; + char node_key[PATH_MAX] = ""; + char *master = NULL; + char *slave = NULL; + char *status = NULL; + char *node = NULL; + int ret = -1; + int gsync_count = 0; + int i = 1; + + ret = dict_get_int32 (dict, "gsync-count", &gsync_count); + if (ret) + goto out; + + for (i=1; i <= gsync_count; i++) { + snprintf (node_key, sizeof(node_key), "node%d", i); + snprintf (master_key, sizeof(master_key), "master%d", i); + snprintf (slave_key, sizeof(slave_key), "slave%d", i); + snprintf (status_key, sizeof(status_key), "status%d", i); + + ret = dict_get_str (dict, node_key, &node); + if (ret) + goto out; + + ret = dict_get_str (dict, master_key, &master); + if (ret) + goto out; + + ret = dict_get_str (dict, slave_key, &slave); + if (ret) + goto out; + + ret = dict_get_str (dict, status_key, &status); + if (ret) + goto out; + + /* */ + ret = xmlTextWriterStartElement (writer, (xmlChar *)"pair"); + XML_RET_CHECK_AND_GOTO (ret, out); + + ret = xmlTextWriterWriteFormatElement (writer, + (xmlChar *)"node", + "%s", node); + XML_RET_CHECK_AND_GOTO (ret, out); + + ret = xmlTextWriterWriteFormatElement (writer, + (xmlChar *)"master", + "%s", master); + XML_RET_CHECK_AND_GOTO (ret, out); + + ret = xmlTextWriterWriteFormatElement (writer, + (xmlChar *)"slave", + "%s", slave); + XML_RET_CHECK_AND_GOTO (ret, out); + + ret = xmlTextWriterWriteFormatElement (writer, + (xmlChar *)"status", + "%s", status); + XML_RET_CHECK_AND_GOTO (ret, out); + + /* */ + ret = xmlTextWriterEndElement (writer); + XML_RET_CHECK_AND_GOTO (ret, out); + + } + +out: + gf_log ("cli",GF_LOG_DEBUG, "Returning %d", ret); + return ret; +} + int cli_xml_output_vol_gsync (dict_t *dict, int op_ret, int op_errno, char *op_errstr) @@ -3227,8 +3303,10 @@ cli_xml_output_vol_gsync (dict_t *dict, int op_ret, int op_errno, break; case GF_GSYNC_OPTION_TYPE_CONFIG: + break; case GF_GSYNC_OPTION_TYPE_STATUS: - // TODO: XML output for these two types. + ret = cli_xml_output_vol_gsync_status(dict, writer); + break; default: ret = 0; break; diff --git a/tests/bugs/bug-864506.t b/tests/bugs/bug-864506.t new file mode 100755 index 000000000..c281f3811 --- /dev/null +++ b/tests/bugs/bug-864506.t @@ -0,0 +1,33 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 $H0:$B0/brick0 +TEST $CLI volume start $V0 + +TEST "mkdir $B0/slave" + +TEST "$CLI volume geo-replication $V0 $B0/slave start --xml | xmllint --format -" + +TEST "$CLI volume geo-replication $V0 $B0/slave2 start --xml | xmllint --format -" + +TEST "$CLI volume geo-replication status --xml | xmllint --format -" + +TEST "$CLI volume geo-replication $V0 $B0/slave status --xml | xmllint --format -" + +TEST "$CLI volume geo-replication $V0 $B0/slave2 status --xml | xmllint --format -" + +TEST "$CLI volume geo-replication $V0 $B0/slave stop --xml | xmllint --format -" + +TEST "$CLI volume geo-replication $V0 $B0/slave2 stop --xml | xmllint --format -" + +TEST $CLI volume stop $V0 + +TEST "rmdir $B0/slave" + +cleanup; -- cgit