#define CHK_ST_INPROGRESS 0x0001 /* a check is currently running */
#define CHK_ST_CONFIGURED 0x0002 /* this check is configured and may be enabled */
#define CHK_ST_ENABLED 0x0004 /* this check is currently administratively enabled */
+#define CHK_ST_PAUSED 0x0008 /* checks are paused because of maintenance (health only) */
/* check status */
enum {
else if (!defsrv && !strcmp(args[cur_arg], "disabled")) {
newsrv->state |= SRV_MAINTAIN;
newsrv->state &= ~SRV_RUNNING;
+ newsrv->check.state |= CHK_ST_PAUSED;
newsrv->check.health = 0;
newsrv->agent.health = 0;
cur_arg += 1;
/* if the other server is forced disabled, we have to do the same here */
if (srv->state & SRV_MAINTAIN) {
newsrv->state |= SRV_MAINTAIN;
+ newsrv->check.state |= CHK_ST_PAUSED;
newsrv->state &= ~SRV_RUNNING;
newsrv->check.health = 0;
newsrv->agent.health = 0;
s->last_change = now.tv_sec;
s->state |= SRV_RUNNING;
s->state &= ~SRV_MAINTAIN;
+ s->check.state &= ~CHK_ST_PAUSED;
if (s->slowstart > 0) {
s->state |= SRV_WARMINGUP;
* stopped, the server should not be checked or the check
* is disabled.
*/
- if (!(s->check.state & CHK_ST_ENABLED) ||
- s->proxy->state == PR_STSTOPPED ||
- (s->state & SRV_MAINTAIN) ||
- !(check->state & CHK_ST_ENABLED))
+ if (!(check->state & CHK_ST_ENABLED) ||
+ !(s->check.state & CHK_ST_ENABLED) ||
+ (s->check.state & CHK_ST_PAUSED) ||
+ s->proxy->state == PR_STSTOPPED)
goto reschedule;
/* we'll initiate a new check */
sv->check.health = sv->check.rise; /* up, but will fall down at first failure */
} else {
sv->state &= ~SRV_MAINTAIN;
+ sv->check.state &= ~CHK_ST_PAUSED;
set_server_down(&sv->check);
}
} else {
if (! (sv->state & SRV_MAINTAIN)) {
/* Not already in maintenance, we can change the server state */
sv->state |= SRV_MAINTAIN;
+ sv->check.state |= CHK_ST_PAUSED;
set_server_down(&sv->check);
}
if ((px->state != PR_STSTOPPED) && !(sv->state & SRV_MAINTAIN)) {
/* Not already in maintenance, we can change the server state */
sv->state |= SRV_MAINTAIN;
+ sv->check.state |= CHK_ST_PAUSED;
set_server_down(&sv->check);
altered_servers++;
total_servers++;