summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faulet <cfaulet@haproxy.com>2021-01-22 17:33:22 +0100
committerChristopher Faulet <cfaulet@haproxy.com>2021-01-22 17:42:32 +0100
commitd808f1759dcb9fcf28b68f835b56e9c0caddddcc (patch)
treeff3fd7d856d46562b2a577174e9b0de3c3365794
parent24c41d55bd878a5abc28978eec5f75a8e44fd597 (diff)
downloadhaproxy-d808f1759dcb9fcf28b68f835b56e9c0caddddcc.tar.gz
BUG/MINOR: stats: Continue to fill frontend stats on unimplemented metric
A regression was introduced by the commit 0ef54397b ("MEDIUM: stats: allow to select one field in `stats_fill_fe_stats`"). stats_fill_fe_stats() function fails on unimplemented metrics for frontends. However, not all stats metrics are used by frontends. For instance ST_F_QCUR. As a consequence, the frontends stats are always skipped. To fix the bug, we just skip unimplemented metric for frontends. An error is triggered only if a specific field is given and is unimplemented. No backport is needed except if the above commit is backported.
-rw-r--r--src/stats.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/stats.c b/src/stats.c
index 0075b77e5..e1b350a44 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -1623,10 +1623,10 @@ int stats_dump_one_line(const struct field *stats, size_t stats_count,
}
/* Fill <stats> with the frontend statistics. <stats> is preallocated array of
- * length <len>. The length of the array must be at least ST_F_TOTAL_FIELDS. If
- * this length is less than this value, or if one field is not implemented, the
- * function returns 0, otherwise, it returns 1. If selected_field is != NULL,
- * only fill this one
+ * length <len>. If <selected_field> is != NULL, only fill this one. The length
+ * of the array must be at least ST_F_TOTAL_FIELDS. If this length is less than
+ * this value, or if the selected field is not implemented for frontends, the
+ * function returns 0, otherwise, it returns 1.
*/
int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len,
enum stat_field *selected_field)
@@ -1787,8 +1787,12 @@ int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len,
metric = mkf_u64(FN_COUNTER, px->fe_counters.cum_conn);
break;
default:
- /* should never fall here unless non implemented */
- return 0;
+ /* not used for frontends. If a specific metric
+ * is requested, return an error. Otherwise continue.
+ */
+ if (selected_field != NULL)
+ return 0;
+ continue;
}
stats[current_field] = metric;
if (selected_field != NULL)