From: Christopher Faulet Date: Tue, 21 Apr 2020 09:53:32 +0000 (+0200) Subject: MINOR: checks: Use the check as origin when a session is created X-Git-Tag: v2.2-dev7~98 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0fca7edeb59cf9588f4f3b9db97f1912171860da;p=thirdparty%2Fhaproxy.git MINOR: checks: Use the check as origin when a session is created 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. --- diff --git a/src/checks.c b/src/checks.c index fb4c962c20..58bc88dc4c 100644 --- a/src/checks.c +++ b/src/checks.c @@ -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)) diff --git a/src/vars.c b/src/vars.c index 0fa3397c76..a6807facdf 100644 --- a/src/vars.c +++ b/src/vars.c @@ -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 */