BUG/MINOR: check: consitent way to set agentaddr
small consistency problem with `addr` and `agent-addr` options: for the both options, the last one parsed is always used to set the agent-check addr. Thus these two lines don't have the same behavior: server ... addr <addr1> agent-addr <addr2> server ... agent-addr <addr2> addr <addr1> After this patch `agent-addr` will always be the priority option over `addr`. It means we test the flag before setting agentaddr. We also fix all the places where we did not set the flag to be coherent everywhere. I was not really able to determine where this issue is coming from. So it is probable we may backport it to all stable version where the agent is supported. Signed-off-by: William Dauchy <wdauchy@gmail.com>
This commit is contained in:
parent
fe03e7d045
commit
1c921cd748
@ -52,6 +52,7 @@ int spoe_prepare_healthcheck_request(char **req, int *len);
|
||||
int spoe_handle_healthcheck_response(char *frame, size_t size, char *err, int errlen);
|
||||
|
||||
int set_srv_agent_send(struct server *srv, const char *send);
|
||||
void set_srv_agent_addr(struct server *srv, struct sockaddr_storage *sk);
|
||||
|
||||
/* Use this one only. This inline version only ensures that we don't
|
||||
* call the function when the observe mode is disabled.
|
||||
|
19
src/check.c
19
src/check.c
@ -1526,8 +1526,10 @@ static int srv_parse_addr(char **args, int *cur_arg, struct proxy *curpx, struct
|
||||
goto error;
|
||||
}
|
||||
|
||||
srv->check.addr = srv->agent.addr = *sk;
|
||||
srv->flags |= SRV_F_AGENTADDR;
|
||||
srv->check.addr = *sk;
|
||||
/* if agentaddr was never set, we can use addr */
|
||||
if (!(srv->flags & SRV_F_AGENTADDR))
|
||||
srv->agent.addr = *sk;
|
||||
|
||||
out:
|
||||
return err_code;
|
||||
@ -1537,21 +1539,23 @@ static int srv_parse_addr(char **args, int *cur_arg, struct proxy *curpx, struct
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
/* Parse the "agent-addr" server keyword */
|
||||
static int srv_parse_agent_addr(char **args, int *cur_arg, struct proxy *curpx, struct server *srv,
|
||||
char **errmsg)
|
||||
{
|
||||
struct sockaddr_storage sk;
|
||||
int err_code = 0;
|
||||
|
||||
if (!*(args[*cur_arg+1])) {
|
||||
memprintf(errmsg, "'%s' expects an address as argument.", args[*cur_arg]);
|
||||
goto error;
|
||||
}
|
||||
if(str2ip(args[*cur_arg+1], &srv->agent.addr) == NULL) {
|
||||
memset(&sk, 0, sizeof(sk));
|
||||
if (str2ip(args[*cur_arg + 1], &sk) == NULL) {
|
||||
memprintf(errmsg, "parsing agent-addr failed. Check if '%s' is correct address.", args[*cur_arg+1]);
|
||||
goto error;
|
||||
}
|
||||
set_srv_agent_addr(srv, &sk);
|
||||
|
||||
out:
|
||||
return err_code;
|
||||
@ -1730,6 +1734,13 @@ int set_srv_agent_send(struct server *srv, const char *send)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* set agent addr and apprropriate flag */
|
||||
inline void set_srv_agent_addr(struct server *srv, struct sockaddr_storage *sk)
|
||||
{
|
||||
srv->agent.addr = *sk;
|
||||
srv->flags |= SRV_F_AGENTADDR;
|
||||
}
|
||||
|
||||
/* Parse the "agent-send" server keyword */
|
||||
static int srv_parse_agent_send(char **args, int *cur_arg, struct proxy *curpx, struct server *srv,
|
||||
char **errmsg)
|
||||
|
@ -4383,9 +4383,14 @@ static int cli_parse_set_server(char **args, char *payload, struct appctx *appct
|
||||
cli_err(appctx, "'set server <srv> agent' expects 'up' or 'down'.\n");
|
||||
}
|
||||
else if (strcmp(args[3], "agent-addr") == 0) {
|
||||
struct sockaddr_storage sk;
|
||||
|
||||
memset(&sk, 0, sizeof(sk));
|
||||
if (!(sv->agent.state & CHK_ST_ENABLED))
|
||||
cli_err(appctx, "agent checks are not enabled on this server.\n");
|
||||
else if (str2ip(args[4], &sv->agent.addr) == NULL)
|
||||
else if (str2ip(args[4], &sk))
|
||||
set_srv_agent_addr(sv, &sk);
|
||||
else
|
||||
cli_err(appctx, "incorrect addr address given for agent.\n");
|
||||
}
|
||||
else if (strcmp(args[3], "agent-send") == 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user