mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 13:51:26 +02:00
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:
parent
a142c1deb4
commit
0fca7edeb5
@ -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))
|
||||
|
15
src/vars.c
15
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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user