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 }