32module AP_MODULE_DECLARE_DATA proxy_balancer_module;
92 "error parsing URL %s: %s",
118 "Looking at %s -> %s initialized?", balancer->
s->
name,
286 "Found value %s for stickysession %s",
295 "Found value %s for stickysession %s",
306 if ((*route) && (**route)) {
319 "Route changed from %s to %s",
320 *route, worker->
s->
route);
337 "%s: Lock failed for find_best_worker()",
351 "%s: Unlock failed for find_best_worker()",
440 ++(*worker)->s->retries;
443 "%s: Forcing recovery for worker (%s:%d)",
444 balancer->
s->
name, (*worker)->s->hostname_ex,
445 (
int)(*worker)->s->port);
454 if (worker->
s->
busy) {
469 const char *sticky =
NULL;
489 "%s: Lock failed for pre_request", (*balancer)->s->name);
504 if ((*balancer)->lbmethod && (*balancer)->lbmethod->updatelbstatus) {
506 (*balancer)->lbmethod->updatelbstatus(*balancer,
runtime,
r->
server);
517 for (
i = 0;
i < (*balancer)->workers->nelts;
i++) {
522 (*workers)->s->lbstatus += (*workers)->s->lbfactor;
533 else if (route && (*balancer)->s->sticky_force) {
542 for (
i = 0;
i < (*balancer)->workers->nelts;
i++) {
543 if (*((*workers)->s->route) &&
strcmp((*workers)->s->route, route) == 0) {
551 "%s: All workers are in error state for route (%s)",
552 (*balancer)->s->name, route);
556 "%s: Unlock failed for pre_request",
557 (*balancer)->s->name);
567 "%s: Unlock failed for pre_request",
568 (*balancer)->s->name);
574 if ((*balancer)->workers->nelts) {
576 "%s: All workers are in error state",
577 (*balancer)->s->name);
580 "%s: No workers in balancer",
581 (*balancer)->s->name);
586 if (*(*balancer)->s->sticky &&
runtime) {
600 (*worker)->
s->
busy++;
606 "BALANCER_NAME", (*balancer)->s->name);
608 "BALANCER_WORKER_NAME", (*worker)->s->name_ex);
610 "BALANCER_WORKER_ROUTE", (*worker)->s->route);
627 "BALANCER_SESSION_STICKY", sticky);
629 "BALANCER_SESSION_ROUTE", route);
632 "%s: worker (%s) rewritten to %s",
633 (*balancer)->s->name, (*worker)->s->name_ex, *
url);
649 "%s: Lock failed for post_request",
662 "%s: Forcing worker (%s) into error state "
663 "due to status code %d matching 'failonstatus' "
664 "balancer parameter",
678 "%s: Forcing worker (%s) into error state "
679 "due to timeout and 'failontimeout' parameter being set",
688 "%s: Unlock failed for post_request", balancer->
s->
name);
692 "proxy_balancer_post_request for (%s)", balancer->
s->
name);
709 (*workers)->s->lbstatus = (*workers)->s->lbfactor = 100;
751 for (sar =
s->addrs; sar; sar = sar->
next) {
762 if (
s->server_hostname) {
764 strlen(
s->server_hostname));
768 for (
i = 0;
i <
s->names->nelts; ++
i) {
774 for (
i = 0;
i <
s->wild_names->nelts; ++
i) {
868 "mod_proxy must be loaded for mod_proxy_balancer");
879 "Failed to lookup provider 'shm' for '%s': is "
880 "mod_slotmem_shm loaded??",
897 void *
sconf =
s->module_config;
998 balancer->
wslot =
new;
1049 ap_rvputs(
r,
"<td><label for='",
name,
"1'>On</label> <input name='",
name,
"' id='",
name,
"1' value='1' type=radio",
NULL);
1052 ap_rvputs(
r,
"> <br/> <label for='",
name,
"0'>Off</label> <input name='",
name,
"' id='",
name,
"0' value='0' type=radio",
NULL);
1083 if (allowed ==
NULL) {
1087 const char **
ok = allowed;
1135 if (
ival >= 100 &&
ival <= 10000) {
1142 if (strlen(
val) && strlen(
val) <
sizeof(
wsel->s->route))
1145 *
wsel->s->route =
'\0';
1148 if (strlen(
val) && strlen(
val) <
sizeof(
wsel->s->redirect))
1151 *
wsel->s->redirect =
'\0';
1212 if (strlen(
val) && strlen(
val) <
sizeof(
wsel->s->hcuri))
1215 *
wsel->s->hcuri =
'\0';
1221 *
wsel->s->hcexpr =
'\0';
1225 *
wsel->s->hcexpr =
'\0';
1229 bsel->s->need_reset = 1;
1238 "settings balancer params");
1240 if ((strlen(
val) < (
sizeof(
bsel->s->lbpname)-1)) &&
1246 bsel->lbmethod = lbmethod;
1248 bsel->s->need_reset = 1;
1266 bsel->s->sticky_force = (
ival != 0);
1269 if (strlen(
val) < (
sizeof(
bsel->s->sticky_path)-1)) {
1270 if (*
val ==
'-' && *(
val+1) ==
'\0')
1271 *
bsel->s->sticky_path = *
bsel->s->sticky =
'\0';
1285 (*
val ==
'1' && *(
val+1) ==
'\0') &&
1294 "%s: Lock failed for adding worker",
1305 "worker slotmem_grab failed");
1309 "%s: Unlock failed for adding worker",
1317 "worker slotmem_dptr failed");
1321 "%s: Unlock failed for adding worker",
1329 "Cannot share worker");
1333 "%s: Unlock failed for adding worker",
1341 "Cannot init worker");
1345 "%s: Unlock failed for adding worker",
1357 "%s: failed to add worker %s",
1367 "%s: Unlock failed for adding worker",
1373 "%s: failed to add worker %s",
1400 "balancer: %s",
name);
1407 "worker: %s",
name);
1412 "balancer: %s",
bsel->s->name);
1439 ap_rputs(
"<?xml version='1.0' encoding='UTF-8' ?>\n",
r);
1440 ap_rputs(
"<httpd:manager xmlns:httpd='http://httpd.apache.org'>\n",
r);
1449 "</httpd:stickysession>\n",
NULL);
1451 " <httpd:nofailover>%s</httpd:nofailover>\n",
1459 " <httpd:maxattempts>%d</httpd:maxattempts>\n",
1463 "</httpd:lbmethod>\n",
NULL);
1466 " <httpd:scolonpathdelim>%s</httpd:scolonpathdelim>\n",
1477 "</httpd:name>\n",
NULL);
1479 "</httpd:scheme>\n",
NULL);
1481 "</httpd:hostname>\n",
NULL);
1482 ap_rprintf(
r,
" <httpd:loadfactor>%.2f</httpd:loadfactor>\n",
1485 " <httpd:port>%d</httpd:port>\n",
1508 " <httpd:recv_buffer_size>%" APR_SIZE_T_FMT "</httpd:recv_buffer_size>\n",
1513 " <httpd:io_buffer_size>%" APR_SIZE_T_FMT "</httpd:io_buffer_size>\n",
1518 " <httpd:keepalive>%s</httpd:keepalive>\n",
1527 "</httpd:error_time>\n",
NULL);
1530 " <httpd:retries>%d</httpd:retries>\n",
1533 " <httpd:lbstatus>%d</httpd:lbstatus>\n",
1536 " <httpd:loadfactor>%.2f</httpd:loadfactor>\n",
1539 " <httpd:transferred>%" APR_OFF_T_FMT "</httpd:transferred>\n",
1549 "</httpd:route>\n",
NULL);
1552 "</httpd:redirect>\n",
NULL);
1575 " <httpd:flushwait>%d</httpd:flushwait>\n",
1586 " <httpd:disablereuse>%s</httpd:disablereuse>\n",
1591 " <httpd:connectiontimeout>%" APR_TIME_T_FMT "</httpd:connectiontimeout>\n",
1612 "<html><head><title>Balancer Manager</title>\n",
r);
1613 ap_rputs(
"<style type='text/css'>\n"
1615 " border-width: 1px;\n"
1616 " border-spacing: 3px;\n"
1617 " border-style: solid;\n"
1618 " border-color: gray;\n"
1619 " border-collapse: collapse;\n"
1620 " background-color: white;\n"
1621 " text-align: center;\n"
1624 " border-width: 1px;\n"
1626 " border-style: dotted;\n"
1627 " border-color: gray;\n"
1628 " background-color: lightgray;\n"
1629 " text-align: center;\n"
1632 " border-width: 1px;\n"
1634 " border-style: dotted;\n"
1635 " border-color: gray;\n"
1636 " background-color: white;\n"
1637 " text-align: center;\n"
1639 "</style>\n</head>\n",
r);
1640 ap_rputs(
"<body><h1>Load Balancer Manager for ",
r);
1648 "be persisted on restart.</dt>",
NULL);
1650 "inherited from main server.</dt>",
NULL);
1652 "inherited from main server.</dt>",
NULL);
1657 ap_rputs(
"<hr />\n<h3>LoadBalancer Status for ",
r);
1660 "&nonce=", balancer->
s->
nonce,
1664 "<th>MaxMembers</th><th>StickySession</th><th>DisableFailover</th><th>Timeout</th><th>FailoverAttempts</th><th>Method</th>"
1665 "<th>Path</th><th>Active</th></tr>\n<tr>",
r);
1690 if (*balancer->
s->
vhost) {
1698 "<th>Worker URL</th>"
1699 "<th>Route</th><th>RouteRedir</th>"
1700 "<th>Factor</th><th>Set</th><th>Status</th>"
1701 "<th>Elected</th><th>Busy</th><th>Load</th><th>To</th><th>From</th>",
r);
1703 ap_rputs(
"<th>HC Method</th><th>HC Interval</th><th>Passes</th><th>Fails</th><th>HC uri</th><th>HC Expr</th>",
r);
1715 "&nonce=", balancer->
s->
nonce,
1753 ap_rputs(
"<h3>Edit worker settings for ",
r);
1755 ap_rputs(
"<form method='POST' enctype='application/x-www-form-urlencoded' action=\"",
r);
1757 ap_rputs(
"<table><tr><td>Load factor:</td><td><input name='w_lf' id='w_lf' type=text ",
r);
1758 ap_rprintf(
r,
"value='%.2f'></td></tr>\n", (
float)(
wsel->s->lbfactor)/100.0);
1759 ap_rputs(
"<tr><td>LB Set:</td><td><input name='w_ls' id='w_ls' type=text ",
r);
1761 ap_rputs(
"<tr><td>Route:</td><td><input name='w_wr' id='w_wr' type=text ",
r);
1765 ap_rputs(
"<tr><td>Route Redirect:</td><td><input name='w_rr' id='w_rr' type=text ",
r);
1771 "<th>Ignore Errors</th>"
1772 "<th>Draining Mode</th>"
1774 "<th>Hot Standby</th>"
1775 "<th>Hot Spare</th>",
r);
1779 ap_rputs(
"<th>Stopped</th></tr>\n<tr>",
r);
1789 ap_rputs(
"</tr></table></td></tr>\n",
r);
1792 ap_rputs(
"<tr><td colspan='2'>\n<table align='center'><tr><th>Health Check param</th><th>Value</th></tr>\n",
r);
1793 ap_rputs(
"<tr><td>Method</td><td><select name='w_hm'>\n",
r);
1795 if (
method->implemented) {
1796 ap_rprintf(
r,
"<option value='%s' %s >%s</option>\n",
1798 (
wsel->s->method ==
method->method) ?
"selected" :
"",
1803 ap_rputs(
"<tr><td>Expr</td><td><select name='w_he'>\n",
r);
1806 ap_rprintf(
r,
"<tr><td>Interval (ms)</td><td><input name='w_hi' id='w_hi' type='text' "
1808 ap_rprintf(
r,
"<tr><td>Passes trigger</td><td><input name='w_hp' id='w_hp' type='text' "
1809 "value='%d'></td></tr>\n",
wsel->s->passes);
1810 ap_rprintf(
r,
"<tr><td>Fails trigger)</td><td><input name='w_hf' id='w_hf' type='text' "
1811 "value='%d'></td></tr>\n",
wsel->s->fails);
1812 ap_rprintf(
r,
"<tr><td>HC uri</td><td><input name='w_hu' id='w_hu' type='text' "
1816 ap_rputs(
"<tr><td colspan='2'><input type=submit value='Submit'></td></tr>\n",
r);
1817 ap_rvputs(
r,
"</table>\n<input type=hidden name='w' id='w' ",
NULL);
1822 ap_rvputs(
r,
"<input type=hidden name='nonce' id='nonce' value='",
1830 ap_rputs(
"<h3>Edit balancer settings for ",
r);
1832 ap_rputs(
"<form method='POST' enctype='application/x-www-form-urlencoded' action=\"",
r);
1838 ap_rputs(
"<td>\n<select name='b_lbm' id='b_lbm'>",
r);
1840 for (
i = 0;
i <
provs->nelts;
i++, pname++) {
1848 ap_rputs(
"<tr><td>Timeout:</td><td><input name='b_tmo' id='b_tmo' type=text ",
r);
1850 ap_rputs(
"<tr><td>Failover Attempts:</td><td><input name='b_max' id='b_max' type=text ",
r);
1852 ap_rputs(
"<tr><td>Disable Failover:</td>",
r);
1855 ap_rputs(
"<tr><td>Sticky Session:</td><td><input name='b_ss' id='b_ss' size=64 type=text ",
r);
1863 ap_rputs(
"\"> (Use '-' to delete)</td></tr>\n",
r);
1865 ap_rputs(
"<tr><td>Add New Worker:</td><td><input name='b_nwrkr' id='b_nwrkr' size=32 type=text>"
1866 " Are you sure? <input name='b_wyes' id='b_wyes' type=checkbox value='1'>"
1869 ap_rputs(
"<tr><td colspan=2><input type=submit value='Submit'></td></tr>\n",
r);
1870 ap_rvputs(
r,
"</table>\n<input type=hidden name='b' id='b' ",
NULL);
1873 ap_rvputs(
r,
"<input type=hidden name='nonce' id='nonce' value='",
1900 const char *
name, *ref;
1924 "%s: Lock failed for balancer_handler",
1932 "%s: Unlock failed for balancer_handler",
1939 const char *allowed[] = {
"w",
"b",
"nonce",
"xml",
NULL };
1965 "ignoring params in balancer-manager cross-site access %s: %s", ref,
ap_get_server_name(
r));
2007 void *
sconf =
s->module_config;
2027 "Failed to init balancer %s in child",
2044 static const char *
const aszPred[] = {
"mpm_winnt.c",
"mod_slotmem_shm.c",
NULL};
2045 static const char *
const aszPred2[] = {
"mod_proxy.c",
NULL};
ap hook functions and macros
Apache Multi-Processing Module library.
const char apr_size_t len
char * strstr(char *s1, char *s2)
APR Versioning Interface.
static apr_pool_t * pconf
#define ap_get_module_config(v, m)
void ap_hook_post_config(ap_HOOK_post_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_DECLARE_MODULE(foo)
void ap_hook_handler(ap_HOOK_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
request_rec int int apr_table_t const char * path
void ap_hook_child_init(ap_HOOK_child_init_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
const char * ap_get_server_built(void)
const char * ap_get_server_description(void)
apr_status_t ap_get_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
#define AP_SQ_MS_CREATE_PRE_CONFIG
int ap_state_query(int query_code)
const char * ap_get_server_name(request_rec *r)
char * ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r)
const unsigned char * buf
apr_status_t ap_global_mutex_create(apr_global_mutex_t **mutex, const char **name, const char *type, const char *instance_id, server_rec *server, apr_pool_t *pool, apr_int32_t options)
apr_status_t ap_mutex_register(apr_pool_t *pconf, const char *type, const char *default_dir, apr_lockmech_e default_mech, apr_int32_t options)
int int ap_rflush(request_rec *r)
int ap_rvputs(request_rec *r,...)
int ap_map_http_request_error(apr_status_t rv, int status)
int ap_rprintf(request_rec *r, const char *fmt,...) __attribute__((format(printf
static APR_INLINE int ap_rputs(const char *str, request_rec *r)
void ap_set_content_type_ex(request_rec *r, const char *ct, int trusted)
void ap_set_content_type(request_rec *r, const char *ct)
apr_array_header_t * ap_list_provider_names(apr_pool_t *pool, const char *provider_group, const char *provider_version)
void * ap_lookup_provider(const char *provider_group, const char *provider_name, const char *provider_version)
const char apr_port_t port
#define APR_MD5_DIGESTSIZE
apr_pool_t const char * params
#define APR_RETRIEVE_OPTIONAL_FN(name)
#define APR_OPTIONAL_FN_TYPE(name)
#define APR_REGISTER_OPTIONAL_FN(name)
#define HTTP_SERVICE_UNAVAILABLE
#define HTTP_INTERNAL_SERVER_ERROR
#define AP_SLOTMEM_TYPE_PERSIST
unsigned int ap_slotmem_type_t
#define AP_SLOTMEM_TYPE_CLEARINUSE
#define AP_SLOTMEM_PROVIDER_GROUP
#define AP_SLOTMEM_PROVIDER_VERSION
#define PROXY_WORKER_IS_USABLE(f)
#define PROXY_WORKER_DRAIN_FLAG
void proxy_hook_pre_request(proxy_HOOK_pre_request_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
apr_status_t ap_proxy_set_wstatus(char c, int set, proxy_worker *w)
#define PROXY_WORKER_DISABLED_FLAG
#define PROXY_WORKER_STOPPED
#define PROXY_STRNCPY(dst, src)
char * ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp, char **passwordp, char **hostp, apr_port_t *port)
#define PROXY_GLOBAL_LOCK(x)
#define PROXY_WORKER_IN_ERROR
#define PROXY_WORKER_HC_FAIL
#define PROXY_WORKER_HOT_SPARE_FLAG
proxy_worker * ap_proxy_get_worker(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url)
#define PROXY_WORKER_IGNORE_ERRORS
char * ap_proxy_define_worker(apr_pool_t *p, proxy_worker **worker, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, int do_malloc)
#define PROXY_COPY_CONF_PARAMS(w, c)
proxy_worker_shared * ap_proxy_find_workershm(ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_worker *worker, unsigned int *index)
#define PROXY_THREAD_LOCK(x)
#define PROXY_WORKER_IGNORE_ERRORS_FLAG
#define PROXY_WORKER_STOPPED_FLAG
#define PROXY_WORKER_HOT_STANDBY
proxy_balancer * ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, const char *url, int careactive)
#define PROXY_THREAD_UNLOCK(x)
#define ALIGNED_PROXY_BALANCER_SHARED_SIZE
#define PROXY_WORKER_HOT_SPARE
#define ALIGNED_PROXY_WORKER_SHARED_SIZE
apr_status_t ap_proxy_share_worker(proxy_worker *worker, proxy_worker_shared *shm, int i)
#define PROXY_WORKER_IS(f, b)
char * ap_proxy_parse_wstatus(apr_pool_t *p, proxy_worker *w)
apr_status_t ap_proxy_sync_balancer(proxy_balancer *b, server_rec *s, proxy_server_conf *conf)
proxy_balancer_shared * ap_proxy_find_balancershm(ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_balancer *balancer, unsigned int *index)
void proxy_hook_canon_handler(proxy_HOOK_canon_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
apr_status_t ap_proxy_share_balancer(proxy_balancer *balancer, proxy_balancer_shared *shm, int i)
unsigned int ap_proxy_hashfunc(const char *str, proxy_hash_t method)
const char * ap_proxy_show_hcmethod(hcmethod_t method)
void proxy_hook_post_request(proxy_HOOK_post_request_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
apr_status_t ap_proxy_initialize_worker(proxy_worker *worker, server_rec *s, apr_pool_t *p)
#define PROXY_WORKER_HOT_STANDBY_FLAG
apr_status_t ap_proxy_initialize_balancer(proxy_balancer *balancer, server_rec *s, apr_pool_t *p)
#define PROXY_WORKER_DRAIN
#define PROXY_WORKER_HC_FAIL_FLAG
#define PROXY_WORKER_IS_INITIALIZED(f)
#define PROXY_WORKER_DISABLED
proxy_hcmethods_t proxy_hcmethods[]
#define PROXY_WORKER_IS_STANDBY(f)
char * ap_proxy_worker_name(apr_pool_t *p, proxy_worker *worker)
#define PROXY_GLOBAL_UNLOCK(x)
#define STANDARD20_MODULE_STUFF
int ap_cstr_casecmp(const char *s1, const char *s2)
const char * ap_psignature(const char *prefix, request_rec *r)
#define ap_escape_uri(ppool, path)
#define ap_strstr_c(s, c)
void ap_bin2hex(const void *src, apr_size_t srclen, char *dest)
#define ap_strchr_c(s, c)
#define AP_DEBUG_ASSERT(exp)
int ap_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
#define ap_escape_html(p, s)
int ap_unescape_url(char *url)
apr_status_t ap_pstr2_alnum(apr_pool_t *p, const char *src, const char **dest)
apr_status_t ap_timeout_parameter_parse(const char *timeout_parameter, apr_interval_time_t *timeout, const char *default_time_unit)
const char int apr_pool_t * pool
const char apr_int32_t flag
int strcasecmp(const char *a, const char *b)
#define APR_HASH_KEY_STRING
const char apr_uint32_t * id
apr_uint32_t apr_pool_t apr_uint32_t apr_pollset_method_e method
apr_interval_time_t apr_int32_t * num
#define apr_pcalloc(p, size)
#define APR_ARRAY_PUSH(ary, type)
#define APR_ARRAY_IDX(ary, i, type)
apr_int32_t apr_int32_t apr_int32_t err
const char const char *const * args
#define apr_time_msec(time)
#define apr_time_as_msec(time)
#define APR_RFC822_DATE_LEN
apr_int64_t apr_interval_time_t
#define apr_time_sec(time)
#define apr_time_from_sec(sec)
static struct h2_workers * workers
Proxy Extension Module for Apache.
static void balancer_display_page(request_rec *r, proxy_server_conf *conf, proxy_balancer *bsel, proxy_worker *wsel, int usexml)
static apr_OFN_hc_select_exprs_t * hc_select_exprs_f
static int proxy_balancer_post_request(proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
static void push2table(const char *input, apr_table_t *params, const char *allowed[], apr_pool_t *p)
static int balancer_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static char * get_path_param(apr_pool_t *pool, char *url, const char *name, int scolon_sep)
static apr_OFN_set_worker_hc_param_t * set_worker_hc_param_f
static int safe_referer(request_rec *r, const char *ref)
static proxy_worker * find_route_worker(proxy_balancer *balancer, const char *route, request_rec *r, int recursion)
static proxy_worker * find_best_worker(proxy_balancer *balancer, request_rec *r)
static int proxy_balancer_canon(request_rec *r, char *url)
static char * get_cookie_param(request_rec *r, const char *name)
static apr_array_header_t * make_servers_ids(server_rec *main_s, apr_pool_t *p)
static void ap_proxy_balancer_register_hook(apr_pool_t *p)
ap_slotmem_provider_t * storage
static void recalc_factors(proxy_balancer *balancer)
static int balancer_process_balancer_worker(request_rec *r, proxy_server_conf *conf, proxy_balancer *bsel, proxy_worker *wsel, apr_table_t *params)
static void create_radio(const char *name, unsigned int flag, request_rec *r)
static int proxy_balancer_pre_request(proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
static apr_OFN_hc_valid_expr_t * hc_valid_expr_f
static void init_balancer_members(apr_pool_t *p, server_rec *s, proxy_balancer *balancer)
static int balancer_handler(request_rec *r)
static apr_status_t decrement_busy_count(void *worker_)
static int balancer_fixup(request_rec *r, proxy_worker *worker, char **url)
static const char * balancer_mutex_type
static apr_status_t lock_remove(void *data)
static const char * make_server_id(server_rec *s, apr_pool_t *p, int full)
static void force_recovery(proxy_balancer *balancer, server_rec *s)
static apr_OFN_hc_show_exprs_t * hc_show_exprs_f
static void balancer_child_init(apr_pool_t *p, server_rec *s)
static proxy_worker * find_session_route(proxy_balancer *balancer, request_rec *r, char **route, const char **sticky_used, char **url)
static int balancer_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
static int(* ap_proxy_retry_worker_fn)(const char *proxy_function, proxy_worker *worker, server_rec *s)
static apr_status_t balancer_manage(request_rec *r, apr_table_t *params)
static void hc_show_exprs(request_rec *r)
static int hc_valid_expr(request_rec *r, const char *expr)
static const char * set_worker_hc_param(apr_pool_t *p, server_rec *s, proxy_worker *worker, const char *key, const char *val, void *v)
static void hc_select_exprs(request_rec *r, const char *expr)
Watchdog module for Apache.
int ap_proxy_canon_url(request_rec *r)
static int ap_proxy_retry_worker(const char *proxy_function, proxy_worker *worker, server_rec *s)
Internal interfaces private to mod_proxy.
Apache scoreboard library.
const char * provider_name
apr_status_t(* create)(ap_slotmem_instance_t **inst, const char *name, apr_size_t item_size, unsigned int item_num, ap_slotmem_type_t type, apr_pool_t *pool)
unsigned int(* num_free_slots)(ap_slotmem_instance_t *s)
apr_status_t(* fgrab)(ap_slotmem_instance_t *s, unsigned int item_id)
apr_status_t(* dptr)(ap_slotmem_instance_t *s, unsigned int item_id, void **mem)
apr_status_t(* grab)(ap_slotmem_instance_t *s, unsigned int *item_id)
apr_status_t(* attach)(ap_slotmem_instance_t **inst, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool)
struct apr_bucket_alloc_t * bucket_alloc
proxy_worker *(* finder)(proxy_balancer *balancer, request_rec *r)
unsigned int forcerecovery
unsigned int max_attempts_set
unsigned int sticky_force
apr_interval_time_t timeout
ap_slotmem_instance_t * wslot
proxy_balancer_shared * s
ap_slotmem_provider_t * storage
apr_array_header_t * errstatuses
apr_global_mutex_t * gmutex
proxy_balancer_method * lbmethod
apr_array_header_t * workers
ap_slotmem_provider_t * storage
apr_array_header_t * balancers
ap_slotmem_instance_t * bslot
unsigned int conn_timeout_set
apr_size_t recv_buffer_size
apr_interval_time_t timeout
apr_interval_time_t retry
unsigned int ping_timeout_set
unsigned int disablereuse_set
enum proxy_worker_shared::@35 flush_packets
unsigned int io_buffer_size_set
unsigned int keepalive_set
apr_size_t io_buffer_size
apr_interval_time_t interval
apr_interval_time_t conn_timeout
apr_interval_time_t ping_timeout
unsigned int recv_buffer_size_set
unsigned int disablereuse
apr_interval_time_t acquire
A structure that represents the current request.
struct ap_filter_t * input_filters
apr_table_t * subprocess_env
A structure to be used for Per-vhost config.
apr_sockaddr_t * host_addr
A structure to store information for each virtual server.
struct ap_conf_vector_t * module_config
apr_status_t apr_rfc822_date(char *date_str, apr_time_t t)
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray