diff --git a/include/types/checks.h b/include/types/checks.h index b944cd38b..252cb15b6 100644 --- a/include/types/checks.h +++ b/include/types/checks.h @@ -36,7 +36,8 @@ enum chk_result { /* flags used by check->state */ #define CHK_ST_INPROGRESS 0x0001 /* a check is currently running */ -#define CHK_ST_DISABLED 0x0002 /* this check is currently administratively disabled */ +#define CHK_ST_CONFIGURED 0x0002 /* this check is configured and may be enabled */ +#define CHK_ST_ENABLED 0x0004 /* this check is currently administratively enabled */ /* check status */ enum { diff --git a/src/cfgparse.c b/src/cfgparse.c index aa8bb90cf..b67594114 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -5123,6 +5123,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) goto out; } + newsrv->check.state |= CHK_ST_CONFIGURED | CHK_ST_ENABLED; newsrv->state |= SRV_CHECKED; } @@ -5145,6 +5146,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) goto out; } + newsrv->agent.state |= CHK_ST_CONFIGURED | CHK_ST_ENABLED; newsrv->state |= SRV_AGENT_CHECKED; } diff --git a/src/checks.c b/src/checks.c index 321557705..49bb41195 100644 --- a/src/checks.c +++ b/src/checks.c @@ -1165,7 +1165,7 @@ static void event_srv_chk_r(struct connection *conn) * parameter of this function is the agent or check field * of the server. */ - disabled = check->server->agent.state & CHK_ST_DISABLED; + disabled = !(check->server->agent.state & CHK_ST_ENABLED); if (strchr(check->bi->data, '%')) { if (disabled) @@ -1509,7 +1509,7 @@ static struct task *process_chk(struct task *t) if (!(s->state & SRV_CHECKED) || s->proxy->state == PR_STSTOPPED || (s->state & SRV_MAINTAIN) || - (check->state & CHK_ST_DISABLED)) + !(check->state & CHK_ST_ENABLED)) goto reschedule; /* we'll initiate a new check */ diff --git a/src/dumpstats.c b/src/dumpstats.c index ff8557a36..350b11103 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -1528,7 +1528,13 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) if (!sv) return 1; - sv->agent.state &= ~CHK_ST_DISABLED; + if (!(sv->agent.state & CHK_ST_CONFIGURED)) { + appctx->ctx.cli.msg = "Agent was not configured on this server, cannot enable.\n"; + appctx->st0 = STAT_CLI_PRINT; + return 1; + } + + sv->agent.state |= CHK_ST_ENABLED; return 1; } if (strcmp(args[1], "server") == 0) { @@ -1599,7 +1605,7 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) if (!sv) return 1; - sv->agent.state |= CHK_ST_DISABLED; + sv->agent.state &= ~CHK_ST_ENABLED; return 1; } else if (strcmp(args[1], "server") == 0) {