/src/haproxy/include/haproxy/backend.h
Line | Count | Source |
1 | | /* |
2 | | * include/haproxy/backend.h |
3 | | * Functions prototypes for the backend. |
4 | | * |
5 | | * Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu |
6 | | * |
7 | | * This library is free software; you can redistribute it and/or |
8 | | * modify it under the terms of the GNU Lesser General Public |
9 | | * License as published by the Free Software Foundation, version 2.1 |
10 | | * exclusively. |
11 | | * |
12 | | * This library is distributed in the hope that it will be useful, |
13 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | | * Lesser General Public License for more details. |
16 | | * |
17 | | * You should have received a copy of the GNU Lesser General Public |
18 | | * License along with this library; if not, write to the Free Software |
19 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 | | */ |
21 | | |
22 | | #ifndef _HAPROXY_BACKEND_H |
23 | | #define _HAPROXY_BACKEND_H |
24 | | |
25 | | #include <haproxy/api.h> |
26 | | #include <haproxy/backend-t.h> |
27 | | #include <haproxy/clock.h> |
28 | | #include <haproxy/proxy-t.h> |
29 | | #include <haproxy/server-t.h> |
30 | | #include <haproxy/stream-t.h> |
31 | | #include <haproxy/time.h> |
32 | | |
33 | | extern struct list lb_ops_list; |
34 | | |
35 | | void lb_ops_register(struct lb_ops *ops); |
36 | | |
37 | | struct server *get_server_sh(struct proxy *px, const char *addr, int len, const struct server *avoid); |
38 | | struct server *get_server_uh(struct proxy *px, char *uri, int uri_len, const struct server *avoid); |
39 | | struct server *get_server_ph(struct proxy *px, const char *uri, int uri_len, const struct server *avoid); |
40 | | struct server *get_server_ph_post(struct stream *s, const struct server *avoid); |
41 | | struct server *get_server_hh(struct stream *s, const struct server *avoid); |
42 | | struct server *get_server_rch(struct stream *s, const struct server *avoid); |
43 | | struct server *get_server_expr(struct stream *s, const struct server *avoid); |
44 | | struct server *get_server_rnd(struct stream *s, const struct server *avoid); |
45 | | |
46 | | int assign_server(struct stream *s); |
47 | | int assign_server_address(struct stream *s); |
48 | | int assign_server_and_queue(struct stream *s); |
49 | | int alloc_bind_address(struct sockaddr_storage **ss, |
50 | | struct server *srv, struct proxy *be, |
51 | | struct stream *s); |
52 | | |
53 | | int be_reuse_mode(const struct proxy *be, const struct server *srv); |
54 | | |
55 | | int64_t be_calculate_conn_hash(struct server *srv, struct stream *strm, |
56 | | struct session *sess, |
57 | | struct sockaddr_storage *src, |
58 | | struct sockaddr_storage *dst, |
59 | | struct ist name); |
60 | | int be_reuse_connection(int64_t hash, struct session *sess, |
61 | | struct proxy *be, struct server *srv, |
62 | | struct stconn *sc, enum obj_type *target, int not_first_req); |
63 | | |
64 | | int srv_redispatch_connect(struct stream *t); |
65 | | void back_try_conn_req(struct stream *s); |
66 | | void back_handle_st_req(struct stream *s); |
67 | | void back_handle_st_con(struct stream *s); |
68 | | void back_handle_st_rdy(struct stream *s); |
69 | | void back_handle_st_cer(struct stream *s); |
70 | | |
71 | | const char *backend_lb_algo_str(int algo); |
72 | | int backend_parse_balance(const char **args, char **err, struct proxy *curproxy); |
73 | | int tcp_persist_rdp_cookie(struct stream *s, struct channel *req, int an_bit); |
74 | | |
75 | | int be_downtime(struct proxy *px); |
76 | | int be_supports_dynamic_srv(struct proxy *px, char **msg); |
77 | | void recount_servers(struct proxy *px); |
78 | | void update_backend_weight(struct proxy *px); |
79 | | |
80 | | /* Returns number of usable servers in backend */ |
81 | | static inline int be_usable_srv(struct proxy *be) |
82 | 0 | { |
83 | 0 | if (be->flags & PR_FL_DISABLED) |
84 | 0 | return 0; |
85 | 0 | else if (be->srv_act) |
86 | 0 | return be->srv_act; |
87 | 0 | else if (be->lbprm.fbck) |
88 | 0 | return 1; |
89 | 0 | else |
90 | 0 | return be->srv_bck; |
91 | 0 | } Unexecuted instantiation: debug.c:be_usable_srv Unexecuted instantiation: fd.c:be_usable_srv Unexecuted instantiation: haproxy.c:be_usable_srv Unexecuted instantiation: http_htx.c:be_usable_srv Unexecuted instantiation: limits.c:be_usable_srv Unexecuted instantiation: listener.c:be_usable_srv Unexecuted instantiation: log.c:be_usable_srv Unexecuted instantiation: mworker.c:be_usable_srv Unexecuted instantiation: peers.c:be_usable_srv Unexecuted instantiation: pool.c:be_usable_srv Unexecuted instantiation: proto_sockpair.c:be_usable_srv Unexecuted instantiation: proxy.c:be_usable_srv Unexecuted instantiation: resolvers.c:be_usable_srv Unexecuted instantiation: ring.c:be_usable_srv Unexecuted instantiation: sample.c:be_usable_srv Unexecuted instantiation: server.c:be_usable_srv Unexecuted instantiation: session.c:be_usable_srv Unexecuted instantiation: sink.c:be_usable_srv Unexecuted instantiation: sock.c:be_usable_srv Unexecuted instantiation: stats-proxy.c:be_usable_srv Unexecuted instantiation: stats.c:be_usable_srv Unexecuted instantiation: stconn.c:be_usable_srv Unexecuted instantiation: stick_table.c:be_usable_srv Unexecuted instantiation: stream.c:be_usable_srv Unexecuted instantiation: sym.c:be_usable_srv Unexecuted instantiation: tcp_rules.c:be_usable_srv Unexecuted instantiation: tcpcheck.c:be_usable_srv Unexecuted instantiation: thread.c:be_usable_srv Unexecuted instantiation: tools.c:be_usable_srv Unexecuted instantiation: trace.c:be_usable_srv Unexecuted instantiation: vars.c:be_usable_srv Unexecuted instantiation: activity.c:be_usable_srv Unexecuted instantiation: applet.c:be_usable_srv Unexecuted instantiation: backend.c:be_usable_srv Unexecuted instantiation: cfgparse-listen.c:be_usable_srv Unexecuted instantiation: cfgparse.c:be_usable_srv Unexecuted instantiation: channel.c:be_usable_srv Unexecuted instantiation: check.c:be_usable_srv Unexecuted instantiation: cli.c:be_usable_srv Unexecuted instantiation: connection.c:be_usable_srv Unexecuted instantiation: dns.c:be_usable_srv Unexecuted instantiation: dns_ring.c:be_usable_srv Unexecuted instantiation: errors.c:be_usable_srv Unexecuted instantiation: extcheck.c:be_usable_srv Unexecuted instantiation: filters.c:be_usable_srv Unexecuted instantiation: flt_bwlim.c:be_usable_srv Unexecuted instantiation: flt_decomp.c:be_usable_srv Unexecuted instantiation: flt_http_comp.c:be_usable_srv Unexecuted instantiation: flt_spoe.c:be_usable_srv Unexecuted instantiation: flt_trace.c:be_usable_srv Unexecuted instantiation: frontend.c:be_usable_srv Unexecuted instantiation: haterm.c:be_usable_srv Unexecuted instantiation: http_ana.c:be_usable_srv Unexecuted instantiation: http_ext.c:be_usable_srv Unexecuted instantiation: http_fetch.c:be_usable_srv Unexecuted instantiation: http_rules.c:be_usable_srv Unexecuted instantiation: lb_chash.c:be_usable_srv Unexecuted instantiation: lb_fas.c:be_usable_srv Unexecuted instantiation: lb_fwlc.c:be_usable_srv Unexecuted instantiation: lb_fwrr.c:be_usable_srv Unexecuted instantiation: lb_map.c:be_usable_srv Unexecuted instantiation: lb_ss.c:be_usable_srv Unexecuted instantiation: pattern.c:be_usable_srv Unexecuted instantiation: payload.c:be_usable_srv Unexecuted instantiation: proto_rhttp.c:be_usable_srv Unexecuted instantiation: queue.c:be_usable_srv Unexecuted instantiation: stats-html.c:be_usable_srv Unexecuted instantiation: stats-json.c:be_usable_srv Unexecuted instantiation: cache.c:be_usable_srv Unexecuted instantiation: cfgparse-global.c:be_usable_srv Unexecuted instantiation: compression.c:be_usable_srv Unexecuted instantiation: fcgi-app.c:be_usable_srv Unexecuted instantiation: proto_tcp.c:be_usable_srv |
92 | | |
93 | | /* Returns true if <be> backend can be used as target to a switching rules. */ |
94 | | static inline int be_is_eligible(const struct proxy *be) |
95 | 0 | { |
96 | | /* A disabled or unpublished backend cannot be selected for traffic. |
97 | | * Note that STOPPED state is ignored as there is a risk of breaking |
98 | | * requests during soft-stop. |
99 | | */ |
100 | 0 | return !(be->flags & (PR_FL_DISABLED|PR_FL_BE_UNPUBLISHED)); |
101 | 0 | } Unexecuted instantiation: debug.c:be_is_eligible Unexecuted instantiation: fd.c:be_is_eligible Unexecuted instantiation: haproxy.c:be_is_eligible Unexecuted instantiation: http_htx.c:be_is_eligible Unexecuted instantiation: limits.c:be_is_eligible Unexecuted instantiation: listener.c:be_is_eligible Unexecuted instantiation: log.c:be_is_eligible Unexecuted instantiation: mworker.c:be_is_eligible Unexecuted instantiation: peers.c:be_is_eligible Unexecuted instantiation: pool.c:be_is_eligible Unexecuted instantiation: proto_sockpair.c:be_is_eligible Unexecuted instantiation: proxy.c:be_is_eligible Unexecuted instantiation: resolvers.c:be_is_eligible Unexecuted instantiation: ring.c:be_is_eligible Unexecuted instantiation: sample.c:be_is_eligible Unexecuted instantiation: server.c:be_is_eligible Unexecuted instantiation: session.c:be_is_eligible Unexecuted instantiation: sink.c:be_is_eligible Unexecuted instantiation: sock.c:be_is_eligible Unexecuted instantiation: stats-proxy.c:be_is_eligible Unexecuted instantiation: stats.c:be_is_eligible Unexecuted instantiation: stconn.c:be_is_eligible Unexecuted instantiation: stick_table.c:be_is_eligible Unexecuted instantiation: stream.c:be_is_eligible Unexecuted instantiation: sym.c:be_is_eligible Unexecuted instantiation: tcp_rules.c:be_is_eligible Unexecuted instantiation: tcpcheck.c:be_is_eligible Unexecuted instantiation: thread.c:be_is_eligible Unexecuted instantiation: tools.c:be_is_eligible Unexecuted instantiation: trace.c:be_is_eligible Unexecuted instantiation: vars.c:be_is_eligible Unexecuted instantiation: activity.c:be_is_eligible Unexecuted instantiation: applet.c:be_is_eligible Unexecuted instantiation: backend.c:be_is_eligible Unexecuted instantiation: cfgparse-listen.c:be_is_eligible Unexecuted instantiation: cfgparse.c:be_is_eligible Unexecuted instantiation: channel.c:be_is_eligible Unexecuted instantiation: check.c:be_is_eligible Unexecuted instantiation: cli.c:be_is_eligible Unexecuted instantiation: connection.c:be_is_eligible Unexecuted instantiation: dns.c:be_is_eligible Unexecuted instantiation: dns_ring.c:be_is_eligible Unexecuted instantiation: errors.c:be_is_eligible Unexecuted instantiation: extcheck.c:be_is_eligible Unexecuted instantiation: filters.c:be_is_eligible Unexecuted instantiation: flt_bwlim.c:be_is_eligible Unexecuted instantiation: flt_decomp.c:be_is_eligible Unexecuted instantiation: flt_http_comp.c:be_is_eligible Unexecuted instantiation: flt_spoe.c:be_is_eligible Unexecuted instantiation: flt_trace.c:be_is_eligible Unexecuted instantiation: frontend.c:be_is_eligible Unexecuted instantiation: haterm.c:be_is_eligible Unexecuted instantiation: http_ana.c:be_is_eligible Unexecuted instantiation: http_ext.c:be_is_eligible Unexecuted instantiation: http_fetch.c:be_is_eligible Unexecuted instantiation: http_rules.c:be_is_eligible Unexecuted instantiation: lb_chash.c:be_is_eligible Unexecuted instantiation: lb_fas.c:be_is_eligible Unexecuted instantiation: lb_fwlc.c:be_is_eligible Unexecuted instantiation: lb_fwrr.c:be_is_eligible Unexecuted instantiation: lb_map.c:be_is_eligible Unexecuted instantiation: lb_ss.c:be_is_eligible Unexecuted instantiation: pattern.c:be_is_eligible Unexecuted instantiation: payload.c:be_is_eligible Unexecuted instantiation: proto_rhttp.c:be_is_eligible Unexecuted instantiation: queue.c:be_is_eligible Unexecuted instantiation: stats-html.c:be_is_eligible Unexecuted instantiation: stats-json.c:be_is_eligible Unexecuted instantiation: cache.c:be_is_eligible Unexecuted instantiation: cfgparse-global.c:be_is_eligible Unexecuted instantiation: compression.c:be_is_eligible Unexecuted instantiation: fcgi-app.c:be_is_eligible Unexecuted instantiation: proto_tcp.c:be_is_eligible |
102 | | |
103 | | /* set the time of last session on the backend */ |
104 | | static inline void be_set_sess_last(struct proxy *be) |
105 | 0 | { |
106 | 0 | uint now_sec = ns_to_sec(now_ns); |
107 | |
|
108 | 0 | if (be->be_counters.shared.tg) |
109 | 0 | if (HA_ATOMIC_LOAD(&be->be_counters.shared.tg[tgid - 1]->last_sess) != now_sec) |
110 | 0 | HA_ATOMIC_STORE(&be->be_counters.shared.tg[tgid - 1]->last_sess, now_sec); |
111 | 0 | } Unexecuted instantiation: debug.c:be_set_sess_last Unexecuted instantiation: fd.c:be_set_sess_last Unexecuted instantiation: haproxy.c:be_set_sess_last Unexecuted instantiation: http_htx.c:be_set_sess_last Unexecuted instantiation: limits.c:be_set_sess_last Unexecuted instantiation: listener.c:be_set_sess_last Unexecuted instantiation: log.c:be_set_sess_last Unexecuted instantiation: mworker.c:be_set_sess_last Unexecuted instantiation: peers.c:be_set_sess_last Unexecuted instantiation: pool.c:be_set_sess_last Unexecuted instantiation: proto_sockpair.c:be_set_sess_last Unexecuted instantiation: proxy.c:be_set_sess_last Unexecuted instantiation: resolvers.c:be_set_sess_last Unexecuted instantiation: ring.c:be_set_sess_last Unexecuted instantiation: sample.c:be_set_sess_last Unexecuted instantiation: server.c:be_set_sess_last Unexecuted instantiation: session.c:be_set_sess_last Unexecuted instantiation: sink.c:be_set_sess_last Unexecuted instantiation: sock.c:be_set_sess_last Unexecuted instantiation: stats-proxy.c:be_set_sess_last Unexecuted instantiation: stats.c:be_set_sess_last Unexecuted instantiation: stconn.c:be_set_sess_last Unexecuted instantiation: stick_table.c:be_set_sess_last Unexecuted instantiation: stream.c:be_set_sess_last Unexecuted instantiation: sym.c:be_set_sess_last Unexecuted instantiation: tcp_rules.c:be_set_sess_last Unexecuted instantiation: tcpcheck.c:be_set_sess_last Unexecuted instantiation: thread.c:be_set_sess_last Unexecuted instantiation: tools.c:be_set_sess_last Unexecuted instantiation: trace.c:be_set_sess_last Unexecuted instantiation: vars.c:be_set_sess_last Unexecuted instantiation: activity.c:be_set_sess_last Unexecuted instantiation: applet.c:be_set_sess_last Unexecuted instantiation: backend.c:be_set_sess_last Unexecuted instantiation: cfgparse-listen.c:be_set_sess_last Unexecuted instantiation: cfgparse.c:be_set_sess_last Unexecuted instantiation: channel.c:be_set_sess_last Unexecuted instantiation: check.c:be_set_sess_last Unexecuted instantiation: cli.c:be_set_sess_last Unexecuted instantiation: connection.c:be_set_sess_last Unexecuted instantiation: dns.c:be_set_sess_last Unexecuted instantiation: dns_ring.c:be_set_sess_last Unexecuted instantiation: errors.c:be_set_sess_last Unexecuted instantiation: extcheck.c:be_set_sess_last Unexecuted instantiation: filters.c:be_set_sess_last Unexecuted instantiation: flt_bwlim.c:be_set_sess_last Unexecuted instantiation: flt_decomp.c:be_set_sess_last Unexecuted instantiation: flt_http_comp.c:be_set_sess_last Unexecuted instantiation: flt_spoe.c:be_set_sess_last Unexecuted instantiation: flt_trace.c:be_set_sess_last Unexecuted instantiation: frontend.c:be_set_sess_last Unexecuted instantiation: haterm.c:be_set_sess_last Unexecuted instantiation: http_ana.c:be_set_sess_last Unexecuted instantiation: http_ext.c:be_set_sess_last Unexecuted instantiation: http_fetch.c:be_set_sess_last Unexecuted instantiation: http_rules.c:be_set_sess_last Unexecuted instantiation: lb_chash.c:be_set_sess_last Unexecuted instantiation: lb_fas.c:be_set_sess_last Unexecuted instantiation: lb_fwlc.c:be_set_sess_last Unexecuted instantiation: lb_fwrr.c:be_set_sess_last Unexecuted instantiation: lb_map.c:be_set_sess_last Unexecuted instantiation: lb_ss.c:be_set_sess_last Unexecuted instantiation: pattern.c:be_set_sess_last Unexecuted instantiation: payload.c:be_set_sess_last Unexecuted instantiation: proto_rhttp.c:be_set_sess_last Unexecuted instantiation: queue.c:be_set_sess_last Unexecuted instantiation: stats-html.c:be_set_sess_last Unexecuted instantiation: stats-json.c:be_set_sess_last Unexecuted instantiation: cache.c:be_set_sess_last Unexecuted instantiation: cfgparse-global.c:be_set_sess_last Unexecuted instantiation: compression.c:be_set_sess_last Unexecuted instantiation: fcgi-app.c:be_set_sess_last Unexecuted instantiation: proto_tcp.c:be_set_sess_last |
112 | | |
113 | | /* This function returns non-zero if the designated server will be |
114 | | * usable for LB according to pending weight and state. |
115 | | * Otherwise it returns 0. |
116 | | */ |
117 | | static inline int srv_willbe_usable(const struct server *srv) |
118 | 0 | { |
119 | 0 | enum srv_state state = srv->next_state; |
120 | |
|
121 | 0 | if (!srv->next_eweight) |
122 | 0 | return 0; |
123 | 0 | if (srv->next_admin & SRV_ADMF_MAINT) |
124 | 0 | return 0; |
125 | 0 | if (srv->next_admin & SRV_ADMF_DRAIN) |
126 | 0 | return 0; |
127 | 0 | switch (state) { |
128 | 0 | case SRV_ST_STARTING: |
129 | 0 | case SRV_ST_RUNNING: |
130 | 0 | return 1; |
131 | 0 | case SRV_ST_STOPPING: |
132 | 0 | case SRV_ST_STOPPED: |
133 | 0 | return 0; |
134 | 0 | } |
135 | 0 | return 0; |
136 | 0 | } Unexecuted instantiation: debug.c:srv_willbe_usable Unexecuted instantiation: fd.c:srv_willbe_usable Unexecuted instantiation: haproxy.c:srv_willbe_usable Unexecuted instantiation: http_htx.c:srv_willbe_usable Unexecuted instantiation: limits.c:srv_willbe_usable Unexecuted instantiation: listener.c:srv_willbe_usable Unexecuted instantiation: log.c:srv_willbe_usable Unexecuted instantiation: mworker.c:srv_willbe_usable Unexecuted instantiation: peers.c:srv_willbe_usable Unexecuted instantiation: pool.c:srv_willbe_usable Unexecuted instantiation: proto_sockpair.c:srv_willbe_usable Unexecuted instantiation: proxy.c:srv_willbe_usable Unexecuted instantiation: resolvers.c:srv_willbe_usable Unexecuted instantiation: ring.c:srv_willbe_usable Unexecuted instantiation: sample.c:srv_willbe_usable Unexecuted instantiation: server.c:srv_willbe_usable Unexecuted instantiation: session.c:srv_willbe_usable Unexecuted instantiation: sink.c:srv_willbe_usable Unexecuted instantiation: sock.c:srv_willbe_usable Unexecuted instantiation: stats-proxy.c:srv_willbe_usable Unexecuted instantiation: stats.c:srv_willbe_usable Unexecuted instantiation: stconn.c:srv_willbe_usable Unexecuted instantiation: stick_table.c:srv_willbe_usable Unexecuted instantiation: stream.c:srv_willbe_usable Unexecuted instantiation: sym.c:srv_willbe_usable Unexecuted instantiation: tcp_rules.c:srv_willbe_usable Unexecuted instantiation: tcpcheck.c:srv_willbe_usable Unexecuted instantiation: thread.c:srv_willbe_usable Unexecuted instantiation: tools.c:srv_willbe_usable Unexecuted instantiation: trace.c:srv_willbe_usable Unexecuted instantiation: vars.c:srv_willbe_usable Unexecuted instantiation: activity.c:srv_willbe_usable Unexecuted instantiation: applet.c:srv_willbe_usable Unexecuted instantiation: backend.c:srv_willbe_usable Unexecuted instantiation: cfgparse-listen.c:srv_willbe_usable Unexecuted instantiation: cfgparse.c:srv_willbe_usable Unexecuted instantiation: channel.c:srv_willbe_usable Unexecuted instantiation: check.c:srv_willbe_usable Unexecuted instantiation: cli.c:srv_willbe_usable Unexecuted instantiation: connection.c:srv_willbe_usable Unexecuted instantiation: dns.c:srv_willbe_usable Unexecuted instantiation: dns_ring.c:srv_willbe_usable Unexecuted instantiation: errors.c:srv_willbe_usable Unexecuted instantiation: extcheck.c:srv_willbe_usable Unexecuted instantiation: filters.c:srv_willbe_usable Unexecuted instantiation: flt_bwlim.c:srv_willbe_usable Unexecuted instantiation: flt_decomp.c:srv_willbe_usable Unexecuted instantiation: flt_http_comp.c:srv_willbe_usable Unexecuted instantiation: flt_spoe.c:srv_willbe_usable Unexecuted instantiation: flt_trace.c:srv_willbe_usable Unexecuted instantiation: frontend.c:srv_willbe_usable Unexecuted instantiation: haterm.c:srv_willbe_usable Unexecuted instantiation: http_ana.c:srv_willbe_usable Unexecuted instantiation: http_ext.c:srv_willbe_usable Unexecuted instantiation: http_fetch.c:srv_willbe_usable Unexecuted instantiation: http_rules.c:srv_willbe_usable Unexecuted instantiation: lb_chash.c:srv_willbe_usable Unexecuted instantiation: lb_fas.c:srv_willbe_usable Unexecuted instantiation: lb_fwlc.c:srv_willbe_usable Unexecuted instantiation: lb_fwrr.c:srv_willbe_usable Unexecuted instantiation: lb_map.c:srv_willbe_usable Unexecuted instantiation: lb_ss.c:srv_willbe_usable Unexecuted instantiation: pattern.c:srv_willbe_usable Unexecuted instantiation: payload.c:srv_willbe_usable Unexecuted instantiation: proto_rhttp.c:srv_willbe_usable Unexecuted instantiation: queue.c:srv_willbe_usable Unexecuted instantiation: stats-html.c:srv_willbe_usable Unexecuted instantiation: stats-json.c:srv_willbe_usable Unexecuted instantiation: cache.c:srv_willbe_usable Unexecuted instantiation: cfgparse-global.c:srv_willbe_usable Unexecuted instantiation: compression.c:srv_willbe_usable Unexecuted instantiation: fcgi-app.c:srv_willbe_usable Unexecuted instantiation: proto_tcp.c:srv_willbe_usable |
137 | | |
138 | | /* This function returns non-zero if the designated server was usable for LB |
139 | | * according to its current weight and state. Otherwise it returns 0. |
140 | | */ |
141 | | static inline int srv_currently_usable(const struct server *srv) |
142 | 0 | { |
143 | 0 | enum srv_state state = srv->cur_state; |
144 | |
|
145 | 0 | if (!srv->cur_eweight) |
146 | 0 | return 0; |
147 | 0 | if (srv->cur_admin & SRV_ADMF_MAINT) |
148 | 0 | return 0; |
149 | 0 | if (srv->cur_admin & SRV_ADMF_DRAIN) |
150 | 0 | return 0; |
151 | 0 | switch (state) { |
152 | 0 | case SRV_ST_STARTING: |
153 | 0 | case SRV_ST_RUNNING: |
154 | 0 | return 1; |
155 | 0 | case SRV_ST_STOPPING: |
156 | 0 | case SRV_ST_STOPPED: |
157 | 0 | return 0; |
158 | 0 | } |
159 | 0 | return 0; |
160 | 0 | } Unexecuted instantiation: debug.c:srv_currently_usable Unexecuted instantiation: fd.c:srv_currently_usable Unexecuted instantiation: haproxy.c:srv_currently_usable Unexecuted instantiation: http_htx.c:srv_currently_usable Unexecuted instantiation: limits.c:srv_currently_usable Unexecuted instantiation: listener.c:srv_currently_usable Unexecuted instantiation: log.c:srv_currently_usable Unexecuted instantiation: mworker.c:srv_currently_usable Unexecuted instantiation: peers.c:srv_currently_usable Unexecuted instantiation: pool.c:srv_currently_usable Unexecuted instantiation: proto_sockpair.c:srv_currently_usable Unexecuted instantiation: proxy.c:srv_currently_usable Unexecuted instantiation: resolvers.c:srv_currently_usable Unexecuted instantiation: ring.c:srv_currently_usable Unexecuted instantiation: sample.c:srv_currently_usable Unexecuted instantiation: server.c:srv_currently_usable Unexecuted instantiation: session.c:srv_currently_usable Unexecuted instantiation: sink.c:srv_currently_usable Unexecuted instantiation: sock.c:srv_currently_usable Unexecuted instantiation: stats-proxy.c:srv_currently_usable Unexecuted instantiation: stats.c:srv_currently_usable Unexecuted instantiation: stconn.c:srv_currently_usable Unexecuted instantiation: stick_table.c:srv_currently_usable Unexecuted instantiation: stream.c:srv_currently_usable Unexecuted instantiation: sym.c:srv_currently_usable Unexecuted instantiation: tcp_rules.c:srv_currently_usable Unexecuted instantiation: tcpcheck.c:srv_currently_usable Unexecuted instantiation: thread.c:srv_currently_usable Unexecuted instantiation: tools.c:srv_currently_usable Unexecuted instantiation: trace.c:srv_currently_usable Unexecuted instantiation: vars.c:srv_currently_usable Unexecuted instantiation: activity.c:srv_currently_usable Unexecuted instantiation: applet.c:srv_currently_usable Unexecuted instantiation: backend.c:srv_currently_usable Unexecuted instantiation: cfgparse-listen.c:srv_currently_usable Unexecuted instantiation: cfgparse.c:srv_currently_usable Unexecuted instantiation: channel.c:srv_currently_usable Unexecuted instantiation: check.c:srv_currently_usable Unexecuted instantiation: cli.c:srv_currently_usable Unexecuted instantiation: connection.c:srv_currently_usable Unexecuted instantiation: dns.c:srv_currently_usable Unexecuted instantiation: dns_ring.c:srv_currently_usable Unexecuted instantiation: errors.c:srv_currently_usable Unexecuted instantiation: extcheck.c:srv_currently_usable Unexecuted instantiation: filters.c:srv_currently_usable Unexecuted instantiation: flt_bwlim.c:srv_currently_usable Unexecuted instantiation: flt_decomp.c:srv_currently_usable Unexecuted instantiation: flt_http_comp.c:srv_currently_usable Unexecuted instantiation: flt_spoe.c:srv_currently_usable Unexecuted instantiation: flt_trace.c:srv_currently_usable Unexecuted instantiation: frontend.c:srv_currently_usable Unexecuted instantiation: haterm.c:srv_currently_usable Unexecuted instantiation: http_ana.c:srv_currently_usable Unexecuted instantiation: http_ext.c:srv_currently_usable Unexecuted instantiation: http_fetch.c:srv_currently_usable Unexecuted instantiation: http_rules.c:srv_currently_usable Unexecuted instantiation: lb_chash.c:srv_currently_usable Unexecuted instantiation: lb_fas.c:srv_currently_usable Unexecuted instantiation: lb_fwlc.c:srv_currently_usable Unexecuted instantiation: lb_fwrr.c:srv_currently_usable Unexecuted instantiation: lb_map.c:srv_currently_usable Unexecuted instantiation: lb_ss.c:srv_currently_usable Unexecuted instantiation: pattern.c:srv_currently_usable Unexecuted instantiation: payload.c:srv_currently_usable Unexecuted instantiation: proto_rhttp.c:srv_currently_usable Unexecuted instantiation: queue.c:srv_currently_usable Unexecuted instantiation: stats-html.c:srv_currently_usable Unexecuted instantiation: stats-json.c:srv_currently_usable Unexecuted instantiation: cache.c:srv_currently_usable Unexecuted instantiation: cfgparse-global.c:srv_currently_usable Unexecuted instantiation: compression.c:srv_currently_usable Unexecuted instantiation: fcgi-app.c:srv_currently_usable Unexecuted instantiation: proto_tcp.c:srv_currently_usable |
161 | | |
162 | | /* This function commits the next server state and weight onto the current |
163 | | * ones in order to detect future changes. The server's lock is expected to |
164 | | * be held when calling this function. |
165 | | */ |
166 | | static inline void srv_lb_commit_status(struct server *srv) |
167 | 0 | { |
168 | 0 | srv->cur_state = srv->next_state; |
169 | 0 | srv->cur_admin = srv->next_admin; |
170 | 0 | srv->cur_eweight = srv->next_eweight; |
171 | 0 | } Unexecuted instantiation: debug.c:srv_lb_commit_status Unexecuted instantiation: fd.c:srv_lb_commit_status Unexecuted instantiation: haproxy.c:srv_lb_commit_status Unexecuted instantiation: http_htx.c:srv_lb_commit_status Unexecuted instantiation: limits.c:srv_lb_commit_status Unexecuted instantiation: listener.c:srv_lb_commit_status Unexecuted instantiation: log.c:srv_lb_commit_status Unexecuted instantiation: mworker.c:srv_lb_commit_status Unexecuted instantiation: peers.c:srv_lb_commit_status Unexecuted instantiation: pool.c:srv_lb_commit_status Unexecuted instantiation: proto_sockpair.c:srv_lb_commit_status Unexecuted instantiation: proxy.c:srv_lb_commit_status Unexecuted instantiation: resolvers.c:srv_lb_commit_status Unexecuted instantiation: ring.c:srv_lb_commit_status Unexecuted instantiation: sample.c:srv_lb_commit_status Unexecuted instantiation: server.c:srv_lb_commit_status Unexecuted instantiation: session.c:srv_lb_commit_status Unexecuted instantiation: sink.c:srv_lb_commit_status Unexecuted instantiation: sock.c:srv_lb_commit_status Unexecuted instantiation: stats-proxy.c:srv_lb_commit_status Unexecuted instantiation: stats.c:srv_lb_commit_status Unexecuted instantiation: stconn.c:srv_lb_commit_status Unexecuted instantiation: stick_table.c:srv_lb_commit_status Unexecuted instantiation: stream.c:srv_lb_commit_status Unexecuted instantiation: sym.c:srv_lb_commit_status Unexecuted instantiation: tcp_rules.c:srv_lb_commit_status Unexecuted instantiation: tcpcheck.c:srv_lb_commit_status Unexecuted instantiation: thread.c:srv_lb_commit_status Unexecuted instantiation: tools.c:srv_lb_commit_status Unexecuted instantiation: trace.c:srv_lb_commit_status Unexecuted instantiation: vars.c:srv_lb_commit_status Unexecuted instantiation: activity.c:srv_lb_commit_status Unexecuted instantiation: applet.c:srv_lb_commit_status Unexecuted instantiation: backend.c:srv_lb_commit_status Unexecuted instantiation: cfgparse-listen.c:srv_lb_commit_status Unexecuted instantiation: cfgparse.c:srv_lb_commit_status Unexecuted instantiation: channel.c:srv_lb_commit_status Unexecuted instantiation: check.c:srv_lb_commit_status Unexecuted instantiation: cli.c:srv_lb_commit_status Unexecuted instantiation: connection.c:srv_lb_commit_status Unexecuted instantiation: dns.c:srv_lb_commit_status Unexecuted instantiation: dns_ring.c:srv_lb_commit_status Unexecuted instantiation: errors.c:srv_lb_commit_status Unexecuted instantiation: extcheck.c:srv_lb_commit_status Unexecuted instantiation: filters.c:srv_lb_commit_status Unexecuted instantiation: flt_bwlim.c:srv_lb_commit_status Unexecuted instantiation: flt_decomp.c:srv_lb_commit_status Unexecuted instantiation: flt_http_comp.c:srv_lb_commit_status Unexecuted instantiation: flt_spoe.c:srv_lb_commit_status Unexecuted instantiation: flt_trace.c:srv_lb_commit_status Unexecuted instantiation: frontend.c:srv_lb_commit_status Unexecuted instantiation: haterm.c:srv_lb_commit_status Unexecuted instantiation: http_ana.c:srv_lb_commit_status Unexecuted instantiation: http_ext.c:srv_lb_commit_status Unexecuted instantiation: http_fetch.c:srv_lb_commit_status Unexecuted instantiation: http_rules.c:srv_lb_commit_status Unexecuted instantiation: lb_chash.c:srv_lb_commit_status Unexecuted instantiation: lb_fas.c:srv_lb_commit_status Unexecuted instantiation: lb_fwlc.c:srv_lb_commit_status Unexecuted instantiation: lb_fwrr.c:srv_lb_commit_status Unexecuted instantiation: lb_map.c:srv_lb_commit_status Unexecuted instantiation: lb_ss.c:srv_lb_commit_status Unexecuted instantiation: pattern.c:srv_lb_commit_status Unexecuted instantiation: payload.c:srv_lb_commit_status Unexecuted instantiation: proto_rhttp.c:srv_lb_commit_status Unexecuted instantiation: queue.c:srv_lb_commit_status Unexecuted instantiation: stats-html.c:srv_lb_commit_status Unexecuted instantiation: stats-json.c:srv_lb_commit_status Unexecuted instantiation: cache.c:srv_lb_commit_status Unexecuted instantiation: cfgparse-global.c:srv_lb_commit_status Unexecuted instantiation: compression.c:srv_lb_commit_status Unexecuted instantiation: fcgi-app.c:srv_lb_commit_status Unexecuted instantiation: proto_tcp.c:srv_lb_commit_status |
172 | | |
173 | | /* This function returns true when a server has experienced a change since last |
174 | | * commit on its state or weight, otherwise zero. |
175 | | */ |
176 | | static inline int srv_lb_status_changed(const struct server *srv) |
177 | 0 | { |
178 | 0 | return (srv->next_state != srv->cur_state || |
179 | 0 | srv->next_admin != srv->cur_admin || |
180 | 0 | srv->next_eweight != srv->cur_eweight); |
181 | 0 | } Unexecuted instantiation: debug.c:srv_lb_status_changed Unexecuted instantiation: fd.c:srv_lb_status_changed Unexecuted instantiation: haproxy.c:srv_lb_status_changed Unexecuted instantiation: http_htx.c:srv_lb_status_changed Unexecuted instantiation: limits.c:srv_lb_status_changed Unexecuted instantiation: listener.c:srv_lb_status_changed Unexecuted instantiation: log.c:srv_lb_status_changed Unexecuted instantiation: mworker.c:srv_lb_status_changed Unexecuted instantiation: peers.c:srv_lb_status_changed Unexecuted instantiation: pool.c:srv_lb_status_changed Unexecuted instantiation: proto_sockpair.c:srv_lb_status_changed Unexecuted instantiation: proxy.c:srv_lb_status_changed Unexecuted instantiation: resolvers.c:srv_lb_status_changed Unexecuted instantiation: ring.c:srv_lb_status_changed Unexecuted instantiation: sample.c:srv_lb_status_changed Unexecuted instantiation: server.c:srv_lb_status_changed Unexecuted instantiation: session.c:srv_lb_status_changed Unexecuted instantiation: sink.c:srv_lb_status_changed Unexecuted instantiation: sock.c:srv_lb_status_changed Unexecuted instantiation: stats-proxy.c:srv_lb_status_changed Unexecuted instantiation: stats.c:srv_lb_status_changed Unexecuted instantiation: stconn.c:srv_lb_status_changed Unexecuted instantiation: stick_table.c:srv_lb_status_changed Unexecuted instantiation: stream.c:srv_lb_status_changed Unexecuted instantiation: sym.c:srv_lb_status_changed Unexecuted instantiation: tcp_rules.c:srv_lb_status_changed Unexecuted instantiation: tcpcheck.c:srv_lb_status_changed Unexecuted instantiation: thread.c:srv_lb_status_changed Unexecuted instantiation: tools.c:srv_lb_status_changed Unexecuted instantiation: trace.c:srv_lb_status_changed Unexecuted instantiation: vars.c:srv_lb_status_changed Unexecuted instantiation: activity.c:srv_lb_status_changed Unexecuted instantiation: applet.c:srv_lb_status_changed Unexecuted instantiation: backend.c:srv_lb_status_changed Unexecuted instantiation: cfgparse-listen.c:srv_lb_status_changed Unexecuted instantiation: cfgparse.c:srv_lb_status_changed Unexecuted instantiation: channel.c:srv_lb_status_changed Unexecuted instantiation: check.c:srv_lb_status_changed Unexecuted instantiation: cli.c:srv_lb_status_changed Unexecuted instantiation: connection.c:srv_lb_status_changed Unexecuted instantiation: dns.c:srv_lb_status_changed Unexecuted instantiation: dns_ring.c:srv_lb_status_changed Unexecuted instantiation: errors.c:srv_lb_status_changed Unexecuted instantiation: extcheck.c:srv_lb_status_changed Unexecuted instantiation: filters.c:srv_lb_status_changed Unexecuted instantiation: flt_bwlim.c:srv_lb_status_changed Unexecuted instantiation: flt_decomp.c:srv_lb_status_changed Unexecuted instantiation: flt_http_comp.c:srv_lb_status_changed Unexecuted instantiation: flt_spoe.c:srv_lb_status_changed Unexecuted instantiation: flt_trace.c:srv_lb_status_changed Unexecuted instantiation: frontend.c:srv_lb_status_changed Unexecuted instantiation: haterm.c:srv_lb_status_changed Unexecuted instantiation: http_ana.c:srv_lb_status_changed Unexecuted instantiation: http_ext.c:srv_lb_status_changed Unexecuted instantiation: http_fetch.c:srv_lb_status_changed Unexecuted instantiation: http_rules.c:srv_lb_status_changed Unexecuted instantiation: lb_chash.c:srv_lb_status_changed Unexecuted instantiation: lb_fas.c:srv_lb_status_changed Unexecuted instantiation: lb_fwlc.c:srv_lb_status_changed Unexecuted instantiation: lb_fwrr.c:srv_lb_status_changed Unexecuted instantiation: lb_map.c:srv_lb_status_changed Unexecuted instantiation: lb_ss.c:srv_lb_status_changed Unexecuted instantiation: pattern.c:srv_lb_status_changed Unexecuted instantiation: payload.c:srv_lb_status_changed Unexecuted instantiation: proto_rhttp.c:srv_lb_status_changed Unexecuted instantiation: queue.c:srv_lb_status_changed Unexecuted instantiation: stats-html.c:srv_lb_status_changed Unexecuted instantiation: stats-json.c:srv_lb_status_changed Unexecuted instantiation: cache.c:srv_lb_status_changed Unexecuted instantiation: cfgparse-global.c:srv_lb_status_changed Unexecuted instantiation: compression.c:srv_lb_status_changed Unexecuted instantiation: fcgi-app.c:srv_lb_status_changed Unexecuted instantiation: proto_tcp.c:srv_lb_status_changed |
182 | | |
183 | | /* sends a log message when a backend goes down, and also sets last |
184 | | * change date. |
185 | | */ |
186 | | void set_backend_down(struct proxy *be); |
187 | | |
188 | | unsigned int gen_hash(const struct proxy* px, const char* key, unsigned long len); |
189 | | |
190 | | /* Returns true if connection reuse is supported by <be> backend. */ |
191 | | static inline int be_supports_conn_reuse(const struct proxy *be) |
192 | 0 | { |
193 | 0 | return be->mode == PR_MODE_HTTP || be->mode == PR_MODE_SPOP; |
194 | 0 | } Unexecuted instantiation: debug.c:be_supports_conn_reuse Unexecuted instantiation: fd.c:be_supports_conn_reuse Unexecuted instantiation: haproxy.c:be_supports_conn_reuse Unexecuted instantiation: http_htx.c:be_supports_conn_reuse Unexecuted instantiation: limits.c:be_supports_conn_reuse Unexecuted instantiation: listener.c:be_supports_conn_reuse Unexecuted instantiation: log.c:be_supports_conn_reuse Unexecuted instantiation: mworker.c:be_supports_conn_reuse Unexecuted instantiation: peers.c:be_supports_conn_reuse Unexecuted instantiation: pool.c:be_supports_conn_reuse Unexecuted instantiation: proto_sockpair.c:be_supports_conn_reuse Unexecuted instantiation: proxy.c:be_supports_conn_reuse Unexecuted instantiation: resolvers.c:be_supports_conn_reuse Unexecuted instantiation: ring.c:be_supports_conn_reuse Unexecuted instantiation: sample.c:be_supports_conn_reuse Unexecuted instantiation: server.c:be_supports_conn_reuse Unexecuted instantiation: session.c:be_supports_conn_reuse Unexecuted instantiation: sink.c:be_supports_conn_reuse Unexecuted instantiation: sock.c:be_supports_conn_reuse Unexecuted instantiation: stats-proxy.c:be_supports_conn_reuse Unexecuted instantiation: stats.c:be_supports_conn_reuse Unexecuted instantiation: stconn.c:be_supports_conn_reuse Unexecuted instantiation: stick_table.c:be_supports_conn_reuse Unexecuted instantiation: stream.c:be_supports_conn_reuse Unexecuted instantiation: sym.c:be_supports_conn_reuse Unexecuted instantiation: tcp_rules.c:be_supports_conn_reuse Unexecuted instantiation: tcpcheck.c:be_supports_conn_reuse Unexecuted instantiation: thread.c:be_supports_conn_reuse Unexecuted instantiation: tools.c:be_supports_conn_reuse Unexecuted instantiation: trace.c:be_supports_conn_reuse Unexecuted instantiation: vars.c:be_supports_conn_reuse Unexecuted instantiation: activity.c:be_supports_conn_reuse Unexecuted instantiation: applet.c:be_supports_conn_reuse Unexecuted instantiation: backend.c:be_supports_conn_reuse Unexecuted instantiation: cfgparse-listen.c:be_supports_conn_reuse Unexecuted instantiation: cfgparse.c:be_supports_conn_reuse Unexecuted instantiation: channel.c:be_supports_conn_reuse Unexecuted instantiation: check.c:be_supports_conn_reuse Unexecuted instantiation: cli.c:be_supports_conn_reuse Unexecuted instantiation: connection.c:be_supports_conn_reuse Unexecuted instantiation: dns.c:be_supports_conn_reuse Unexecuted instantiation: dns_ring.c:be_supports_conn_reuse Unexecuted instantiation: errors.c:be_supports_conn_reuse Unexecuted instantiation: extcheck.c:be_supports_conn_reuse Unexecuted instantiation: filters.c:be_supports_conn_reuse Unexecuted instantiation: flt_bwlim.c:be_supports_conn_reuse Unexecuted instantiation: flt_decomp.c:be_supports_conn_reuse Unexecuted instantiation: flt_http_comp.c:be_supports_conn_reuse Unexecuted instantiation: flt_spoe.c:be_supports_conn_reuse Unexecuted instantiation: flt_trace.c:be_supports_conn_reuse Unexecuted instantiation: frontend.c:be_supports_conn_reuse Unexecuted instantiation: haterm.c:be_supports_conn_reuse Unexecuted instantiation: http_ana.c:be_supports_conn_reuse Unexecuted instantiation: http_ext.c:be_supports_conn_reuse Unexecuted instantiation: http_fetch.c:be_supports_conn_reuse Unexecuted instantiation: http_rules.c:be_supports_conn_reuse Unexecuted instantiation: lb_chash.c:be_supports_conn_reuse Unexecuted instantiation: lb_fas.c:be_supports_conn_reuse Unexecuted instantiation: lb_fwlc.c:be_supports_conn_reuse Unexecuted instantiation: lb_fwrr.c:be_supports_conn_reuse Unexecuted instantiation: lb_map.c:be_supports_conn_reuse Unexecuted instantiation: lb_ss.c:be_supports_conn_reuse Unexecuted instantiation: pattern.c:be_supports_conn_reuse Unexecuted instantiation: payload.c:be_supports_conn_reuse Unexecuted instantiation: proto_rhttp.c:be_supports_conn_reuse Unexecuted instantiation: queue.c:be_supports_conn_reuse Unexecuted instantiation: stats-html.c:be_supports_conn_reuse Unexecuted instantiation: stats-json.c:be_supports_conn_reuse Unexecuted instantiation: cache.c:be_supports_conn_reuse Unexecuted instantiation: cfgparse-global.c:be_supports_conn_reuse Unexecuted instantiation: compression.c:be_supports_conn_reuse Unexecuted instantiation: fcgi-app.c:be_supports_conn_reuse Unexecuted instantiation: proto_tcp.c:be_supports_conn_reuse |
195 | | |
196 | | #endif /* _HAPROXY_BACKEND_H */ |
197 | | |
198 | | /* |
199 | | * Local variables: |
200 | | * c-indent-level: 8 |
201 | | * c-basic-offset: 8 |
202 | | * End: |
203 | | */ |