mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-10 11:11:37 +00:00
MEDIUM: Move proto and addr fields struct check
The motivation for this is to make checks more independent of each other to allow further reuse of their infrastructure. For nowserver->check and server->agent still always use the same values for the addr and proto fields so this patch should not introduce any behavioural changes. Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
bfb5d33fe6
commit
41f5876750
@ -179,6 +179,8 @@ struct check {
|
||||
char **argv; /* the arguments to use if running a process-based check */
|
||||
char **envp; /* the environment to use if running a process-based check */
|
||||
struct pid_list *curpid; /* entry in pid_list used for current process-based test, or -1 if not in test */
|
||||
struct protocol *proto; /* server address protocol for health checks */
|
||||
struct sockaddr_storage addr; /* the address to check, if different from <addr> */
|
||||
};
|
||||
|
||||
struct check_status {
|
||||
|
@ -202,11 +202,6 @@ struct server {
|
||||
|
||||
int puid; /* proxy-unique server ID, used for SNMP, and "first" LB algo */
|
||||
|
||||
struct { /* configuration used by health-check and agent-check */
|
||||
struct protocol *proto; /* server address protocol for health checks */
|
||||
struct sockaddr_storage addr; /* the address to check, if different from <addr> */
|
||||
} check_common;
|
||||
|
||||
struct check check; /* health-check specific configuration */
|
||||
struct check agent; /* agent specific configuration */
|
||||
|
||||
|
14
src/checks.c
14
src/checks.c
@ -1437,18 +1437,18 @@ static int connect_conn_chk(struct task *t)
|
||||
|
||||
/* prepare a new connection */
|
||||
conn_init(conn);
|
||||
conn_prepare(conn, s->check_common.proto, check->xprt);
|
||||
conn_prepare(conn, check->proto, check->xprt);
|
||||
conn_attach(conn, check, &check_conn_cb);
|
||||
conn->target = &s->obj_type;
|
||||
|
||||
/* no client address */
|
||||
clear_addr(&conn->addr.from);
|
||||
|
||||
if (is_addr(&s->check_common.addr)) {
|
||||
if (is_addr(&check->addr)) {
|
||||
|
||||
/* we'll connect to the check addr specified on the server */
|
||||
conn->addr.to = s->check_common.addr;
|
||||
proto = s->check_common.proto;
|
||||
conn->addr.to = check->addr;
|
||||
proto = check->proto;
|
||||
}
|
||||
else {
|
||||
/* we'll connect to the addr on the server */
|
||||
@ -2498,10 +2498,10 @@ static void tcpcheck_main(struct connection *conn)
|
||||
/* no client address */
|
||||
clear_addr(&conn->addr.from);
|
||||
|
||||
if (is_addr(&s->check_common.addr)) {
|
||||
if (is_addr(&check->addr)) {
|
||||
/* we'll connect to the check addr specified on the server */
|
||||
conn->addr.to = s->check_common.addr;
|
||||
proto = s->check_common.proto;
|
||||
conn->addr.to = check->addr;
|
||||
proto = check->proto;
|
||||
}
|
||||
else {
|
||||
/* we'll connect to the addr on the server */
|
||||
|
14
src/server.c
14
src/server.c
@ -901,7 +901,7 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
}
|
||||
|
||||
newsrv->addr = *sk;
|
||||
newsrv->proto = newsrv->check_common.proto = protocol_by_family(newsrv->addr.ss_family);
|
||||
newsrv->proto = newsrv->check.proto = newsrv->agent.proto = protocol_by_family(newsrv->addr.ss_family);
|
||||
newsrv->xprt = newsrv->check.xprt = newsrv->agent.xprt = &raw_sock;
|
||||
|
||||
if (!newsrv->proto) {
|
||||
@ -1109,8 +1109,8 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
goto out;
|
||||
}
|
||||
|
||||
newsrv->check_common.addr = *sk;
|
||||
newsrv->check_common.proto = protocol_by_family(sk->ss_family);
|
||||
newsrv->check.addr = newsrv->agent.addr = *sk;
|
||||
newsrv->check.proto = newsrv->agent.proto = protocol_by_family(sk->ss_family);
|
||||
cur_arg += 2;
|
||||
}
|
||||
else if (!strcmp(args[cur_arg], "port")) {
|
||||
@ -1578,7 +1578,7 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
* same as for the production traffic. Otherwise we use raw_sock by
|
||||
* default, unless one is specified.
|
||||
*/
|
||||
if (!newsrv->check.port && !is_addr(&newsrv->check_common.addr)) {
|
||||
if (!newsrv->check.port && !is_addr(&newsrv->check.addr)) {
|
||||
#ifdef USE_OPENSSL
|
||||
newsrv->check.use_ssl |= (newsrv->use_ssl || (newsrv->proxy->options & PR_O_TCPCHK_SSL));
|
||||
#endif
|
||||
@ -1586,7 +1586,7 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
}
|
||||
/* try to get the port from check_core.addr if check.port not set */
|
||||
if (!newsrv->check.port)
|
||||
newsrv->check.port = get_host_port(&newsrv->check_common.addr);
|
||||
newsrv->check.port = get_host_port(&newsrv->check.addr);
|
||||
|
||||
if (!newsrv->check.port)
|
||||
newsrv->check.port = realport; /* by default */
|
||||
@ -1609,8 +1609,8 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
* be a 'connect' one when checking an IPv4/IPv6 server.
|
||||
*/
|
||||
if (!newsrv->check.port &&
|
||||
(is_inet_addr(&newsrv->check_common.addr) ||
|
||||
(!is_addr(&newsrv->check_common.addr) && is_inet_addr(&newsrv->addr)))) {
|
||||
(is_inet_addr(&newsrv->check.addr) ||
|
||||
(!is_addr(&newsrv->check.addr) && is_inet_addr(&newsrv->addr)))) {
|
||||
struct tcpcheck_rule *n = NULL, *r = NULL;
|
||||
struct list *l;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user