mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-15 16:04:37 +00:00
201c07f681
This patch is a major upgrade of the internal run-time DNS resolver in HAProxy and it brings the following 2 main changes: 1. DNS resolution task Up to now, DNS resolution was triggered by the health check task. From now, DNS resolution task is autonomous. It is started by HAProxy right after the scheduler is available and it is woken either when a network IO occurs for one of its nameserver or when a timeout is matched. From now, this means we can enable DNS resolution for a server without enabling health checking. 2. Introduction of a dns_requester structure Up to now, DNS resolution was purposely made for resolving server hostnames. The idea, is to ensure that any HAProxy internal object should be able to trigger a DNS resolution. For this purpose, 2 things has to be done: - clean up the DNS code from the server structure (this was already quite clean actually) and clean up the server's callbacks from manipulating too much DNS resolution - create an agnostic structure which allows linking a DNS resolution and a requester of any type (using obj_type enum) 3. Manage requesters through queues Up to now, there was an uniq relationship between a resolution and it's owner (aka the requester now). It's a shame, because in some cases, multiple objects may share the same hostname and may benefit from a resolution being performed by a third party. This patch introduces the notion of queues, which are basically lists of either currently running resolution or waiting ones. The resolutions are now available as a pool, which belongs to the resolvers. The pool has has a default size of 64 resolutions per resolvers and is allocated at configuration parsing.
65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
/*
|
|
include/proto/checks.h
|
|
Functions prototypes for the checks.
|
|
|
|
Copyright (C) 2000-2009 Willy Tarreau - w@1wt.eu
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation, version 2.1
|
|
exclusively.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _PROTO_CHECKS_H
|
|
#define _PROTO_CHECKS_H
|
|
|
|
#include <types/task.h>
|
|
#include <common/config.h>
|
|
|
|
const char *get_check_status_description(short check_status);
|
|
const char *get_check_status_info(short check_status);
|
|
void __health_adjust(struct server *s, short status);
|
|
|
|
extern struct data_cb check_conn_cb;
|
|
|
|
/* Use this one only. This inline version only ensures that we don't
|
|
* call the function when the observe mode is disabled.
|
|
*/
|
|
static inline void health_adjust(struct server *s, short status)
|
|
{
|
|
/* return now if observing nor health check is not enabled */
|
|
if (!s->observe || !s->check.task)
|
|
return;
|
|
|
|
return __health_adjust(s, status);
|
|
}
|
|
|
|
const char *init_check(struct check *check, int type);
|
|
void free_check(struct check *check);
|
|
|
|
void send_email_alert(struct server *s, int priority, const char *format, ...)
|
|
__attribute__ ((format(printf, 3, 4)));
|
|
int srv_check_healthcheck_port(struct check *chk);
|
|
|
|
/* Declared here, but the definitions are in flt_spoe.c */
|
|
int spoe_prepare_healthcheck_request(char **req, int *len);
|
|
int spoe_handle_healthcheck_response(char *frame, size_t size, char *err, int errlen);
|
|
|
|
#endif /* _PROTO_CHECKS_H */
|
|
|
|
/*
|
|
* Local variables:
|
|
* c-indent-level: 8
|
|
* c-basic-offset: 8
|
|
* End:
|
|
*/
|