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:
Simon Horman 2013-02-23 15:35:38 +09:00 committed by Willy Tarreau
parent 28b5ffc76f
commit 4a741432be
8 changed files with 263 additions and 254 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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 */
}; };

View File

@ -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;
} }

File diff suppressed because it is too large Load Diff

View File

@ -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;

View File

@ -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++;

View File

@ -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);
} }
/* /*