mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 06:11:32 +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;
|
struct tcpcheck_var *var;
|
||||||
|
|
||||||
/* First evaluation, create a session */
|
/* 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) {
|
if (!check->sess) {
|
||||||
chunk_printf(&trash, "TCPCHK error allocating check session");
|
chunk_printf(&trash, "TCPCHK error allocating check session");
|
||||||
set_server_check_status(check, HCHK_STATUS_SOCKERR, trash.area);
|
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_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);
|
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;
|
struct buffer *buf;
|
||||||
|
|
||||||
if (!srv || !srv->do_check)
|
if (!check)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
buf = &srv->check.bi;
|
buf = &check->bi;
|
||||||
if (buf_offset > b_data(buf))
|
if (buf_offset > b_data(buf))
|
||||||
goto no_match;
|
goto no_match;
|
||||||
if (buf_offset + buf_size > b_data(buf))
|
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:
|
case SCOPE_SESS:
|
||||||
return &sess->vars;
|
return &sess->vars;
|
||||||
case SCOPE_CHECK: {
|
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:
|
case SCOPE_TXN:
|
||||||
return strm ? &strm->vars_txn : NULL;
|
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);
|
_HA_ATOMIC_ADD(&strm->vars_txn.size, size);
|
||||||
goto scope_sess;
|
goto scope_sess;
|
||||||
case SCOPE_CHECK: {
|
case SCOPE_CHECK: {
|
||||||
struct server *srv = objt_server(sess->origin);
|
struct check *check = objt_check(sess->origin);
|
||||||
|
|
||||||
if (srv != NULL)
|
if (check)
|
||||||
_HA_ATOMIC_ADD(&srv->check.vars.size, size);
|
_HA_ATOMIC_ADD(&check->vars.size, size);
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
scope_sess:
|
scope_sess:
|
||||||
@ -114,10 +114,9 @@ static int var_accounting_add(struct vars *vars, struct session *sess, struct st
|
|||||||
return 0;
|
return 0;
|
||||||
goto scope_sess;
|
goto scope_sess;
|
||||||
case SCOPE_CHECK: {
|
case SCOPE_CHECK: {
|
||||||
struct server *srv = objt_server(sess->origin);
|
struct check *check = objt_check(sess->origin);
|
||||||
|
|
||||||
if (var_check_limit && srv &&
|
if (var_check_limit && check && check->vars.size + size > var_check_limit)
|
||||||
srv->check.vars.size + size > var_check_limit)
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user