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;