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.
This commit is contained in:
Christopher Faulet 2020-04-21 11:53:32 +02:00
parent a142c1deb4
commit 0fca7edeb5
2 changed files with 11 additions and 12 deletions

View 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))

View 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 */