Mercurial > hg > nginx
annotate src/stream/ngx_stream_upstream_round_robin.h @ 6705:29bf0dbc0a77
Upstream: max_conns.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Thu, 22 Sep 2016 19:32:47 +0300 |
parents | d69964eb8335 |
children | 4080f94a996f |
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; | |
38 | |
39 ngx_uint_t down; /* unsigned down:1; */ | |
40 | |
41 #if (NGX_STREAM_SSL) | |
42 void *ssl_session; | |
43 int ssl_session_len; | |
44 #endif | |
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; |
6115 | 51 }; |
52 | |
53 | |
54 typedef struct ngx_stream_upstream_rr_peers_s ngx_stream_upstream_rr_peers_t; | |
55 | |
56 struct ngx_stream_upstream_rr_peers_s { | |
57 ngx_uint_t number; | |
58 | |
59 #if (NGX_STREAM_UPSTREAM_ZONE) | |
60 ngx_slab_pool_t *shpool; | |
61 ngx_atomic_t rwlock; | |
6198
311d232ad803
Upstream: fixed shared upstreams on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6115
diff
changeset
|
62 ngx_stream_upstream_rr_peers_t *zone_next; |
6115 | 63 #endif |
64 | |
65 ngx_uint_t total_weight; | |
66 | |
67 unsigned single:1; | |
68 unsigned weighted:1; | |
69 | |
70 ngx_str_t *name; | |
71 | |
72 ngx_stream_upstream_rr_peers_t *next; | |
73 | |
74 ngx_stream_upstream_rr_peer_t *peer; | |
75 }; | |
76 | |
77 | |
78 #if (NGX_STREAM_UPSTREAM_ZONE) | |
79 | |
80 #define ngx_stream_upstream_rr_peers_rlock(peers) \ | |
81 \ | |
82 if (peers->shpool) { \ | |
83 ngx_rwlock_rlock(&peers->rwlock); \ | |
84 } | |
85 | |
86 #define ngx_stream_upstream_rr_peers_wlock(peers) \ | |
87 \ | |
88 if (peers->shpool) { \ | |
89 ngx_rwlock_wlock(&peers->rwlock); \ | |
90 } | |
91 | |
92 #define ngx_stream_upstream_rr_peers_unlock(peers) \ | |
93 \ | |
94 if (peers->shpool) { \ | |
95 ngx_rwlock_unlock(&peers->rwlock); \ | |
96 } | |
97 | |
98 | |
99 #define ngx_stream_upstream_rr_peer_lock(peers, peer) \ | |
100 \ | |
101 if (peers->shpool) { \ | |
102 ngx_rwlock_wlock(&peer->lock); \ | |
103 } | |
104 | |
105 #define ngx_stream_upstream_rr_peer_unlock(peers, peer) \ | |
106 \ | |
107 if (peers->shpool) { \ | |
108 ngx_rwlock_unlock(&peer->lock); \ | |
109 } | |
110 | |
111 #else | |
112 | |
113 #define ngx_stream_upstream_rr_peers_rlock(peers) | |
114 #define ngx_stream_upstream_rr_peers_wlock(peers) | |
115 #define ngx_stream_upstream_rr_peers_unlock(peers) | |
116 #define ngx_stream_upstream_rr_peer_lock(peers, peer) | |
117 #define ngx_stream_upstream_rr_peer_unlock(peers, peer) | |
118 | |
119 #endif | |
120 | |
121 | |
122 typedef struct { | |
123 ngx_stream_upstream_rr_peers_t *peers; | |
124 ngx_stream_upstream_rr_peer_t *current; | |
125 uintptr_t *tried; | |
126 uintptr_t data; | |
127 } ngx_stream_upstream_rr_peer_data_t; | |
128 | |
129 | |
130 ngx_int_t ngx_stream_upstream_init_round_robin(ngx_conf_t *cf, | |
131 ngx_stream_upstream_srv_conf_t *us); | |
132 ngx_int_t ngx_stream_upstream_init_round_robin_peer(ngx_stream_session_t *s, | |
133 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
|
134 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
|
135 ngx_stream_upstream_resolved_t *ur); |
6115 | 136 ngx_int_t ngx_stream_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, |
137 void *data); | |
138 void ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, | |
139 void *data, ngx_uint_t state); | |
140 | |
141 | |
142 #endif /* _NGX_STREAM_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ */ |