Mercurial > hg > nginx-mail
comparison src/http/modules/ngx_http_memcached_module.c @ 665:0b460e61bdcd default tip
Merge with nginx 1.0.0.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:22:17 +0400 |
parents | ff463db0be31 |
children |
comparison
equal
deleted
inserted
replaced
572:06419a2298a9 | 665:0b460e61bdcd |
---|---|
36 void *parent, void *child); | 36 void *parent, void *child); |
37 | 37 |
38 static char *ngx_http_memcached_pass(ngx_conf_t *cf, ngx_command_t *cmd, | 38 static char *ngx_http_memcached_pass(ngx_conf_t *cf, ngx_command_t *cmd, |
39 void *conf); | 39 void *conf); |
40 | 40 |
41 static char *ngx_http_memcached_upstream_max_fails_unsupported(ngx_conf_t *cf, | |
42 ngx_command_t *cmd, void *conf); | |
43 static char *ngx_http_memcached_upstream_fail_timeout_unsupported(ngx_conf_t *cf, | |
44 ngx_command_t *cmd, void *conf); | |
45 | |
46 | 41 |
47 static ngx_conf_bitmask_t ngx_http_memcached_next_upstream_masks[] = { | 42 static ngx_conf_bitmask_t ngx_http_memcached_next_upstream_masks[] = { |
48 { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR }, | 43 { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR }, |
49 { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT }, | 44 { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT }, |
50 { ngx_string("invalid_response"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER }, | 45 { ngx_string("invalid_response"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER }, |
61 ngx_http_memcached_pass, | 56 ngx_http_memcached_pass, |
62 NGX_HTTP_LOC_CONF_OFFSET, | 57 NGX_HTTP_LOC_CONF_OFFSET, |
63 0, | 58 0, |
64 NULL }, | 59 NULL }, |
65 | 60 |
61 { ngx_string("memcached_bind"), | |
62 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, | |
63 ngx_http_upstream_bind_set_slot, | |
64 NGX_HTTP_LOC_CONF_OFFSET, | |
65 offsetof(ngx_http_memcached_loc_conf_t, upstream.local), | |
66 NULL }, | |
67 | |
66 { ngx_string("memcached_connect_timeout"), | 68 { ngx_string("memcached_connect_timeout"), |
67 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, | 69 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, |
68 ngx_conf_set_msec_slot, | 70 ngx_conf_set_msec_slot, |
69 NGX_HTTP_LOC_CONF_OFFSET, | 71 NGX_HTTP_LOC_CONF_OFFSET, |
70 offsetof(ngx_http_memcached_loc_conf_t, upstream.connect_timeout), | 72 offsetof(ngx_http_memcached_loc_conf_t, upstream.connect_timeout), |
95 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, | 97 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, |
96 ngx_conf_set_bitmask_slot, | 98 ngx_conf_set_bitmask_slot, |
97 NGX_HTTP_LOC_CONF_OFFSET, | 99 NGX_HTTP_LOC_CONF_OFFSET, |
98 offsetof(ngx_http_memcached_loc_conf_t, upstream.next_upstream), | 100 offsetof(ngx_http_memcached_loc_conf_t, upstream.next_upstream), |
99 &ngx_http_memcached_next_upstream_masks }, | 101 &ngx_http_memcached_next_upstream_masks }, |
100 | |
101 { ngx_string("memcached_upstream_max_fails"), | |
102 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, | |
103 ngx_http_memcached_upstream_max_fails_unsupported, | |
104 0, | |
105 0, | |
106 NULL }, | |
107 | |
108 { ngx_string("memcached_upstream_fail_timeout"), | |
109 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, | |
110 ngx_http_memcached_upstream_fail_timeout_unsupported, | |
111 0, | |
112 0, | |
113 NULL }, | |
114 | 102 |
115 ngx_null_command | 103 ngx_null_command |
116 }; | 104 }; |
117 | 105 |
118 | 106 |
180 return NGX_HTTP_INTERNAL_SERVER_ERROR; | 168 return NGX_HTTP_INTERNAL_SERVER_ERROR; |
181 } | 169 } |
182 | 170 |
183 u = r->upstream; | 171 u = r->upstream; |
184 | 172 |
185 u->schema.len = sizeof("memcached://") - 1; | 173 ngx_str_set(&u->schema, "memcached://"); |
186 u->schema.data = (u_char *) "memcached://"; | |
187 | |
188 u->output.tag = (ngx_buf_tag_t) &ngx_http_memcached_module; | 174 u->output.tag = (ngx_buf_tag_t) &ngx_http_memcached_module; |
189 | 175 |
190 mlcf = ngx_http_get_module_loc_conf(r, ngx_http_memcached_module); | 176 mlcf = ngx_http_get_module_loc_conf(r, ngx_http_memcached_module); |
191 | 177 |
192 u->conf = &mlcf->upstream; | 178 u->conf = &mlcf->upstream; |
423 | 409 |
424 if (u->length == ctx->rest) { | 410 if (u->length == ctx->rest) { |
425 | 411 |
426 if (ngx_strncmp(b->last, | 412 if (ngx_strncmp(b->last, |
427 ngx_http_memcached_end + NGX_HTTP_MEMCACHED_END - ctx->rest, | 413 ngx_http_memcached_end + NGX_HTTP_MEMCACHED_END - ctx->rest, |
428 ctx->rest) | 414 bytes) |
429 != 0) | 415 != 0) |
430 { | 416 { |
431 ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0, | 417 ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0, |
432 "memcached sent invalid trailer"); | 418 "memcached sent invalid trailer"); |
419 | |
420 u->length = 0; | |
421 ctx->rest = 0; | |
422 | |
423 return NGX_OK; | |
433 } | 424 } |
434 | 425 |
435 u->length = 0; | 426 u->length -= bytes; |
436 ctx->rest = 0; | 427 ctx->rest -= bytes; |
437 | 428 |
438 return NGX_OK; | 429 return NGX_OK; |
439 } | 430 } |
440 | 431 |
441 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) { | 432 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) { |
628 return NGX_CONF_ERROR; | 619 return NGX_CONF_ERROR; |
629 } | 620 } |
630 | 621 |
631 return NGX_CONF_OK; | 622 return NGX_CONF_OK; |
632 } | 623 } |
633 | |
634 | |
635 static char * | |
636 ngx_http_memcached_upstream_max_fails_unsupported(ngx_conf_t *cf, | |
637 ngx_command_t *cmd, void *conf) | |
638 { | |
639 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
640 "\"memcached_upstream_max_fails\" is not supported, " | |
641 "use the \"max_fails\" parameter of the \"server\" directive ", | |
642 "inside the \"upstream\" block"); | |
643 | |
644 return NGX_CONF_ERROR; | |
645 } | |
646 | |
647 | |
648 static char * | |
649 ngx_http_memcached_upstream_fail_timeout_unsupported(ngx_conf_t *cf, | |
650 ngx_command_t *cmd, void *conf) | |
651 { | |
652 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
653 "\"memcached_upstream_fail_timeout\" is not supported, " | |
654 "use the \"fail_timeout\" parameter of the \"server\" directive ", | |
655 "inside the \"upstream\" block"); | |
656 | |
657 return NGX_CONF_ERROR; | |
658 } |