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