MEDIUM: Paramatise functions over the check of a server
Paramatise the following functions over the check of a server * set_server_down * set_server_up * srv_getinter * server_status_printf * set_server_check_status * set_server_disabled * set_server_enabled Generally the server parameter of these functions has been removed. Where it is still needed it is obtained using check->server. This is in preparation for associating a agent check with a server which runs as well as the server's existing check. By paramatising these functions they may act on each of the checks without further significant modification. Explanation of the SSP_O_HCHK portion of this change: * Prior to this patch SSP_O_HCHK serves a single purpose which is to tell server_status_printf() weather it should print the details of the check of a server or not. With the paramatisation that this patch adds there are two cases. 1) Printing the details of the check in which case a valid check parameter is needed. 2) Not printing the details of the check in which case the contents check parameter are unused. In case 1) we could pass SSP_O_HCHK and a valid check and; In case 2) we could pass !SSP_O_HCHK and any value for check including NULL. If NULL is used for case 2) then SSP_O_HCHK becomes supurfulous and as NULL is used for case 2) SSP_O_HCHK has been removed. Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
28b5ffc76f
commit
4a741432be
@ -27,8 +27,8 @@
|
||||
|
||||
const char *get_check_status_description(short check_status);
|
||||
const char *get_check_status_info(short check_status);
|
||||
void set_server_down(struct server *s);
|
||||
void set_server_up(struct server *s);
|
||||
void set_server_down(struct check *check);
|
||||
void set_server_up(struct check *check);
|
||||
int start_checks();
|
||||
void health_adjust(struct server *s, short status);
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include <proto/freq_ctr.h>
|
||||
|
||||
int srv_downtime(const struct server *s);
|
||||
int srv_getinter(const struct server *s);
|
||||
int srv_getinter(const struct check *check);
|
||||
|
||||
/* increase the number of cumulated connections on the designated server */
|
||||
static void inline srv_inc_sess_ctr(struct server *s)
|
||||
|
@ -117,6 +117,7 @@ struct check {
|
||||
int send_proxy; /* send a PROXY protocol header with checks */
|
||||
int inter, fastinter, downinter; /* checks: time in milliseconds */
|
||||
int result; /* health-check result : SRV_CHK_* */
|
||||
int type; /* Check type, one of PR_O2_*_CHK */
|
||||
struct server *server; /* back-pointer to server */
|
||||
};
|
||||
|
||||
|
@ -4902,6 +4902,7 @@ stats_error_parsing:
|
||||
|
||||
newsrv->check.conn->t.sock.fd = -1; /* no check in progress yet */
|
||||
newsrv->check.status = HCHK_STATUS_INI;
|
||||
newsrv->check.type = curproxy->options2 & PR_O2_CHK_ANY;
|
||||
newsrv->check.server = newsrv;
|
||||
newsrv->state |= SRV_CHECKED;
|
||||
}
|
||||
|
487
src/checks.c
487
src/checks.c
File diff suppressed because it is too large
Load Diff
@ -1308,14 +1308,14 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line)
|
||||
* we must restore the good status.
|
||||
*/
|
||||
if (sv->track->state & SRV_RUNNING) {
|
||||
set_server_up(sv);
|
||||
set_server_up(&sv->check);
|
||||
sv->health = sv->rise; /* up, but will fall down at first failure */
|
||||
} else {
|
||||
sv->state &= ~SRV_MAINTAIN;
|
||||
set_server_down(sv);
|
||||
set_server_down(&sv->check);
|
||||
}
|
||||
} else {
|
||||
set_server_up(sv);
|
||||
set_server_up(&sv->check);
|
||||
sv->health = sv->rise; /* up, but will fall down at first failure */
|
||||
}
|
||||
}
|
||||
@ -1365,7 +1365,7 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line)
|
||||
if (! (sv->state & SRV_MAINTAIN)) {
|
||||
/* Not already in maintenance, we can change the server state */
|
||||
sv->state |= SRV_MAINTAIN;
|
||||
set_server_down(sv);
|
||||
set_server_down(&sv->check);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -2911,7 +2911,7 @@ int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn
|
||||
if ((px->state != PR_STSTOPPED) && !(sv->state & SRV_MAINTAIN)) {
|
||||
/* Not already in maintenance, we can change the server state */
|
||||
sv->state |= SRV_MAINTAIN;
|
||||
set_server_down(sv);
|
||||
set_server_down(&sv->check);
|
||||
altered_servers++;
|
||||
total_servers++;
|
||||
}
|
||||
@ -2919,7 +2919,7 @@ int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn
|
||||
case ST_ADM_ACTION_ENABLE:
|
||||
if ((px->state != PR_STSTOPPED) && (sv->state & SRV_MAINTAIN)) {
|
||||
/* Already in maintenance, we can change the server state */
|
||||
set_server_up(sv);
|
||||
set_server_up(&sv->check);
|
||||
sv->health = sv->rise; /* up, but will fall down at first failure */
|
||||
altered_servers++;
|
||||
total_servers++;
|
||||
|
10
src/server.c
10
src/server.c
@ -30,15 +30,17 @@ int srv_downtime(const struct server *s)
|
||||
return now.tv_sec - s->last_change + s->down_time;
|
||||
}
|
||||
|
||||
int srv_getinter(const struct server *s)
|
||||
int srv_getinter(const struct check *check)
|
||||
{
|
||||
const struct server *s = check->server;
|
||||
|
||||
if ((s->state & SRV_CHECKED) && (s->health == s->rise + s->fall - 1))
|
||||
return s->check.inter;
|
||||
return check->inter;
|
||||
|
||||
if (!(s->state & SRV_RUNNING) && s->health==0)
|
||||
return (s->check.downinter)?(s->check.downinter):(s->check.inter);
|
||||
return (check->downinter)?(check->downinter):(check->inter);
|
||||
|
||||
return (s->check.fastinter)?(s->check.fastinter):(s->check.inter);
|
||||
return (check->fastinter)?(check->fastinter):(check->inter);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user