]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: checks: Set the tcp-check rule index during parsing
authorGaetan Rivet <grive@u256.net>
Tue, 25 Feb 2020 16:19:17 +0000 (17:19 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 27 Apr 2020 07:39:37 +0000 (09:39 +0200)
Now the position of a tcp-check rule in a chain is set during the parsing. This
simplify significantly the function retrieving the current step id.

include/types/checks.h
src/checks.c

index fdf48740a6886ea41e0a431920fec925d14e2b2e..e5fd3fab5b98489984532141ef789de9e5aeaf2d 100644 (file)
@@ -249,6 +249,7 @@ enum tcpcheck_rule_type {
 struct tcpcheck_rule {
        struct list list;                       /* list linked to from the proxy */
        enum tcpcheck_rule_type action;         /* type of the rule. */
+       int index;                              /* Index within the list. Starts at 0. */
        char *comment;                          /* comment to be used in the logs and on the stats socket */
        char *string;                           /* sent string */
        int string_len;                         /* sent string length */
index 77008713cf16ff184b185a2cdb939a54b6b1fd2c..24ac16e0fab9f4e743455ab45fe2457764b822c1 100644 (file)
@@ -2730,9 +2730,6 @@ static int httpchk_expect(struct server *s, int done)
  */
 static int tcpcheck_get_step_id(struct check *check)
 {
-       struct tcpcheck_rule *cur;
-       int i = 0;
-
        /* not even started anything yet => step 0 = initial connect */
        if (!check->current_step && !check->last_started_step)
                return 0;
@@ -2741,12 +2738,7 @@ static int tcpcheck_get_step_id(struct check *check)
        if (!check->last_started_step)
                return 1;
 
-       list_for_each_entry(cur, check->tcpcheck_rules, list) {
-               if (cur->list.p == &check->last_started_step->list)
-                       break;
-               i++;
-       }
-       return i;
+       return check->last_started_step->index + 1;
 }
 
 /*
@@ -4257,7 +4249,7 @@ static int proxy_parse_tcpcheck(char **args, int section, struct proxy *curpx,
 {
        struct list *rules = curpx->tcpcheck_rules;
        struct tcpcheck_rule *chk = NULL;
-       int cur_arg, ret = 0;
+       int index, cur_arg, ret = 0;
 
        if (warnifnotcap(curpx, PR_CAP_BE, file, line, args[0], NULL))
                ret = 1;
@@ -4277,6 +4269,12 @@ static int proxy_parse_tcpcheck(char **args, int section, struct proxy *curpx,
                curpx->tcpcheck_rules = rules;
        }
 
+       index = 0;
+       if (!LIST_ISEMPTY(rules)) {
+               chk = LIST_PREV(rules, typeof(chk), list);
+               index = chk->index + 1;
+       }
+
        cur_arg = 1;
        if (strcmp(args[cur_arg], "connect") == 0)
                chk = parse_tcpcheck_connect(args, cur_arg, curpx, rules, errmsg);
@@ -4299,6 +4297,7 @@ static int proxy_parse_tcpcheck(char **args, int section, struct proxy *curpx,
        ret = (*errmsg != NULL); /* Handle warning */
 
        /* No error: add the tcp-check rule in the list */
+       chk->index = index;
        LIST_ADDQ(rules, &chk->list);
        return ret;