mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-09 00:27:08 +02:00
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_description(short check_status);
|
||||||
const char *get_check_status_info(short check_status);
|
const char *get_check_status_info(short check_status);
|
||||||
void set_server_down(struct server *s);
|
void set_server_down(struct check *check);
|
||||||
void set_server_up(struct server *s);
|
void set_server_up(struct check *check);
|
||||||
int start_checks();
|
int start_checks();
|
||||||
void health_adjust(struct server *s, short status);
|
void health_adjust(struct server *s, short status);
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include <proto/freq_ctr.h>
|
#include <proto/freq_ctr.h>
|
||||||
|
|
||||||
int srv_downtime(const struct server *s);
|
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 */
|
/* increase the number of cumulated connections on the designated server */
|
||||||
static void inline srv_inc_sess_ctr(struct server *s)
|
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 send_proxy; /* send a PROXY protocol header with checks */
|
||||||
int inter, fastinter, downinter; /* checks: time in milliseconds */
|
int inter, fastinter, downinter; /* checks: time in milliseconds */
|
||||||
int result; /* health-check result : SRV_CHK_* */
|
int result; /* health-check result : SRV_CHK_* */
|
||||||
|
int type; /* Check type, one of PR_O2_*_CHK */
|
||||||
struct server *server; /* back-pointer to server */
|
struct server *server; /* back-pointer to server */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4902,6 +4902,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
|
|||||||
|
|
||||||
newsrv->check.conn->t.sock.fd = -1; /* no check in progress yet */
|
newsrv->check.conn->t.sock.fd = -1; /* no check in progress yet */
|
||||||
newsrv->check.status = HCHK_STATUS_INI;
|
newsrv->check.status = HCHK_STATUS_INI;
|
||||||
|
newsrv->check.type = curproxy->options2 & PR_O2_CHK_ANY;
|
||||||
newsrv->check.server = newsrv;
|
newsrv->check.server = newsrv;
|
||||||
newsrv->state |= SRV_CHECKED;
|
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.
|
* we must restore the good status.
|
||||||
*/
|
*/
|
||||||
if (sv->track->state & SRV_RUNNING) {
|
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 */
|
sv->health = sv->rise; /* up, but will fall down at first failure */
|
||||||
} else {
|
} else {
|
||||||
sv->state &= ~SRV_MAINTAIN;
|
sv->state &= ~SRV_MAINTAIN;
|
||||||
set_server_down(sv);
|
set_server_down(&sv->check);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
set_server_up(sv);
|
set_server_up(&sv->check);
|
||||||
sv->health = sv->rise; /* up, but will fall down at first failure */
|
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)) {
|
if (! (sv->state & SRV_MAINTAIN)) {
|
||||||
/* Not already in maintenance, we can change the server state */
|
/* Not already in maintenance, we can change the server state */
|
||||||
sv->state |= SRV_MAINTAIN;
|
sv->state |= SRV_MAINTAIN;
|
||||||
set_server_down(sv);
|
set_server_down(&sv->check);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
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)) {
|
if ((px->state != PR_STSTOPPED) && !(sv->state & SRV_MAINTAIN)) {
|
||||||
/* Not already in maintenance, we can change the server state */
|
/* Not already in maintenance, we can change the server state */
|
||||||
sv->state |= SRV_MAINTAIN;
|
sv->state |= SRV_MAINTAIN;
|
||||||
set_server_down(sv);
|
set_server_down(&sv->check);
|
||||||
altered_servers++;
|
altered_servers++;
|
||||||
total_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:
|
case ST_ADM_ACTION_ENABLE:
|
||||||
if ((px->state != PR_STSTOPPED) && (sv->state & SRV_MAINTAIN)) {
|
if ((px->state != PR_STSTOPPED) && (sv->state & SRV_MAINTAIN)) {
|
||||||
/* Already in maintenance, we can change the server state */
|
/* 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 */
|
sv->health = sv->rise; /* up, but will fall down at first failure */
|
||||||
altered_servers++;
|
altered_servers++;
|
||||||
total_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;
|
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))
|
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)
|
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…
Reference in New Issue
Block a user