]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: checks: Use the check as origin when a session is created
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 21 Apr 2020 09:53:32 +0000 (11:53 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 27 Apr 2020 07:39:38 +0000 (09:39 +0200)
Before, the server was used as origin during session creation. It was only used
to get the check associated to the server when a variable is get or set in the
check scope or when a check sample fetch was called. So it seems easier to use
the check as origin of a session. It is also more logical becaues the session is
created by the health-check itself and not its server.

src/checks.c
src/vars.c

index fb4c962c207869838a024d6999a9645ce9b5e193..58bc88dc4cab4ae737446f20815cd13ee15dd487 100644 (file)
@@ -3364,7 +3364,7 @@ static int tcpcheck_main(struct check *check)
                struct tcpcheck_var *var;
 
                /* First evaluation, create a session */
-               check->sess = session_new(&checks_fe, NULL, (check->server ? &check->server->obj_type : NULL));
+               check->sess = session_new(&checks_fe, NULL, &check->obj_type);
                if (!check->sess) {
                        chunk_printf(&trash, "TCPCHK error allocating check session");
                        set_server_check_status(check, HCHK_STATUS_SOCKERR, trash.area);
@@ -4457,13 +4457,13 @@ smp_fetch_chk_payload(const struct arg *arg_p, struct sample *smp, const char *k
 {
        unsigned int buf_offset = ((arg_p[0].type == ARGT_SINT) ? arg_p[0].data.sint : 0);
        unsigned int buf_size = ((arg_p[1].type == ARGT_SINT) ? arg_p[1].data.sint : 0);
-       struct server *srv = (smp->sess ? objt_server(smp->sess->origin) : NULL);
+       struct check *check = (smp->sess ? objt_check(smp->sess->origin) : NULL);
        struct buffer *buf;
 
-       if (!srv || !srv->do_check)
+       if (!check)
                return 0;
 
-       buf = &srv->check.bi;
+       buf = &check->bi;
        if (buf_offset > b_data(buf))
                goto no_match;
        if (buf_offset + buf_size > b_data(buf))
index 0fa3397c761eb8dad6423b7496850564434bf4db..a6807facdf6e654bbc4770220c43c8856becd654 100644 (file)
@@ -49,9 +49,9 @@ static inline struct vars *get_vars(struct session *sess, struct stream *strm, e
        case SCOPE_SESS:
                return &sess->vars;
        case SCOPE_CHECK: {
-                       struct server *srv = objt_server(sess->origin);
+                       struct check *check = objt_check(sess->origin);
 
-                       return srv ? &srv->check.vars : NULL;
+                       return check ? &check->vars : NULL;
                }
        case SCOPE_TXN:
                return strm ? &strm->vars_txn : NULL;
@@ -78,10 +78,10 @@ static void var_accounting_diff(struct vars *vars, struct session *sess, struct
                        _HA_ATOMIC_ADD(&strm->vars_txn.size, size);
                goto scope_sess;
        case SCOPE_CHECK: {
-                       struct server *srv = objt_server(sess->origin);
+                       struct check *check = objt_check(sess->origin);
 
-                       if (srv != NULL)
-                               _HA_ATOMIC_ADD(&srv->check.vars.size, size);
+                       if (check)
+                               _HA_ATOMIC_ADD(&check->vars.size, size);
                }
                /* fall through */
 scope_sess:
@@ -114,10 +114,9 @@ static int var_accounting_add(struct vars *vars, struct session *sess, struct st
                        return 0;
                goto scope_sess;
        case SCOPE_CHECK: {
-                       struct server *srv = objt_server(sess->origin);
+                       struct check *check = objt_check(sess->origin);
 
-                       if (var_check_limit && srv &&
-                           srv->check.vars.size + size > var_check_limit)
+                       if (var_check_limit && check && check->vars.size + size > var_check_limit)
                                return 0;
                }
                /* fall through */