Mercurial > hg > nginx
annotate src/stream/ngx_stream_upstream_round_robin.h @ 6715:d200a0fd00b7
Introduced the NGX_COMPAT macro.
When enabled, some structures are padded to be size compatible
with their NGINX Plus versions.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Thu, 29 Sep 2016 15:28:24 +0300 |
parents | 63b8b157b776 |
children | f41c2530dd17 |
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 #if (NGX_STREAM_SSL) | |
44 void *ssl_session; | |
45 int ssl_session_len; | |
46 #endif | |
47 | |
48 #if (NGX_STREAM_UPSTREAM_ZONE) | |
49 ngx_atomic_t lock; | |
50 #endif | |
6701
d69964eb8335
Upstream: style, ngx_http_upstream_rr_peer_t.next moved.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6643
diff
changeset
|
51 |
d69964eb8335
Upstream: style, ngx_http_upstream_rr_peer_t.next moved.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6643
diff
changeset
|
52 ngx_stream_upstream_rr_peer_t *next; |
6715
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6713
diff
changeset
|
53 |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6713
diff
changeset
|
54 NGX_COMPAT_BEGIN(25) |
d200a0fd00b7
Introduced the NGX_COMPAT macro.
Ruslan Ermilov <ru@nginx.com>
parents:
6713
diff
changeset
|
55 NGX_COMPAT_END |
6115 | 56 }; |
57 | |
58 | |
59 typedef struct ngx_stream_upstream_rr_peers_s ngx_stream_upstream_rr_peers_t; | |
60 | |
61 struct ngx_stream_upstream_rr_peers_s { | |
62 ngx_uint_t number; | |
63 | |
64 #if (NGX_STREAM_UPSTREAM_ZONE) | |
65 ngx_slab_pool_t *shpool; | |
66 ngx_atomic_t rwlock; | |
6198
311d232ad803
Upstream: fixed shared upstreams on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6115
diff
changeset
|
67 ngx_stream_upstream_rr_peers_t *zone_next; |
6115 | 68 #endif |
69 | |
70 ngx_uint_t total_weight; | |
71 | |
72 unsigned single:1; | |
73 unsigned weighted:1; | |
74 | |
75 ngx_str_t *name; | |
76 | |
77 ngx_stream_upstream_rr_peers_t *next; | |
78 | |
79 ngx_stream_upstream_rr_peer_t *peer; | |
80 }; | |
81 | |
82 | |
83 #if (NGX_STREAM_UPSTREAM_ZONE) | |
84 | |
85 #define ngx_stream_upstream_rr_peers_rlock(peers) \ | |
86 \ | |
87 if (peers->shpool) { \ | |
88 ngx_rwlock_rlock(&peers->rwlock); \ | |
89 } | |
90 | |
91 #define ngx_stream_upstream_rr_peers_wlock(peers) \ | |
92 \ | |
93 if (peers->shpool) { \ | |
94 ngx_rwlock_wlock(&peers->rwlock); \ | |
95 } | |
96 | |
97 #define ngx_stream_upstream_rr_peers_unlock(peers) \ | |
98 \ | |
99 if (peers->shpool) { \ | |
100 ngx_rwlock_unlock(&peers->rwlock); \ | |
101 } | |
102 | |
103 | |
104 #define ngx_stream_upstream_rr_peer_lock(peers, peer) \ | |
105 \ | |
106 if (peers->shpool) { \ | |
107 ngx_rwlock_wlock(&peer->lock); \ | |
108 } | |
109 | |
110 #define ngx_stream_upstream_rr_peer_unlock(peers, peer) \ | |
111 \ | |
112 if (peers->shpool) { \ | |
113 ngx_rwlock_unlock(&peer->lock); \ | |
114 } | |
115 | |
116 #else | |
117 | |
118 #define ngx_stream_upstream_rr_peers_rlock(peers) | |
119 #define ngx_stream_upstream_rr_peers_wlock(peers) | |
120 #define ngx_stream_upstream_rr_peers_unlock(peers) | |
121 #define ngx_stream_upstream_rr_peer_lock(peers, peer) | |
122 #define ngx_stream_upstream_rr_peer_unlock(peers, peer) | |
123 | |
124 #endif | |
125 | |
126 | |
127 typedef struct { | |
6712
fd5c2781460b
Modules compatibility: upstream config field.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6708
diff
changeset
|
128 ngx_uint_t config; |
6115 | 129 ngx_stream_upstream_rr_peers_t *peers; |
130 ngx_stream_upstream_rr_peer_t *current; | |
131 uintptr_t *tried; | |
132 uintptr_t data; | |
133 } ngx_stream_upstream_rr_peer_data_t; | |
134 | |
135 | |
136 ngx_int_t ngx_stream_upstream_init_round_robin(ngx_conf_t *cf, | |
137 ngx_stream_upstream_srv_conf_t *us); | |
138 ngx_int_t ngx_stream_upstream_init_round_robin_peer(ngx_stream_session_t *s, | |
139 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
|
140 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
|
141 ngx_stream_upstream_resolved_t *ur); |
6115 | 142 ngx_int_t ngx_stream_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, |
143 void *data); | |
144 void ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, | |
145 void *data, ngx_uint_t state); | |
146 | |
147 | |
148 #endif /* _NGX_STREAM_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ */ |