Mercurial > hg > nginx-quic
annotate src/stream/ngx_stream_upstream_round_robin.h @ 8012:e334ca1b23ba quic
HTTP/3: support $server_protocol variable.
Now it holds "HTTP/3.0". Previously it was empty.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Tue, 14 Jul 2020 16:52:44 +0300 |
parents | f41c2530dd17 |
children | 90cc7194e993 |
rev | line source |
---|---|
6115 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 * Copyright (C) Nginx, Inc. | |
5 */ | |
6 | |
7 | |
8 #ifndef _NGX_STREAM_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ | |
9 #define _NGX_STREAM_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ | |
10 | |
11 | |
12 #include <ngx_config.h> | |
13 #include <ngx_core.h> | |
14 #include <ngx_stream.h> | |
15 | |
16 | |
17 typedef struct ngx_stream_upstream_rr_peer_s ngx_stream_upstream_rr_peer_t; | |
18 | |
19 struct ngx_stream_upstream_rr_peer_s { | |
20 struct sockaddr *sockaddr; | |
21 socklen_t socklen; | |
22 ngx_str_t name; | |
23 ngx_str_t server; | |
24 | |
25 ngx_int_t current_weight; | |
26 ngx_int_t effective_weight; | |
27 ngx_int_t weight; | |
28 | |
29 ngx_uint_t conns; | |
6705 | 30 ngx_uint_t max_conns; |
6115 | 31 |
32 ngx_uint_t fails; | |
33 time_t accessed; | |
34 time_t checked; | |
35 | |
36 ngx_uint_t max_fails; | |
37 time_t fail_timeout; | |
6708
4080f94a996f
Modules compatibility: slow start fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6705
diff
changeset
|
38 ngx_msec_t slow_start; |
4080f94a996f
Modules compatibility: slow start fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6705
diff
changeset
|
39 ngx_msec_t start_time; |
6115 | 40 |
6713
63b8b157b776
Modules compatibility: down flag promoted to a bitmask.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6712
diff
changeset
|
41 ngx_uint_t down; |
6115 | 42 |
43 void *ssl_session; | |
44 int ssl_session_len; | |
45 | |
46 #if (NGX_STREAM_UPSTREAM_ZONE) | |
47 ngx_atomic_t lock; | |
48 #endif | |
6701
d69964eb8335
Upstream: style, ngx_http_upstream_rr_peer_t.next moved.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6643
diff
changeset
|
49 |
d69964eb8335
Upstream: style, ngx_http_upstream_rr_peer_t.next moved.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6643
diff
changeset
|
50 ngx_stream_upstream_rr_peer_t *next; |
6715
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6713
diff
changeset
|
51 |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6713
diff
changeset
|
52 NGX_COMPAT_BEGIN(25) |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6713
diff
changeset
|
53 NGX_COMPAT_END |
6115 | 54 }; |
55 | |
56 | |
57 typedef struct ngx_stream_upstream_rr_peers_s ngx_stream_upstream_rr_peers_t; | |
58 | |
59 struct ngx_stream_upstream_rr_peers_s { | |
60 ngx_uint_t number; | |
61 | |
62 #if (NGX_STREAM_UPSTREAM_ZONE) | |
63 ngx_slab_pool_t *shpool; | |
64 ngx_atomic_t rwlock; | |
6198
311d232ad803
Upstream: fixed shared upstreams on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6115
diff
changeset
|
65 ngx_stream_upstream_rr_peers_t *zone_next; |
6115 | 66 #endif |
67 | |
68 ngx_uint_t total_weight; | |
69 | |
70 unsigned single:1; | |
71 unsigned weighted:1; | |
72 | |
73 ngx_str_t *name; | |
74 | |
75 ngx_stream_upstream_rr_peers_t *next; | |
76 | |
77 ngx_stream_upstream_rr_peer_t *peer; | |
78 }; | |
79 | |
80 | |
81 #if (NGX_STREAM_UPSTREAM_ZONE) | |
82 | |
83 #define ngx_stream_upstream_rr_peers_rlock(peers) \ | |
84 \ | |
85 if (peers->shpool) { \ | |
86 ngx_rwlock_rlock(&peers->rwlock); \ | |
87 } | |
88 | |
89 #define ngx_stream_upstream_rr_peers_wlock(peers) \ | |
90 \ | |
91 if (peers->shpool) { \ | |
92 ngx_rwlock_wlock(&peers->rwlock); \ | |
93 } | |
94 | |
95 #define ngx_stream_upstream_rr_peers_unlock(peers) \ | |
96 \ | |
97 if (peers->shpool) { \ | |
98 ngx_rwlock_unlock(&peers->rwlock); \ | |
99 } | |
100 | |
101 | |
102 #define ngx_stream_upstream_rr_peer_lock(peers, peer) \ | |
103 \ | |
104 if (peers->shpool) { \ | |
105 ngx_rwlock_wlock(&peer->lock); \ | |
106 } | |
107 | |
108 #define ngx_stream_upstream_rr_peer_unlock(peers, peer) \ | |
109 \ | |
110 if (peers->shpool) { \ | |
111 ngx_rwlock_unlock(&peer->lock); \ | |
112 } | |
113 | |
114 #else | |
115 | |
116 #define ngx_stream_upstream_rr_peers_rlock(peers) | |
117 #define ngx_stream_upstream_rr_peers_wlock(peers) | |
118 #define ngx_stream_upstream_rr_peers_unlock(peers) | |
119 #define ngx_stream_upstream_rr_peer_lock(peers, peer) | |
120 #define ngx_stream_upstream_rr_peer_unlock(peers, peer) | |
121 | |
122 #endif | |
123 | |
124 | |
125 typedef struct { | |
6712
fd5c2781460b
Modules compatibility: upstream config field.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6708
diff
changeset
|
126 ngx_uint_t config; |
6115 | 127 ngx_stream_upstream_rr_peers_t *peers; |
128 ngx_stream_upstream_rr_peer_t *current; | |
129 uintptr_t *tried; | |
130 uintptr_t data; | |
131 } ngx_stream_upstream_rr_peer_data_t; | |
132 | |
133 | |
134 ngx_int_t ngx_stream_upstream_init_round_robin(ngx_conf_t *cf, | |
135 ngx_stream_upstream_srv_conf_t *us); | |
136 ngx_int_t ngx_stream_upstream_init_round_robin_peer(ngx_stream_session_t *s, | |
137 ngx_stream_upstream_srv_conf_t *us); | |
6643
9757cffc1e2f
Stream: variables in proxy_pass and proxy_ssl_name.
Vladimir Homutov <vl@nginx.com>
parents:
6198
diff
changeset
|
138 ngx_int_t ngx_stream_upstream_create_round_robin_peer(ngx_stream_session_t *s, |
9757cffc1e2f
Stream: variables in proxy_pass and proxy_ssl_name.
Vladimir Homutov <vl@nginx.com>
parents:
6198
diff
changeset
|
139 ngx_stream_upstream_resolved_t *ur); |
6115 | 140 ngx_int_t ngx_stream_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, |
141 void *data); | |
142 void ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, | |
143 void *data, ngx_uint_t state); | |
144 | |
145 | |
146 #endif /* _NGX_STREAM_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ */ |