annotate src/http/ngx_http_upstream_round_robin.h @ 4005:e56c1e9873cb

Correctly set body if it's preread and there are extra data. Previously all available data was used as body, resulting in garbage after real body e.g. in case of pipelined requests. Make sure to use only as many bytes as request's Content-Length specifies.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 18 Aug 2011 15:27:57 +0000
parents ebcee0063cd8
children 4fc91bae6f83 4919fb357a5d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #ifndef _NGX_HTTP_UPSTREAM_ROUND_ROBIN_H_INCLUDED_
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #define _NGX_HTTP_UPSTREAM_ROUND_ROBIN_H_INCLUDED_
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_config.h>
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_core.h>
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #include <ngx_http.h>
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 typedef struct {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 struct sockaddr *sockaddr;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 socklen_t socklen;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 ngx_str_t name;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20
1344
8f5b5641966c fair upstream weight balancer
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
21 ngx_int_t current_weight;
8f5b5641966c fair upstream weight balancer
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
22 ngx_int_t weight;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 ngx_uint_t fails;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 time_t accessed;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 ngx_uint_t max_fails;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 time_t fail_timeout;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 ngx_uint_t down; /* unsigned down:1; */
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31
1344
8f5b5641966c fair upstream weight balancer
Igor Sysoev <igor@sysoev.ru>
parents: 1284
diff changeset
32 #if (NGX_HTTP_SSL)
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 954
diff changeset
33 ngx_ssl_session_t *ssl_session; /* local to a process */
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 #endif
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 } ngx_http_upstream_rr_peer_t;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
38 typedef struct ngx_http_upstream_rr_peers_s ngx_http_upstream_rr_peers_t;
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
39
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
40 struct ngx_http_upstream_rr_peers_s {
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
41 ngx_uint_t single; /* unsigned single:1; */
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 ngx_uint_t number;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 ngx_uint_t last_cached;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 /* ngx_mutex_t *mutex; */
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 ngx_connection_t **cached;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 ngx_str_t *name;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
50 ngx_http_upstream_rr_peers_t *next;
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
51
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 ngx_http_upstream_rr_peer_t peer[1];
1378
0be898896d1a backup upstream servers
Igor Sysoev <igor@sysoev.ru>
parents: 1344
diff changeset
53 };
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 typedef struct {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 ngx_http_upstream_rr_peers_t *peers;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 ngx_uint_t current;
954
f16424aa5d89 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
59 uintptr_t *tried;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 uintptr_t data;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 } ngx_http_upstream_rr_peer_data_t;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 ngx_int_t ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 ngx_http_upstream_srv_conf_t *us);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 ngx_int_t ngx_http_upstream_init_round_robin_peer(ngx_http_request_t *r,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 ngx_http_upstream_srv_conf_t *us);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1378
diff changeset
68 ngx_int_t ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1378
diff changeset
69 ngx_http_upstream_resolved_t *ur);
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 ngx_int_t ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 void *data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 void ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 void *data, ngx_uint_t state);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 #if (NGX_HTTP_SSL)
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 954
diff changeset
76 ngx_int_t
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 954
diff changeset
77 ngx_http_upstream_set_round_robin_peer_session(ngx_peer_connection_t *pc,
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 954
diff changeset
78 void *data);
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 954
diff changeset
79 void ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 void *data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 #endif
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 #endif /* _NGX_HTTP_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ */