diff options
Diffstat (limited to 'cli/src/cli-xml-output.c')
| -rw-r--r-- | cli/src/cli-xml-output.c | 581 |
1 files changed, 126 insertions, 455 deletions
diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index 5dbf37e3d5d..069de75801c 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -10,10 +10,10 @@ #include <stdlib.h> #include "cli.h" #include "cli1-xdr.h" -#include "run.h" -#include "compat.h" -#include "syscall.h" -#include "upcall-utils.h" +#include <glusterfs/run.h> +#include <glusterfs/compat.h> +#include <glusterfs/syscall.h> +#include <glusterfs/upcall-utils.h> enum gf_task_types { GF_TASK_TYPE_REBALANCE, GF_TASK_TYPE_REMOVE_BRICK }; @@ -64,7 +64,7 @@ cli_begin_xml_output(xmlTextWriterPtr *writer, xmlDocPtr *doc) int ret = -1; *writer = xmlNewTextWriterDoc(doc, 0); - if (writer == NULL) { + if (*writer == NULL) { ret = -1; goto out; } @@ -1526,7 +1526,6 @@ cli_xml_output_vol_status(cli_local_t *local, dict_t *dict) gf_boolean_t node_present = _gf_true; int i; int type = -1; - int hot_brick_count = -1; /* <volume> */ ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volume"); @@ -1564,23 +1563,7 @@ cli_xml_output_vol_status(cli_local_t *local, dict_t *dict) if (ret) goto out; - if (type == GF_CLUSTER_TYPE_TIER) { - ret = dict_get_int32(dict, "hot_brick_count", &hot_brick_count); - if (ret) - goto out; - - ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"hotBricks"); - XML_RET_CHECK_AND_GOTO(ret, out); - } for (i = 0; i <= index_max; i++) { - if (type == GF_CLUSTER_TYPE_TIER && i == hot_brick_count) { - /* </hotBricks>*/ - ret = xmlTextWriterEndElement(local->writer); - XML_RET_CHECK_AND_GOTO(ret, out); - ret = xmlTextWriterStartElement(local->writer, - (xmlChar *)"coldBricks"); - XML_RET_CHECK_AND_GOTO(ret, out); - } ret = cli_xml_output_vol_status_common(local->writer, dict, i, &online, &node_present); if (ret) { @@ -1646,12 +1629,6 @@ cli_xml_output_vol_status(cli_local_t *local, dict_t *dict) /* </node> was opened in cli_xml_output_vol_status_common()*/ ret = xmlTextWriterEndElement(local->writer); XML_RET_CHECK_AND_GOTO(ret, out); - - /* </coldBricks>*/ - if (type == GF_CLUSTER_TYPE_TIER && i == brick_index_max) { - ret = xmlTextWriterEndElement(local->writer); - XML_RET_CHECK_AND_GOTO(ret, out); - } } /* Tasks are only present when a normal volume status call is done on a @@ -1684,15 +1661,15 @@ cli_xml_output_vol_top_rw_perf(xmlTextWriterPtr writer, dict_t *dict, int ret = -1; char *filename = NULL; uint64_t throughput = 0; - long int time_sec = 0; - long int time_usec = 0; - char timestr[256] = { + struct timeval tv = { + 0, + }; + char timestr[GF_TIMESTR_SIZE] = { 0, }; char key[1024] = { 0, }; - int len; /* <file> */ ret = xmlTextWriterStartElement(writer, (xmlChar *)"file"); @@ -1715,19 +1692,16 @@ cli_xml_output_vol_top_rw_perf(xmlTextWriterPtr writer, dict_t *dict, XML_RET_CHECK_AND_GOTO(ret, out); snprintf(key, sizeof(key), "%d-time-sec-%d", brick_index, member_index); - ret = dict_get_int32(dict, key, (int32_t *)&time_sec); + ret = dict_get_int32(dict, key, (int32_t *)&tv.tv_sec); if (ret) goto out; snprintf(key, sizeof(key), "%d-time-usec-%d", brick_index, member_index); - ret = dict_get_int32(dict, key, (int32_t *)&time_usec); + ret = dict_get_int32(dict, key, (int32_t *)&tv.tv_usec); if (ret) goto out; - gf_time_fmt(timestr, sizeof timestr, time_sec, gf_timefmt_FT); - len = strlen(timestr); - snprintf(timestr + len, sizeof(timestr) - len, ".%" GF_PRI_SUSECONDS, - time_usec); + gf_time_fmt_tv(timestr, sizeof timestr, &tv, gf_timefmt_FT); ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"time", "%s", timestr); XML_RET_CHECK_AND_GOTO(ret, out); @@ -1976,11 +1950,11 @@ cli_xml_output_vol_profile_stats(xmlTextWriterPtr writer, dict_t *dict, XML_RET_CHECK_AND_GOTO(ret, out); ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size", - "%" PRIu32, (1 << i)); + "%" PRIu32, (1U << i)); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%d-%d-read-%d", brick_index, interval, - (1 << i)); + snprintf(key, sizeof(key), "%d-%d-read-%" PRIu32, brick_index, interval, + (1U << i)); ret = dict_get_uint64(dict, key, &read_count); if (ret) read_count = 0; @@ -1988,8 +1962,8 @@ cli_xml_output_vol_profile_stats(xmlTextWriterPtr writer, dict_t *dict, "%" PRIu64, read_count); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%d-%d-write-%d", brick_index, interval, - (1 << i)); + snprintf(key, sizeof(key), "%d-%d-write-%" PRIu32, brick_index, + interval, (1U << i)); ret = dict_get_uint64(dict, key, &write_count); if (ret) write_count = 0; @@ -2471,24 +2445,6 @@ cli_xml_output_vol_info(cli_local_t *local, dict_t *dict) int j = 1; char *caps __attribute__((unused)) = NULL; int k __attribute__((unused)) = 0; - int index = 1; - int tier_vol_type = 0; - /* hot dist count is always zero so need for it to be - * included in the array.*/ - int hot_dist_count = 0; - values c = 0; - char *keys[MAX] = { - [COLD_BRICK_COUNT] = "volume%d.cold_brick_count", - [COLD_TYPE] = "volume%d.cold_type", - [COLD_DIST_COUNT] = "volume%d.cold_dist_count", - [COLD_REPLICA_COUNT] = "volume%d.cold_replica_count", - [COLD_ARBITER_COUNT] = "volume%d.cold_arbiter_count", - [COLD_DISPERSE_COUNT] = "volume%d.cold_disperse_count", - [COLD_REDUNDANCY_COUNT] = "volume%d.cold_redundancy_count", - [HOT_BRICK_COUNT] = "volume%d.hot_brick_count", - [HOT_TYPE] = "volume%d.hot_type", - [HOT_REPLICA_COUNT] = "volume%d.hot_replica_count"}; - int value[MAX] = {}; ret = dict_get_int32(dict, "count", &count); if (ret) @@ -2548,8 +2504,9 @@ cli_xml_output_vol_info(cli_local_t *local, dict_t *dict) ret = dict_get_int32(dict, key, &dist_count); if (ret) goto out; - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"distCount", "%d", dist_count); + ret = xmlTextWriterWriteFormatElement(local->writer, + (xmlChar *)"distCount", "%d", + (brick_count / dist_count)); XML_RET_CHECK_AND_GOTO(ret, out); snprintf(key, sizeof(key), "volume%d.stripe_count", i); @@ -2618,297 +2575,53 @@ cli_xml_output_vol_info(cli_local_t *local, dict_t *dict) local->writer, (xmlChar *)"transport", "%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++) { - 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++) { - 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> */ -#endif j = 1; /* <bricks> */ ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"bricks"); XML_RET_CHECK_AND_GOTO(ret, out); - if (type == GF_CLUSTER_TYPE_TIER) { - /*the values for hot stripe, disperse and redundancy - * should not be looped in here as they are zero - * always */ - for (c = COLD_BRICK_COUNT; c < MAX; c++) { - snprintf(key, 256, keys[c], i); - ret = dict_get_int32(dict, key, &value[c]); - if (ret) - goto out; - } - - hot_dist_count = (value[HOT_REPLICA_COUNT] - ? value[HOT_REPLICA_COUNT] - : 1); - - tier_vol_type = get_vol_type(value[HOT_TYPE], hot_dist_count, - value[HOT_BRICK_COUNT]); - - if ((value[HOT_TYPE] != GF_CLUSTER_TYPE_TIER) && - (value[HOT_TYPE] > 0) && - (hot_dist_count < value[HOT_BRICK_COUNT])) - tier_vol_type = value[HOT_TYPE] + GF_CLUSTER_TYPE_MAX - 1; - - ret = xmlTextWriterStartElement(local->writer, - (xmlChar *)"hotBricks"); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"hotBrickType", "%s", - vol_type_str[tier_vol_type]); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"hotreplicaCount", "%d", - value[HOT_REPLICA_COUNT]); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement(local->writer, - (xmlChar *)"hotbrickCount", - "%d", value[HOT_BRICK_COUNT]); + while (j <= brick_count) { + ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"brick"); XML_RET_CHECK_AND_GOTO(ret, out); - if (value[HOT_TYPE] == GF_CLUSTER_TYPE_NONE || - value[HOT_TYPE] == GF_CLUSTER_TYPE_TIER) { - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"numberOfBricks", "%d", - value[HOT_BRICK_COUNT]); - } else { - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"numberOfBricks", "%d x %d = %d", - (value[HOT_BRICK_COUNT] / hot_dist_count), hot_dist_count, - value[HOT_BRICK_COUNT]); - } - XML_RET_CHECK_AND_GOTO(ret, out); - - while (index <= value[HOT_BRICK_COUNT]) { - snprintf(key, 1024, "volume%d.brick%d", i, index); - ret = dict_get_str(dict, key, &brick); - if (ret) - goto out; - - ret = xmlTextWriterStartElement(local->writer, - (xmlChar *)"brick"); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, index); - 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); - - ret = xmlTextWriterWriteFormatString(local->writer, "%s", - brick); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"name", "%s", brick); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"hostUuid", "%s", uuid); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterEndElement(local->writer); - XML_RET_CHECK_AND_GOTO(ret, out); - - index++; - } - ret = xmlTextWriterEndElement(local->writer); - XML_RET_CHECK_AND_GOTO(ret, out); - - tier_vol_type = get_vol_type(value[COLD_TYPE], - value[COLD_DIST_COUNT], - value[COLD_BRICK_COUNT]); - - ret = xmlTextWriterStartElement(local->writer, - (xmlChar *)"coldBricks"); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"coldBrickType", "%s", - vol_type_str[tier_vol_type]); + 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); - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"coldreplicaCount", "%d", - value[COLD_REPLICA_COUNT]); + snprintf(key, sizeof(key), "volume%d.brick%d", i, j); + ret = dict_get_str(dict, key, &brick); + if (ret) + goto out; + ret = xmlTextWriterWriteFormatString(local->writer, "%s", brick); XML_RET_CHECK_AND_GOTO(ret, out); ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"coldarbiterCount", "%d", - value[COLD_ARBITER_COUNT]); + local->writer, (xmlChar *)"name", "%s", brick); XML_RET_CHECK_AND_GOTO(ret, out); ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"coldbrickCount", "%d", - value[COLD_BRICK_COUNT]); + local->writer, (xmlChar *)"hostUuid", "%s", uuid); XML_RET_CHECK_AND_GOTO(ret, out); + snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i, j); + if (dict_get(dict, key)) + isArbiter = 1; + else + isArbiter = 0; ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"colddisperseCount", "%d", - value[COLD_DISPERSE_COUNT]); + local->writer, (xmlChar *)"isArbiter", "%d", isArbiter); XML_RET_CHECK_AND_GOTO(ret, out); - if (value[COLD_TYPE] == GF_CLUSTER_TYPE_NONE || - value[COLD_TYPE] == GF_CLUSTER_TYPE_TIER) { - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"numberOfBricks", "%d", - value[COLD_BRICK_COUNT]); - } else if (value[COLD_TYPE] == GF_CLUSTER_TYPE_DISPERSE) { - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"numberOfBricks", - " %d x (%d + %d) = %d", - (value[COLD_BRICK_COUNT] / value[COLD_DIST_COUNT]), - value[COLD_DISPERSE_COUNT] - value[COLD_REDUNDANCY_COUNT], - value[COLD_REDUNDANCY_COUNT], value[COLD_BRICK_COUNT]); - } else { - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"numberOfBricks", "%d x %d = %d", - (value[COLD_BRICK_COUNT] / value[COLD_DIST_COUNT]), - value[COLD_DIST_COUNT], value[COLD_BRICK_COUNT]); - } - XML_RET_CHECK_AND_GOTO(ret, out); - index = value[HOT_BRICK_COUNT] + 1; - - while (index <= brick_count) { - snprintf(key, 1024, "volume%d.brick%d", i, index); - ret = dict_get_str(dict, key, &brick); - if (ret) - goto out; - - ret = xmlTextWriterStartElement(local->writer, - (xmlChar *)"brick"); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, index); - 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); - - ret = xmlTextWriterWriteFormatString(local->writer, "%s", - brick); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"name", "%s", brick); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"hostUuid", "%s", uuid); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i, - index); - if (dict_get(dict, key)) - isArbiter = 1; - else - isArbiter = 0; - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"isArbiter", "%d", isArbiter); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterEndElement(local->writer); - XML_RET_CHECK_AND_GOTO(ret, out); - - index++; - } + /* </brick> */ ret = xmlTextWriterEndElement(local->writer); XML_RET_CHECK_AND_GOTO(ret, out); - } else { - while (j <= brick_count) { - ret = xmlTextWriterStartElement(local->writer, - (xmlChar *)"brick"); - XML_RET_CHECK_AND_GOTO(ret, out); - - 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); - - snprintf(key, sizeof(key), "volume%d.brick%d", i, j); - ret = dict_get_str(dict, key, &brick); - if (ret) - goto out; - ret = xmlTextWriterWriteFormatString(local->writer, "%s", - brick); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"name", "%s", brick); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"hostUuid", "%s", uuid); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i, j); - if (dict_get(dict, key)) - isArbiter = 1; - else - isArbiter = 0; - ret = xmlTextWriterWriteFormatElement( - local->writer, (xmlChar *)"isArbiter", "%d", isArbiter); - XML_RET_CHECK_AND_GOTO(ret, out); - - /* </brick> */ - ret = xmlTextWriterEndElement(local->writer); - XML_RET_CHECK_AND_GOTO(ret, out); - - j++; - } + j++; } /* </bricks> */ ret = xmlTextWriterEndElement(local->writer); @@ -3064,7 +2777,9 @@ cli_xml_output_peer_hostnames(xmlTextWriterPtr writer, dict_t *dict, XML_RET_CHECK_AND_GOTO(ret, out); for (i = 0; i < count; i++) { - snprintf(key, sizeof(key), "%s.hostname%d", prefix, i); + ret = snprintf(key, sizeof(key), "%s.hostname%d", prefix, i); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &hostname); if (ret) goto out; @@ -3409,6 +3124,10 @@ cli_xml_output_vol_rebalance_status(xmlTextWriterPtr writer, dict_t *dict, "%" PRIu64, total_skipped); XML_RET_CHECK_AND_GOTO(ret, out); + if (overall_status == -1) { + overall_status = status_rcd; + } + ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d", overall_status); XML_RET_CHECK_AND_GOTO(ret, out); @@ -3430,90 +3149,6 @@ out: gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); return ret; } - -int -cli_xml_output_vol_tier_status(xmlTextWriterPtr writer, dict_t *dict, - enum gf_task_types task_type) -{ - int ret = -1; - int count = 0; - char *node_name = NULL; - char *status_str = NULL; - uint64_t promoted = 0; - uint64_t demoted = 0; - int i = 1; - char key[1024] = { - 0, - }; - gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED; - - GF_VALIDATE_OR_GOTO("cli", dict, out); - - ret = dict_get_int32(dict, "count", &count); - if (ret) { - gf_log("cli", GF_LOG_ERROR, "count not set"); - goto out; - } - - ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeCount", "%d", - count); - XML_RET_CHECK_AND_GOTO(ret, out); - - while (i <= count) { - promoted = 0; - node_name = NULL; - demoted = 0; - - ret = xmlTextWriterStartElement(writer, (xmlChar *)"node"); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "node-name-%d", i); - ret = dict_get_str(dict, key, &node_name); - if (ret) - goto out; - ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeName", - "%s", node_name); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "promoted-%d", i); - ret = dict_get_uint64(dict, key, &promoted); - if (ret) - goto out; - ret = xmlTextWriterWriteFormatElement (writer, - (xmlChar *)"promoted" - "Files", "%"PRIu64, - promoted); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "demoted-%d", i); - ret = dict_get_uint64(dict, key, &demoted); - if (ret) - goto out; - ret = xmlTextWriterWriteFormatElement (writer, - (xmlChar *)"demoted" - "Files", "%"PRIu64, - demoted); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "status-%d", i); - ret = dict_get_int32(dict, key, (int32_t *)&status_rcd); - - status_str = cli_vol_task_status_str[status_rcd]; - - ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"statusStr", - "%s", status_str); - XML_RET_CHECK_AND_GOTO(ret, out); - - ret = xmlTextWriterEndElement(writer); - XML_RET_CHECK_AND_GOTO(ret, out); - - i++; - } - -out: - gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); - return ret; -} #endif int @@ -3548,12 +3183,6 @@ cli_xml_output_vol_rebalance(gf_cli_defrag_type op, dict_t *dict, int op_ret, ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"op", "%d", op); XML_RET_CHECK_AND_GOTO(ret, out); - if (GF_DEFRAG_CMD_STATUS_TIER == op) { - ret = cli_xml_output_vol_tier_status(writer, dict, - GF_TASK_TYPE_REBALANCE); - if (ret) - goto out; - } if ((GF_DEFRAG_CMD_STOP == op) || (GF_DEFRAG_CMD_STATUS == op)) { ret = cli_xml_output_vol_rebalance_status(writer, dict, GF_TASK_TYPE_REBALANCE); @@ -3576,10 +3205,9 @@ out: } int -cli_xml_output_vol_remove_brick_detach_tier(gf_boolean_t status_op, - dict_t *dict, int op_ret, - int op_errno, char *op_errstr, - const char *op) +cli_xml_output_vol_remove_brick(gf_boolean_t status_op, dict_t *dict, + int op_ret, int op_errno, char *op_errstr, + const char *op) { #if (HAVE_LIB_XML) int ret = -1; @@ -3949,20 +3577,21 @@ cli_xml_output_vol_gsync_status(dict_t *dict, xmlTextWriterPtr writer) char *volume_next = NULL; char *slave = NULL; char *slave_next = NULL; - char *title_values[] = {"master_node", "", "master_brick", "slave_user", - "slave", "slave_node", "status", "crawl_status", - /* last_synced */ - "", "entry", "data", "meta", "failures", - /* checkpoint_time */ - "", "checkpoint_completed", - /* checkpoint_completion_time */ - "", "master_node_uuid", - /* last_synced_utc */ - "last_synced", - /* checkpoint_time_utc */ - "checkpoint_time", - /* checkpoint_completion_time_utc */ - "checkpoint_completion_time"}; + static const char *title_values[] = { + "master_node", "", "master_brick", "slave_user", "slave", "slave_node", + "status", "crawl_status", + /* last_synced */ + "", "entry", "data", "meta", "failures", + /* checkpoint_time */ + "", "checkpoint_completed", + /* checkpoint_completion_time */ + "", "master_node_uuid", + /* last_synced_utc */ + "last_synced", + /* checkpoint_time_utc */ + "checkpoint_time", + /* checkpoint_completion_time_utc */ + "checkpoint_completion_time"}; GF_ASSERT(dict); @@ -4103,6 +3732,8 @@ cli_xml_output_vol_gsync_status(dict_t *dict, xmlTextWriterPtr writer) } } out: + if (status_values) + GF_FREE(status_values); gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); return ret; } @@ -4178,6 +3809,10 @@ cli_xml_output_vol_gsync(dict_t *dict, int op_ret, int op_errno, break; case GF_GSYNC_OPTION_TYPE_STATUS: ret = cli_xml_output_vol_gsync_status(dict, writer); + if (ret) { + gf_log("cli", GF_LOG_DEBUG, "Failed to get gsync status"); + goto out; + } break; default: ret = 0; @@ -4567,7 +4202,9 @@ cli_xml_snapshot_info_snap_vol(xmlTextWriterPtr writer, xmlDocPtr doc, ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapVolume"); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.volname", keyprefix); + ret = snprintf(key, sizeof(key), "%s.volname", keyprefix); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &buffer); if (ret) { @@ -4579,7 +4216,9 @@ cli_xml_snapshot_info_snap_vol(xmlTextWriterPtr writer, xmlDocPtr doc, buffer); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.vol-status", keyprefix); + ret = snprintf(key, sizeof(key), "%s.vol-status", keyprefix); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &buffer); if (ret) { @@ -4594,7 +4233,10 @@ cli_xml_snapshot_info_snap_vol(xmlTextWriterPtr writer, xmlDocPtr doc, /* If the command is snap_driven then we need to show origin volume * info. Else this is shown in the start of info display.*/ if (snap_driven) { - snprintf(key, sizeof(key), "%s.", keyprefix); + ret = snprintf(key, sizeof(key), "%s.", keyprefix); + if (ret < 0) + goto out; + ret = cli_xml_snapshot_info_orig_vol(writer, doc, dict, key); if (ret) { gf_log("cli", GF_LOG_ERROR, @@ -4645,7 +4287,9 @@ cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key_buffer, sizeof(key_buffer), "%s.snapname", keyprefix); + ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snapname", keyprefix); + if (ret < 0) + goto out; ret = dict_get_str(dict, key_buffer, &buffer); if (ret) { @@ -4657,7 +4301,9 @@ cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, buffer); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key_buffer, sizeof(key_buffer), "%s.snap-id", keyprefix); + ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-id", keyprefix); + if (ret < 0) + goto out; ret = dict_get_str(dict, key_buffer, &buffer); if (ret) { @@ -4669,7 +4315,9 @@ cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, buffer); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key_buffer, sizeof(key_buffer), "%s.snap-desc", keyprefix); + ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-desc", keyprefix); + if (ret < 0) + goto out; ret = dict_get_str(dict, key_buffer, &buffer); if (!ret) { @@ -4681,7 +4329,9 @@ cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, } XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key_buffer, sizeof(key_buffer), "%s.snap-time", keyprefix); + ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-time", keyprefix); + if (ret < 0) + goto out; ret = dict_get_str(dict, key_buffer, &buffer); if (ret) { @@ -4693,7 +4343,10 @@ cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, buffer); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key_buffer, sizeof(key_buffer), "%s.vol-count", keyprefix); + ret = snprintf(key_buffer, sizeof(key_buffer), "%s.vol-count", keyprefix); + if (ret < 0) + goto out; + ret = dict_get_int32(dict, key_buffer, &volcount); if (ret) { gf_log("cli", GF_LOG_ERROR, "Fail to get snap vol count"); @@ -4707,7 +4360,10 @@ cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, ret = dict_get_int32(dict, key_buffer, &volcount); /* Display info of each snapshot volume */ for (i = 1; i <= volcount; i++) { - snprintf(key_buffer, sizeof(key_buffer), "%s.vol%d", keyprefix, i); + ret = snprintf(key_buffer, sizeof(key_buffer), "%s.vol%d", keyprefix, + i); + if (ret < 0) + goto out; ret = cli_xml_snapshot_info_snap_vol(writer, doc, dict, key_buffer, snap_driven); @@ -4831,7 +4487,9 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, GF_ASSERT(dict); GF_ASSERT(keyprefix); - snprintf(key, sizeof(key), "%s.brickcount", keyprefix); + ret = snprintf(key, sizeof(key), "%s.brickcount", keyprefix); + if (ret < 0) + goto out; ret = dict_get_int32(dict, key, &brickcount); if (ret) { @@ -4849,7 +4507,9 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick"); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.brick%d.path", keyprefix, i); + ret = snprintf(key, sizeof(key), "%s.brick%d.path", keyprefix, i); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &buffer); if (ret) { @@ -4868,7 +4528,9 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, buffer); XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.brick%d.vgname", keyprefix, i); + ret = snprintf(key, sizeof(key), "%s.brick%d.vgname", keyprefix, i); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &buffer); if (ret) { @@ -4881,7 +4543,9 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.brick%d.status", keyprefix, i); + ret = snprintf(key, sizeof(key), "%s.brick%d.status", keyprefix, i); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &buffer); if (ret) { @@ -4894,7 +4558,9 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.brick%d.pid", keyprefix, i); + ret = snprintf(key, sizeof(key), "%s.brick%d.pid", keyprefix, i); + if (ret < 0) + goto out; ret = dict_get_int32(dict, key, &pid); if (ret) { @@ -4907,7 +4573,9 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.brick%d.data", keyprefix, i); + ret = snprintf(key, sizeof(key), "%s.brick%d.data", keyprefix, i); + if (ret < 0) + goto out; ret = dict_get_str(dict, key, &buffer); if (ret) { @@ -4920,7 +4588,10 @@ cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, XML_RET_CHECK_AND_GOTO(ret, out); - snprintf(key, sizeof(key), "%s.brick%d.lvsize", keyprefix, i); + ret = snprintf(key, sizeof(key), "%s.brick%d.lvsize", keyprefix, i); + if (ret < 0) + goto out; + ret = dict_get_str(dict, key, &buffer); if (ret) { gf_log("cli", GF_LOG_ERROR, "Unable to get LV Size"); |
