diff options
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/cli-xml-output.c | 25 | 
1 files changed, 21 insertions, 4 deletions
diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index 2927ab1e4fd..fe0969a3042 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -3248,13 +3248,30 @@ cli_xml_output_vol_rebalance_status (xmlTextWriterPtr writer, dict_t *dict,                      overall_elapsed = elapsed;                  } +                /* Rebalance has 5 states, +                 * NOT_STARTED, STARTED, STOPPED, COMPLETE, FAILED +                 * The precedence used to determine the aggregate status is as +                 * below, +                 * STARTED > FAILED > STOPPED > COMPLETE > NOT_STARTED +                 */ +                /* TODO: Move this to a common place utilities that both CLI and +                 * glusterd need. +                 * Till then if the below algorithm is changed, change it in +                 * glusterd_volume_status_aggregate_tasks_status in +                 * glusterd-utils.c +                 */ +                  if (-1 == overall_status)                          overall_status = status_rcd; -                else if ((GF_DEFRAG_STATUS_COMPLETE == overall_status || -                          status_rcd > overall_status) && -                         (status_rcd != GF_DEFRAG_STATUS_COMPLETE)) +                int rank[] = { +                        [GF_DEFRAG_STATUS_STARTED] = 1, +                        [GF_DEFRAG_STATUS_FAILED] = 2, +                        [GF_DEFRAG_STATUS_STOPPED] = 3, +                        [GF_DEFRAG_STATUS_COMPLETE] = 4, +                        [GF_DEFRAG_STATUS_NOT_STARTED] = 5 +                }; +                if (rank[status_rcd] <= rank[overall_status])                          overall_status = status_rcd; -                XML_RET_CHECK_AND_GOTO (ret, out);                  /* </node> */                  ret = xmlTextWriterEndElement (writer);  | 
