Mercurial > hg > nginx
comparison src/http/ngx_http_file_cache.c @ 3696:29fcf794c082
ngx_http_file_cache_name()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 15 Jul 2010 13:46:32 +0000 |
parents | 1c016de812af |
children | 3c442bd5597b |
comparison
equal
deleted
inserted
replaced
3695:1c016de812af | 3696:29fcf794c082 |
---|---|
17 #if (NGX_HAVE_FILE_AIO) | 17 #if (NGX_HAVE_FILE_AIO) |
18 static void ngx_http_cache_aio_event_handler(ngx_event_t *ev); | 18 static void ngx_http_cache_aio_event_handler(ngx_event_t *ev); |
19 #endif | 19 #endif |
20 static ngx_int_t ngx_http_file_cache_exists(ngx_http_file_cache_t *cache, | 20 static ngx_int_t ngx_http_file_cache_exists(ngx_http_file_cache_t *cache, |
21 ngx_http_cache_t *c); | 21 ngx_http_cache_t *c); |
22 static ngx_int_t ngx_http_file_cache_name(ngx_http_request_t *r, | |
23 ngx_path_t *path); | |
22 static ngx_http_file_cache_node_t * | 24 static ngx_http_file_cache_node_t * |
23 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key); | 25 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key); |
24 static void ngx_http_file_cache_rbtree_insert_value(ngx_rbtree_node_t *temp, | 26 static void ngx_http_file_cache_rbtree_insert_value(ngx_rbtree_node_t *temp, |
25 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); | 27 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); |
26 static void ngx_http_file_cache_cleanup(void *data); | 28 static void ngx_http_file_cache_cleanup(void *data); |
178 | 180 |
179 | 181 |
180 ngx_int_t | 182 ngx_int_t |
181 ngx_http_file_cache_open(ngx_http_request_t *r) | 183 ngx_http_file_cache_open(ngx_http_request_t *r) |
182 { | 184 { |
183 u_char *p; | |
184 ngx_int_t rc, rv; | 185 ngx_int_t rc, rv; |
185 ngx_uint_t cold, test; | 186 ngx_uint_t cold, test; |
186 ngx_path_t *path; | |
187 ngx_http_cache_t *c; | 187 ngx_http_cache_t *c; |
188 ngx_pool_cleanup_t *cln; | 188 ngx_pool_cleanup_t *cln; |
189 ngx_open_file_info_t of; | 189 ngx_open_file_info_t of; |
190 ngx_http_file_cache_t *cache; | 190 ngx_http_file_cache_t *cache; |
191 ngx_http_core_loc_conf_t *clcf; | 191 ngx_http_core_loc_conf_t *clcf; |
247 test = cold ? 1 : 0; | 247 test = cold ? 1 : 0; |
248 rv = NGX_DECLINED; | 248 rv = NGX_DECLINED; |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 path = cache->path; | 252 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { |
253 | |
254 c->file.name.len = path->name.len + 1 + path->len | |
255 + 2 * NGX_HTTP_CACHE_KEY_LEN; | |
256 | |
257 c->file.name.data = ngx_pnalloc(r->pool, c->file.name.len + 1); | |
258 if (c->file.name.data == NULL) { | |
259 return NGX_ERROR; | 253 return NGX_ERROR; |
260 } | 254 } |
261 | |
262 ngx_memcpy(c->file.name.data, path->name.data, path->name.len); | |
263 | |
264 p = c->file.name.data + path->name.len + 1 + path->len; | |
265 p = ngx_hex_dump(p, c->key, NGX_HTTP_CACHE_KEY_LEN); | |
266 *p = '\0'; | |
267 | |
268 ngx_create_hashed_filename(path, c->file.name.data, c->file.name.len); | |
269 | |
270 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, | |
271 "cache file: \"%s\"", c->file.name.data); | |
272 | 255 |
273 if (!test) { | 256 if (!test) { |
274 return NGX_DECLINED; | 257 return NGX_DECLINED; |
275 } | 258 } |
276 | 259 |
572 | 555 |
573 return rc; | 556 return rc; |
574 } | 557 } |
575 | 558 |
576 | 559 |
560 static ngx_int_t | |
561 ngx_http_file_cache_name(ngx_http_request_t *r, ngx_path_t *path) | |
562 { | |
563 u_char *p; | |
564 ngx_http_cache_t *c; | |
565 | |
566 c = r->cache; | |
567 | |
568 c->file.name.len = path->name.len + 1 + path->len | |
569 + 2 * NGX_HTTP_CACHE_KEY_LEN; | |
570 | |
571 c->file.name.data = ngx_pnalloc(r->pool, c->file.name.len + 1); | |
572 if (c->file.name.data == NULL) { | |
573 return NGX_ERROR; | |
574 } | |
575 | |
576 ngx_memcpy(c->file.name.data, path->name.data, path->name.len); | |
577 | |
578 p = c->file.name.data + path->name.len + 1 + path->len; | |
579 p = ngx_hex_dump(p, c->key, NGX_HTTP_CACHE_KEY_LEN); | |
580 *p = '\0'; | |
581 | |
582 ngx_create_hashed_filename(path, c->file.name.data, c->file.name.len); | |
583 | |
584 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | |
585 "cache file: \"%s\"", c->file.name.data); | |
586 | |
587 return NGX_OK; | |
588 } | |
589 | |
590 | |
577 static ngx_http_file_cache_node_t * | 591 static ngx_http_file_cache_node_t * |
578 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key) | 592 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key) |
579 { | 593 { |
580 ngx_int_t rc; | 594 ngx_int_t rc; |
581 ngx_rbtree_key_t node_key; | 595 ngx_rbtree_key_t node_key; |