Mercurial > hg > nginx-quic
annotate src/http/ngx_http_file_cache.c @ 8253:7a55311b0dc3
Fixed double close of non-regular files in flv and mp4.
With introduction of open_file_cache in 1454:f497ed7682a7, opening a file
with ngx_open_cached_file() automatically adds a cleanup handler to close
the file. As such, calling ngx_close_file() directly for non-regular files
is no longer needed and will result in duplicate close() call.
In 1454:f497ed7682a7 ngx_close_file() call for non-regular files was removed
in the static module, but wasn't in the flv module. And the resulting
incorrect code was later copied to the mp4 module. Fix is to remove the
ngx_close_file() call from both modules.
Reported by Chris Newton.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 11 Dec 2020 13:42:07 +0300 |
parents | 3781de64e747 |
children | dd718d1cef3c |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
265
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
265
diff
changeset
|
2 /* |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
3 * Copyright (C) Igor Sysoev |
4412 | 4 * Copyright (C) Nginx, Inc. |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
265
diff
changeset
|
5 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
265
diff
changeset
|
6 |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #include <ngx_config.h> |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
9 #include <ngx_core.h> |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
10 #include <ngx_http.h> |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
11 #include <ngx_md5.h> |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
13 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
14 static ngx_int_t ngx_http_file_cache_lock(ngx_http_request_t *r, |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
15 ngx_http_cache_t *c); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
16 static void ngx_http_file_cache_lock_wait_handler(ngx_event_t *ev); |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
17 static void ngx_http_file_cache_lock_wait(ngx_http_request_t *r, |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
18 ngx_http_cache_t *c); |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
19 static ngx_int_t ngx_http_file_cache_read(ngx_http_request_t *r, |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
20 ngx_http_cache_t *c); |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
21 static ssize_t ngx_http_file_cache_aio_read(ngx_http_request_t *r, |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
22 ngx_http_cache_t *c); |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
23 #if (NGX_HAVE_FILE_AIO) |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
24 static void ngx_http_cache_aio_event_handler(ngx_event_t *ev); |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
25 #endif |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
26 #if (NGX_THREADS) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
27 static ngx_int_t ngx_http_cache_thread_handler(ngx_thread_task_t *task, |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
28 ngx_file_t *file); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
29 static void ngx_http_cache_thread_event_handler(ngx_event_t *ev); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
30 #endif |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
31 static ngx_int_t ngx_http_file_cache_exists(ngx_http_file_cache_t *cache, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
32 ngx_http_cache_t *c); |
3696 | 33 static ngx_int_t ngx_http_file_cache_name(ngx_http_request_t *r, |
34 ngx_path_t *path); | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
35 static ngx_http_file_cache_node_t * |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
36 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
37 static void ngx_http_file_cache_rbtree_insert_value(ngx_rbtree_node_t *temp, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
38 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
39 static void ngx_http_file_cache_vary(ngx_http_request_t *r, u_char *vary, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
40 size_t len, u_char *hash); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
41 static void ngx_http_file_cache_vary_header(ngx_http_request_t *r, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
42 ngx_md5_t *md5, ngx_str_t *name); |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
43 static ngx_int_t ngx_http_file_cache_reopen(ngx_http_request_t *r, |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
44 ngx_http_cache_t *c); |
5959
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
45 static ngx_int_t ngx_http_file_cache_update_variant(ngx_http_request_t *r, |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
46 ngx_http_cache_t *c); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
47 static void ngx_http_file_cache_cleanup(void *data); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
48 static time_t ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
49 static time_t ngx_http_file_cache_expire(ngx_http_file_cache_t *cache); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
50 static void ngx_http_file_cache_delete(ngx_http_file_cache_t *cache, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
51 ngx_queue_t *q, u_char *name); |
4018
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
52 static void ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
53 static ngx_int_t ngx_http_file_cache_noop(ngx_tree_ctx_t *ctx, |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
54 ngx_str_t *path); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
55 static ngx_int_t ngx_http_file_cache_manage_file(ngx_tree_ctx_t *ctx, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
56 ngx_str_t *path); |
5968
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
57 static ngx_int_t ngx_http_file_cache_manage_directory(ngx_tree_ctx_t *ctx, |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
58 ngx_str_t *path); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
59 static ngx_int_t ngx_http_file_cache_add_file(ngx_tree_ctx_t *ctx, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
60 ngx_str_t *path); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
61 static ngx_int_t ngx_http_file_cache_add(ngx_http_file_cache_t *cache, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
62 ngx_http_cache_t *c); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
63 static ngx_int_t ngx_http_file_cache_delete_file(ngx_tree_ctx_t *ctx, |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
64 ngx_str_t *path); |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
65 static void ngx_http_file_cache_set_watermark(ngx_http_file_cache_t *cache); |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
66 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
67 |
2952 | 68 ngx_str_t ngx_http_cache_status[] = { |
69 ngx_string("MISS"), | |
3699
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
70 ngx_string("BYPASS"), |
2952 | 71 ngx_string("EXPIRED"), |
72 ngx_string("STALE"), | |
73 ngx_string("UPDATING"), | |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
74 ngx_string("REVALIDATED"), |
2952 | 75 ngx_string("HIT") |
76 }; | |
77 | |
78 | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
79 static u_char ngx_http_file_cache_key[] = { LF, 'K', 'E', 'Y', ':', ' ' }; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
80 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
81 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
82 static ngx_int_t |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
83 ngx_http_file_cache_init(ngx_shm_zone_t *shm_zone, void *data) |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
84 { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
85 ngx_http_file_cache_t *ocache = data; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
86 |
2611
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
87 size_t len; |
3017
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
88 ngx_uint_t n; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
89 ngx_http_file_cache_t *cache; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
90 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
91 cache = shm_zone->data; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
92 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
93 if (ocache) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
94 if (ngx_strcmp(cache->path->name.data, ocache->path->name.data) != 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
95 ngx_log_error(NGX_LOG_EMERG, shm_zone->shm.log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
96 "cache \"%V\" uses the \"%V\" cache path " |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
97 "while previously it used the \"%V\" cache path", |
2716
d5896f6608e8
move zone name from ngx_shm_zone_t to ngx_shm_t to use Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2694
diff
changeset
|
98 &shm_zone->shm.name, &cache->path->name, |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
99 &ocache->path->name); |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
100 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
101 return NGX_ERROR; |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
102 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
103 |
6617
8bf484eef9ab
Use NGX_MAX_PATH_LEVEL where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents:
6539
diff
changeset
|
104 for (n = 0; n < NGX_MAX_PATH_LEVEL; n++) { |
3017
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
105 if (cache->path->level[n] != ocache->path->level[n]) { |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
106 ngx_log_error(NGX_LOG_EMERG, shm_zone->shm.log, 0, |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
107 "cache \"%V\" had previously different levels", |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
108 &shm_zone->shm.name); |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
109 return NGX_ERROR; |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
110 } |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
111 } |
c466605d9426
test cache path levels while reconfiguration
Igor Sysoev <igor@sysoev.ru>
parents:
2952
diff
changeset
|
112 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
113 cache->sh = ocache->sh; |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
114 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
115 cache->shpool = ocache->shpool; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
116 cache->bsize = ocache->bsize; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
117 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
118 cache->max_size /= cache->bsize; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
119 |
3018 | 120 if (!cache->sh->cold || cache->sh->loading) { |
121 cache->path->loader = NULL; | |
122 } | |
123 | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
124 return NGX_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
125 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
126 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
127 cache->shpool = (ngx_slab_pool_t *) shm_zone->shm.addr; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
128 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
129 if (shm_zone->shm.exists) { |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
130 cache->sh = cache->shpool->data; |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
131 cache->bsize = ngx_fs_bsize(cache->path->name.data); |
7075
72d3aefc2993
Cache: fixed max_size on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
7002
diff
changeset
|
132 cache->max_size /= cache->bsize; |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
133 |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
134 return NGX_OK; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
135 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
136 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
137 cache->sh = ngx_slab_alloc(cache->shpool, sizeof(ngx_http_file_cache_sh_t)); |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
138 if (cache->sh == NULL) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
139 return NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
140 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
141 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
142 cache->shpool->data = cache->sh; |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
143 |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
144 ngx_rbtree_init(&cache->sh->rbtree, &cache->sh->sentinel, |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
145 ngx_http_file_cache_rbtree_insert_value); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
146 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
147 ngx_queue_init(&cache->sh->queue); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
148 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
149 cache->sh->cold = 1; |
3018 | 150 cache->sh->loading = 0; |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
151 cache->sh->size = 0; |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
152 cache->sh->count = 0; |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
153 cache->sh->watermark = (ngx_uint_t) -1; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
154 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
155 cache->bsize = ngx_fs_bsize(cache->path->name.data); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
156 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
157 cache->max_size /= cache->bsize; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
158 |
2716
d5896f6608e8
move zone name from ngx_shm_zone_t to ngx_shm_t to use Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2694
diff
changeset
|
159 len = sizeof(" in cache keys zone \"\"") + shm_zone->shm.name.len; |
2611
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
160 |
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
161 cache->shpool->log_ctx = ngx_slab_alloc(cache->shpool, len); |
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
162 if (cache->shpool->log_ctx == NULL) { |
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
163 return NGX_ERROR; |
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
164 } |
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
165 |
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
166 ngx_sprintf(cache->shpool->log_ctx, " in cache keys zone \"%V\"%Z", |
2716
d5896f6608e8
move zone name from ngx_shm_zone_t to ngx_shm_t to use Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2694
diff
changeset
|
167 &shm_zone->shm.name); |
2611
2bce3f6416c6
improve ngx_slab_alloc() error logging
Igor Sysoev <igor@sysoev.ru>
parents:
2606
diff
changeset
|
168 |
5822
063f7e75f9ef
Upstream: suppressed the file cache slab allocator error messages.
Roman Arutyunyan <arut@nginx.com>
parents:
5737
diff
changeset
|
169 cache->shpool->log_nomem = 0; |
063f7e75f9ef
Upstream: suppressed the file cache slab allocator error messages.
Roman Arutyunyan <arut@nginx.com>
parents:
5737
diff
changeset
|
170 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
171 return NGX_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
172 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
173 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
174 |
3697 | 175 ngx_int_t |
3698
d11227f0107f
rename ngx_http_file_cache_create() to ngx_http_file_cache_new()
Igor Sysoev <igor@sysoev.ru>
parents:
3697
diff
changeset
|
176 ngx_http_file_cache_new(ngx_http_request_t *r) |
3697 | 177 { |
178 ngx_http_cache_t *c; | |
179 | |
180 c = ngx_pcalloc(r->pool, sizeof(ngx_http_cache_t)); | |
181 if (c == NULL) { | |
182 return NGX_ERROR; | |
183 } | |
184 | |
185 if (ngx_array_init(&c->keys, r->pool, 4, sizeof(ngx_str_t)) != NGX_OK) { | |
186 return NGX_ERROR; | |
187 } | |
188 | |
189 r->cache = c; | |
190 c->file.log = r->connection->log; | |
3704
f220e5a5fb5e
initialize r->cache->file.fd with NGX_INVALID_FILE
Igor Sysoev <igor@sysoev.ru>
parents:
3699
diff
changeset
|
191 c->file.fd = NGX_INVALID_FILE; |
3697 | 192 |
193 return NGX_OK; | |
194 } | |
195 | |
196 | |
3699
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
197 ngx_int_t |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
198 ngx_http_file_cache_create(ngx_http_request_t *r) |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
199 { |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
200 ngx_http_cache_t *c; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
201 ngx_pool_cleanup_t *cln; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
202 ngx_http_file_cache_t *cache; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
203 |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
204 c = r->cache; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
205 cache = c->file_cache; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
206 |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
207 cln = ngx_pool_cleanup_add(r->pool, 0); |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
208 if (cln == NULL) { |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
209 return NGX_ERROR; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
210 } |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
211 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
212 cln->handler = ngx_http_file_cache_cleanup; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
213 cln->data = c; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
214 |
3699
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
215 if (ngx_http_file_cache_exists(cache, c) == NGX_ERROR) { |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
216 return NGX_ERROR; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
217 } |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
218 |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
219 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
220 return NGX_ERROR; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
221 } |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
222 |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
223 return NGX_OK; |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
224 } |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
225 |
b0a0686a85bb
proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents:
3698
diff
changeset
|
226 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
227 void |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
228 ngx_http_file_cache_create_key(ngx_http_request_t *r) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
229 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
230 size_t len; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
231 ngx_str_t *key; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
232 ngx_uint_t i; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
233 ngx_md5_t md5; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
234 ngx_http_cache_t *c; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
235 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
236 c = r->cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
237 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
238 len = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
239 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
240 ngx_crc32_init(c->crc32); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
241 ngx_md5_init(&md5); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
242 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
243 key = c->keys.elts; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
244 for (i = 0; i < c->keys.nelts; i++) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
245 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
246 "http cache key: \"%V\"", &key[i]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
247 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
248 len += key[i].len; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
249 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
250 ngx_crc32_update(&c->crc32, key[i].data, key[i].len); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
251 ngx_md5_update(&md5, key[i].data, key[i].len); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
252 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
253 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
254 c->header_start = sizeof(ngx_http_file_cache_header_t) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
255 + sizeof(ngx_http_file_cache_key) + len + 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
256 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
257 ngx_crc32_final(c->crc32); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
258 ngx_md5_final(c->key, &md5); |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
259 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
260 ngx_memcpy(c->main, c->key, NGX_HTTP_CACHE_KEY_LEN); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
261 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
262 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
263 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
264 ngx_int_t |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
265 ngx_http_file_cache_open(ngx_http_request_t *r) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
266 { |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
267 ngx_int_t rc, rv; |
5984
3f568dd68af1
Cache: reduced diffs to the plus version of nginx.
Ruslan Ermilov <ru@nginx.com>
parents:
5968
diff
changeset
|
268 ngx_uint_t test; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
269 ngx_http_cache_t *c; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
270 ngx_pool_cleanup_t *cln; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
271 ngx_open_file_info_t of; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
272 ngx_http_file_cache_t *cache; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
273 ngx_http_core_loc_conf_t *clcf; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
274 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
275 c = r->cache; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
276 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
277 if (c->waiting) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
278 return NGX_AGAIN; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
279 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
280 |
5879
c525c0454aa5
Cache: c->reading flag introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5878
diff
changeset
|
281 if (c->reading) { |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
282 return ngx_http_file_cache_read(r, c); |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
283 } |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
284 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
285 cache = c->file_cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
286 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
287 if (c->node == NULL) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
288 cln = ngx_pool_cleanup_add(r->pool, 0); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
289 if (cln == NULL) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
290 return NGX_ERROR; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
291 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
292 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
293 cln->handler = ngx_http_file_cache_cleanup; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
294 cln->data = c; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
295 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
296 |
8107
847fd35f94de
Cache: reset c->body_start when reading a variant on Vary mismatch.
Sergey Kandaurov <pluknet@nginx.com>
parents:
7973
diff
changeset
|
297 c->buffer_size = c->body_start; |
847fd35f94de
Cache: reset c->body_start when reading a variant on Vary mismatch.
Sergey Kandaurov <pluknet@nginx.com>
parents:
7973
diff
changeset
|
298 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
299 rc = ngx_http_file_cache_exists(cache, c); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
300 |
2926
80a314b63c56
delete useless r->cache->uses
Igor Sysoev <igor@sysoev.ru>
parents:
2925
diff
changeset
|
301 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
80a314b63c56
delete useless r->cache->uses
Igor Sysoev <igor@sysoev.ru>
parents:
2925
diff
changeset
|
302 "http file cache exists: %i e:%d", rc, c->exists); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
303 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
304 if (rc == NGX_ERROR) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
305 return rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
306 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
307 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
308 if (rc == NGX_AGAIN) { |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
309 return NGX_HTTP_CACHE_SCARCE; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
310 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
311 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
312 if (rc == NGX_OK) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
313 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
314 if (c->error) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
315 return c->error; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
316 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
317 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
318 c->temp_file = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
319 test = c->exists ? 1 : 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
320 rv = NGX_DECLINED; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
321 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
322 } else { /* rc == NGX_DECLINED */ |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
323 |
5984
3f568dd68af1
Cache: reduced diffs to the plus version of nginx.
Ruslan Ermilov <ru@nginx.com>
parents:
5968
diff
changeset
|
324 test = cache->sh->cold ? 1 : 0; |
3f568dd68af1
Cache: reduced diffs to the plus version of nginx.
Ruslan Ermilov <ru@nginx.com>
parents:
5968
diff
changeset
|
325 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
326 if (c->min_uses > 1) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
327 |
5984
3f568dd68af1
Cache: reduced diffs to the plus version of nginx.
Ruslan Ermilov <ru@nginx.com>
parents:
5968
diff
changeset
|
328 if (!test) { |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
329 return NGX_HTTP_CACHE_SCARCE; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
330 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
331 |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
332 rv = NGX_HTTP_CACHE_SCARCE; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
333 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
334 } else { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
335 c->temp_file = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
336 rv = NGX_DECLINED; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
337 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
338 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
339 |
3696 | 340 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
341 return NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
342 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
343 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
344 if (!test) { |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
345 goto done; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
346 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
347 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
348 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
349 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
350 ngx_memzero(&of, sizeof(ngx_open_file_info_t)); |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
351 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
352 of.uniq = c->uniq; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
353 of.valid = clcf->open_file_cache_valid; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
354 of.min_uses = clcf->open_file_cache_min_uses; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
355 of.events = clcf->open_file_cache_events; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
356 of.directio = NGX_OPEN_FILE_DIRECTIO_OFF; |
3178 | 357 of.read_ahead = clcf->read_ahead; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
358 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
359 if (ngx_open_cached_file(clcf->open_file_cache, &c->file.name, &of, r->pool) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
360 != NGX_OK) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
361 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
362 switch (of.err) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
363 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
364 case 0: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
365 return NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
366 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
367 case NGX_ENOENT: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
368 case NGX_ENOTDIR: |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
369 goto done; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
370 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
371 default: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
372 ngx_log_error(NGX_LOG_CRIT, r->connection->log, of.err, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
373 ngx_open_file_n " \"%s\" failed", c->file.name.data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
374 return NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
375 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
376 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
377 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
378 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
379 "http file cache fd: %d", of.fd); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
380 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
381 c->file.fd = of.fd; |
2603
f9bd7999eb08
fix segfault if ngx_read_file() will fail
Igor Sysoev <igor@sysoev.ru>
parents:
2600
diff
changeset
|
382 c->file.log = r->connection->log; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
383 c->uniq = of.uniq; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
384 c->length = of.size; |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
385 c->fs_size = (of.fs_size + cache->bsize - 1) / cache->bsize; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
386 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
387 c->buf = ngx_create_temp_buf(r->pool, c->body_start); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
388 if (c->buf == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
389 return NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
390 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
391 |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
392 return ngx_http_file_cache_read(r, c); |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
393 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
394 done: |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
395 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
396 if (rv == NGX_DECLINED) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
397 return ngx_http_file_cache_lock(r, c); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
398 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
399 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
400 return rv; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
401 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
402 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
403 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
404 static ngx_int_t |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
405 ngx_http_file_cache_lock(ngx_http_request_t *r, ngx_http_cache_t *c) |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
406 { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
407 ngx_msec_t now, timer; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
408 ngx_http_file_cache_t *cache; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
409 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
410 if (!c->lock) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
411 return NGX_DECLINED; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
412 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
413 |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
414 now = ngx_current_msec; |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
415 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
416 cache = c->file_cache; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
417 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
418 ngx_shmtx_lock(&cache->shpool->mutex); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
419 |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
420 timer = c->node->lock_time - now; |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
421 |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
422 if (!c->node->updating || (ngx_msec_int_t) timer <= 0) { |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
423 c->node->updating = 1; |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
424 c->node->lock_time = now + c->lock_age; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
425 c->updating = 1; |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
426 c->lock_time = c->node->lock_time; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
427 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
428 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
429 ngx_shmtx_unlock(&cache->shpool->mutex); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
430 |
4387
e8181eeddaf8
Fixed build without debug.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4385
diff
changeset
|
431 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
432 "http file cache lock u:%d wt:%M", |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
433 c->updating, c->wait_time); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
434 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
435 if (c->updating) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
436 return NGX_DECLINED; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
437 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
438 |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
439 if (c->lock_timeout == 0) { |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
440 return NGX_HTTP_CACHE_SCARCE; |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
441 } |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
442 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
443 c->waiting = 1; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
444 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
445 if (c->wait_time == 0) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
446 c->wait_time = now + c->lock_timeout; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
447 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
448 c->wait_event.handler = ngx_http_file_cache_lock_wait_handler; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
449 c->wait_event.data = r; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
450 c->wait_event.log = r->connection->log; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
451 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
452 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
453 timer = c->wait_time - now; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
454 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
455 ngx_add_timer(&c->wait_event, (timer > 500) ? 500 : timer); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
456 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
457 r->main->blocked++; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
458 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
459 return NGX_AGAIN; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
460 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
461 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
462 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
463 static void |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
464 ngx_http_file_cache_lock_wait_handler(ngx_event_t *ev) |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
465 { |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
466 ngx_connection_t *c; |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
467 ngx_http_request_t *r; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
468 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
469 r = ev->data; |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
470 c = r->connection; |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
471 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
472 ngx_http_set_log_request(c->log, r); |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
473 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
474 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
475 "http file cache wait: \"%V?%V\"", &r->uri, &r->args); |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
476 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
477 ngx_http_file_cache_lock_wait(r, r->cache); |
5929
f436e9a60b8f
Cache: proper wakeup of subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5928
diff
changeset
|
478 |
f436e9a60b8f
Cache: proper wakeup of subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5928
diff
changeset
|
479 ngx_http_run_posted_requests(c); |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
480 } |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
481 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
482 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
483 static void |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
484 ngx_http_file_cache_lock_wait(ngx_http_request_t *r, ngx_http_cache_t *c) |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
485 { |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
486 ngx_uint_t wait; |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
487 ngx_msec_t now, timer; |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
488 ngx_http_file_cache_t *cache; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
489 |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
490 now = ngx_current_msec; |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
491 |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
492 timer = c->wait_time - now; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
493 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
494 if ((ngx_msec_int_t) timer <= 0) { |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
495 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
496 "cache lock timeout"); |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
497 c->lock_timeout = 0; |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
498 goto wakeup; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
499 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
500 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
501 cache = c->file_cache; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
502 wait = 0; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
503 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
504 ngx_shmtx_lock(&cache->shpool->mutex); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
505 |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
506 timer = c->node->lock_time - now; |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
507 |
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
508 if (c->node->updating && (ngx_msec_int_t) timer > 0) { |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
509 wait = 1; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
510 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
511 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
512 ngx_shmtx_unlock(&cache->shpool->mutex); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
513 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
514 if (wait) { |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
515 ngx_add_timer(&c->wait_event, (timer > 500) ? 500 : timer); |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
516 return; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
517 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
518 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
519 wakeup: |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
520 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
521 c->waiting = 0; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
522 r->main->blocked--; |
5929
f436e9a60b8f
Cache: proper wakeup of subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5928
diff
changeset
|
523 r->write_event_handler(r); |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
524 } |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
525 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
526 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
527 static ngx_int_t |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
528 ngx_http_file_cache_read(ngx_http_request_t *r, ngx_http_cache_t *c) |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
529 { |
6243
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
530 u_char *p; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
531 time_t now; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
532 ssize_t n; |
6243
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
533 ngx_str_t *key; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
534 ngx_int_t rc; |
6243
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
535 ngx_uint_t i; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
536 ngx_http_file_cache_t *cache; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
537 ngx_http_file_cache_header_t *h; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
538 |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
539 n = ngx_http_file_cache_aio_read(r, c); |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
540 |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
541 if (n < 0) { |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
542 return n; |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
543 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
544 |
3369
479468a7d982
fix handling cached HTTP/0.9 response
Igor Sysoev <igor@sysoev.ru>
parents:
3294
diff
changeset
|
545 if ((size_t) n < c->header_start) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
546 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
477 | 547 "cache file \"%s\" is too small", c->file.name.data); |
3971
44f4fc874b2f
do not close connection if cache file is too small: replace it with valid one
Igor Sysoev <igor@sysoev.ru>
parents:
3970
diff
changeset
|
548 return NGX_DECLINED; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
549 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
550 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
551 h = (ngx_http_file_cache_header_t *) c->buf->pos; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
552 |
5736
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
553 if (h->version != NGX_HTTP_CACHE_VERSION) { |
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
554 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, |
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
555 "cache file \"%s\" version mismatch", c->file.name.data); |
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
556 return NGX_DECLINED; |
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
557 } |
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
558 |
6860
f18c285c2e59
Win32: fixed some warnings reported by Borland C.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6795
diff
changeset
|
559 if (h->crc32 != c->crc32 || (size_t) h->header_start != c->header_start) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
560 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
561 "cache file \"%s\" has md5 collision", c->file.name.data); |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
562 return NGX_DECLINED; |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
563 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
564 |
6243
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
565 p = c->buf->pos + sizeof(ngx_http_file_cache_header_t) |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
566 + sizeof(ngx_http_file_cache_key); |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
567 |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
568 key = c->keys.elts; |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
569 for (i = 0; i < c->keys.nelts; i++) { |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
570 if (ngx_memcmp(p, key[i].data, key[i].len) != 0) { |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
571 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
572 "cache file \"%s\" has md5 collision", |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
573 c->file.name.data); |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
574 return NGX_DECLINED; |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
575 } |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
576 |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
577 p += key[i].len; |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
578 } |
4821fc788c12
Cache: check the whole cache key in addition to hashes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6063
diff
changeset
|
579 |
5359
2fda9065d0f4
Win32: Borland C compatibility fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5341
diff
changeset
|
580 if ((size_t) h->body_start > c->body_start) { |
4339
6f97afc238de
Cache: handling of cache files with long headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4338
diff
changeset
|
581 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
6f97afc238de
Cache: handling of cache files with long headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4338
diff
changeset
|
582 "cache file \"%s\" has too long header", |
6f97afc238de
Cache: handling of cache files with long headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4338
diff
changeset
|
583 c->file.name.data); |
6f97afc238de
Cache: handling of cache files with long headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4338
diff
changeset
|
584 return NGX_DECLINED; |
6f97afc238de
Cache: handling of cache files with long headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4338
diff
changeset
|
585 } |
6f97afc238de
Cache: handling of cache files with long headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4338
diff
changeset
|
586 |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
587 if (h->vary_len > NGX_HTTP_CACHE_VARY_LEN) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
588 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
589 "cache file \"%s\" has incorrect vary length", |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
590 c->file.name.data); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
591 return NGX_DECLINED; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
592 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
593 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
594 if (h->vary_len) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
595 ngx_http_file_cache_vary(r, h->vary, h->vary_len, c->variant); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
596 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
597 if (ngx_memcmp(c->variant, h->variant, NGX_HTTP_CACHE_KEY_LEN) != 0) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
598 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
599 "http file cache vary mismatch"); |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
600 return ngx_http_file_cache_reopen(r, c); |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
601 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
602 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
603 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
604 c->buf->last += n; |
477 | 605 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
606 c->valid_sec = h->valid_sec; |
6905
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
607 c->updating_sec = h->updating_sec; |
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
608 c->error_sec = h->error_sec; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
609 c->last_modified = h->last_modified; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
610 c->date = h->date; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
611 c->valid_msec = h->valid_msec; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
612 c->body_start = h->body_start; |
5737
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
613 c->etag.len = h->etag_len; |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
614 c->etag.data = h->etag; |
477 | 615 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
616 r->cached = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
617 |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
618 cache = c->file_cache; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
619 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
620 if (cache->sh->cold) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
621 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
622 ngx_shmtx_lock(&cache->shpool->mutex); |
477 | 623 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
624 if (!c->node->exists) { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
625 c->node->uses = 1; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
626 c->node->body_start = c->body_start; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
627 c->node->exists = 1; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
628 c->node->uniq = c->uniq; |
4034
e2c075e774b6
Cache size accounting fix: actual cache size on disk was less than
Igor Sysoev <igor@sysoev.ru>
parents:
4018
diff
changeset
|
629 c->node->fs_size = c->fs_size; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
630 |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
631 cache->sh->size += c->fs_size; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
632 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
633 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
634 ngx_shmtx_unlock(&cache->shpool->mutex); |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
635 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
636 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
637 now = ngx_time(); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
638 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
639 if (c->valid_sec < now) { |
6905
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
640 c->stale_updating = c->valid_sec + c->updating_sec >= now; |
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
641 c->stale_error = c->valid_sec + c->error_sec >= now; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
642 |
2927
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
643 ngx_shmtx_lock(&cache->shpool->mutex); |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
644 |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
645 if (c->node->updating) { |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
646 rc = NGX_HTTP_CACHE_UPDATING; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
647 |
2927
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
648 } else { |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
649 c->node->updating = 1; |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
650 c->updating = 1; |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
651 c->lock_time = c->node->lock_time; |
2927
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
652 rc = NGX_HTTP_CACHE_STALE; |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
653 } |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
654 |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
655 ngx_shmtx_unlock(&cache->shpool->mutex); |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
656 |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
657 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
658 "http file cache expired: %i %T %T", |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
659 rc, c->valid_sec, now); |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
660 |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
661 return rc; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
662 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
663 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
664 return NGX_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
665 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
666 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
667 |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
668 static ssize_t |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
669 ngx_http_file_cache_aio_read(ngx_http_request_t *r, ngx_http_cache_t *c) |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
670 { |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
671 #if (NGX_HAVE_FILE_AIO || NGX_THREADS) |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
672 ssize_t n; |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
673 ngx_http_core_loc_conf_t *clcf; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
674 |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
675 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
676 #endif |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
677 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
678 #if (NGX_HAVE_FILE_AIO) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
679 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
680 if (clcf->aio == NGX_HTTP_AIO_ON && ngx_file_aio) { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
681 n = ngx_file_aio_read(&c->file, c->buf->pos, c->body_start, 0, r->pool); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
682 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
683 if (n != NGX_AGAIN) { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
684 c->reading = 0; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
685 return n; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
686 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
687 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
688 c->reading = 1; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
689 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
690 c->file.aio->data = r; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
691 c->file.aio->handler = ngx_http_cache_aio_event_handler; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
692 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
693 r->main->blocked++; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
694 r->aio = 1; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
695 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
696 return NGX_AGAIN; |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
697 } |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
698 |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
699 #endif |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
700 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
701 #if (NGX_THREADS) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
702 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
703 if (clcf->aio == NGX_HTTP_AIO_THREADS) { |
6441
9fd738b85fad
Threads: task pointer stored in ngx_file_t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6243
diff
changeset
|
704 c->file.thread_task = c->thread_task; |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
705 c->file.thread_handler = ngx_http_cache_thread_handler; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
706 c->file.thread_ctx = r; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
707 |
6441
9fd738b85fad
Threads: task pointer stored in ngx_file_t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6243
diff
changeset
|
708 n = ngx_thread_read(&c->file, c->buf->pos, c->body_start, 0, r->pool); |
9fd738b85fad
Threads: task pointer stored in ngx_file_t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6243
diff
changeset
|
709 |
9fd738b85fad
Threads: task pointer stored in ngx_file_t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6243
diff
changeset
|
710 c->thread_task = c->file.thread_task; |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
711 c->reading = (n == NGX_AGAIN); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
712 |
3294
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
713 return n; |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
714 } |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
715 |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
716 #endif |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
717 |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
718 return ngx_read_file(&c->file, c->buf->pos, c->body_start, 0); |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
719 } |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
720 |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
721 |
04cfc09b8b8d
export aio presence knowledge to prevent using "aio sendfile",
Igor Sysoev <igor@sysoev.ru>
parents:
3195
diff
changeset
|
722 #if (NGX_HAVE_FILE_AIO) |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
723 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
724 static void |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
725 ngx_http_cache_aio_event_handler(ngx_event_t *ev) |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
726 { |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
727 ngx_event_aio_t *aio; |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
728 ngx_connection_t *c; |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
729 ngx_http_request_t *r; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
730 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
731 aio = ev->data; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
732 r = aio->data; |
5928
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
733 c = r->connection; |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
734 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
735 ngx_http_set_log_request(c->log, r); |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
736 |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
737 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, |
8dfee01ff0bd
Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5905
diff
changeset
|
738 "http file cache aio: \"%V?%V\"", &r->uri, &r->args); |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
739 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
740 r->main->blocked--; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
741 r->aio = 0; |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
742 |
5929
f436e9a60b8f
Cache: proper wakeup of subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5928
diff
changeset
|
743 r->write_event_handler(r); |
f436e9a60b8f
Cache: proper wakeup of subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5928
diff
changeset
|
744 |
f436e9a60b8f
Cache: proper wakeup of subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5928
diff
changeset
|
745 ngx_http_run_posted_requests(c); |
3052
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
746 } |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
747 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
748 #endif |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
749 |
6060225e9261
FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents:
3024
diff
changeset
|
750 |
6063
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
751 #if (NGX_THREADS) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
752 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
753 static ngx_int_t |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
754 ngx_http_cache_thread_handler(ngx_thread_task_t *task, ngx_file_t *file) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
755 { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
756 ngx_str_t name; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
757 ngx_thread_pool_t *tp; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
758 ngx_http_request_t *r; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
759 ngx_http_core_loc_conf_t *clcf; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
760 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
761 r = file->thread_ctx; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
762 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
763 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
764 tp = clcf->thread_pool; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
765 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
766 if (tp == NULL) { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
767 if (ngx_http_complex_value(r, clcf->thread_pool_value, &name) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
768 != NGX_OK) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
769 { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
770 return NGX_ERROR; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
771 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
772 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
773 tp = ngx_thread_pool_get((ngx_cycle_t *) ngx_cycle, &name); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
774 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
775 if (tp == NULL) { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
776 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
777 "thread pool \"%V\" not found", &name); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
778 return NGX_ERROR; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
779 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
780 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
781 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
782 task->event.data = r; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
783 task->event.handler = ngx_http_cache_thread_event_handler; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
784 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
785 if (ngx_thread_task_post(tp, task) != NGX_OK) { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
786 return NGX_ERROR; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
787 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
788 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
789 r->main->blocked++; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
790 r->aio = 1; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
791 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
792 return NGX_OK; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
793 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
794 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
795 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
796 static void |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
797 ngx_http_cache_thread_event_handler(ngx_event_t *ev) |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
798 { |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
799 ngx_connection_t *c; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
800 ngx_http_request_t *r; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
801 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
802 r = ev->data; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
803 c = r->connection; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
804 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
805 ngx_http_set_log_request(c->log, r); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
806 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
807 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
808 "http file cache thread: \"%V?%V\"", &r->uri, &r->args); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
809 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
810 r->main->blocked--; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
811 r->aio = 0; |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
812 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
813 r->write_event_handler(r); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
814 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
815 ngx_http_run_posted_requests(c); |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
816 } |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
817 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
818 #endif |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
819 |
d698c300b9ff
Cache: added support for reading of the header in thread pools.
Valentin Bartenev <vbart@nginx.com>
parents:
6022
diff
changeset
|
820 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
821 static ngx_int_t |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
822 ngx_http_file_cache_exists(ngx_http_file_cache_t *cache, ngx_http_cache_t *c) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
823 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
824 ngx_int_t rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
825 ngx_http_file_cache_node_t *fcn; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
826 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
827 ngx_shmtx_lock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
828 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
829 fcn = c->node; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
830 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
831 if (fcn == NULL) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
832 fcn = ngx_http_file_cache_lookup(cache, c->key); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
833 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
834 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
835 if (fcn) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
836 ngx_queue_remove(&fcn->queue); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
837 |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
838 if (c->node == NULL) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
839 fcn->uses++; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
840 fcn->count++; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
841 } |
3724
e9f0a2497d3c
count cache key node usage for cached error statuses
Igor Sysoev <igor@sysoev.ru>
parents:
3723
diff
changeset
|
842 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
843 if (fcn->error) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
844 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
845 if (fcn->valid_sec < ngx_time()) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
846 goto renew; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
847 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
848 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
849 rc = NGX_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
850 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
851 goto done; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
852 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
853 |
3966
9c425f22ea36
fuse two if's in one condition
Igor Sysoev <igor@sysoev.ru>
parents:
3965
diff
changeset
|
854 if (fcn->exists || fcn->uses >= c->min_uses) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
855 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
856 c->exists = fcn->exists; |
8108
3781de64e747
Cache: keep c->body_start when Vary changes (ticket #2029).
Sergey Kandaurov <pluknet@nginx.com>
parents:
8107
diff
changeset
|
857 if (fcn->body_start && !c->update_variant) { |
3967
83e41f6f6d96
The cache loader performs two tasks: inserting cache objects in inactivity
Igor Sysoev <igor@sysoev.ru>
parents:
3966
diff
changeset
|
858 c->body_start = fcn->body_start; |
83e41f6f6d96
The cache loader performs two tasks: inserting cache objects in inactivity
Igor Sysoev <igor@sysoev.ru>
parents:
3966
diff
changeset
|
859 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
860 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
861 rc = NGX_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
862 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
863 goto done; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
864 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
865 |
3966
9c425f22ea36
fuse two if's in one condition
Igor Sysoev <igor@sysoev.ru>
parents:
3965
diff
changeset
|
866 rc = NGX_AGAIN; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
867 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
868 goto done; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
869 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
870 |
5726
25ade23cf281
Core: added ngx_slab_calloc() and ngx_slab_calloc_locked().
Ruslan Ermilov <ru@nginx.com>
parents:
5679
diff
changeset
|
871 fcn = ngx_slab_calloc_locked(cache->shpool, |
25ade23cf281
Core: added ngx_slab_calloc() and ngx_slab_calloc_locked().
Ruslan Ermilov <ru@nginx.com>
parents:
5679
diff
changeset
|
872 sizeof(ngx_http_file_cache_node_t)); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
873 if (fcn == NULL) { |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
874 ngx_http_file_cache_set_watermark(cache); |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
875 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
876 ngx_shmtx_unlock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
877 |
2693 | 878 (void) ngx_http_file_cache_forced_expire(cache); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
879 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
880 ngx_shmtx_lock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
881 |
5726
25ade23cf281
Core: added ngx_slab_calloc() and ngx_slab_calloc_locked().
Ruslan Ermilov <ru@nginx.com>
parents:
5679
diff
changeset
|
882 fcn = ngx_slab_calloc_locked(cache->shpool, |
25ade23cf281
Core: added ngx_slab_calloc() and ngx_slab_calloc_locked().
Ruslan Ermilov <ru@nginx.com>
parents:
5679
diff
changeset
|
883 sizeof(ngx_http_file_cache_node_t)); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
884 if (fcn == NULL) { |
5822
063f7e75f9ef
Upstream: suppressed the file cache slab allocator error messages.
Roman Arutyunyan <arut@nginx.com>
parents:
5737
diff
changeset
|
885 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, |
063f7e75f9ef
Upstream: suppressed the file cache slab allocator error messages.
Roman Arutyunyan <arut@nginx.com>
parents:
5737
diff
changeset
|
886 "could not allocate node%s", cache->shpool->log_ctx); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
887 rc = NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
888 goto failed; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
889 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
890 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
891 |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
892 cache->sh->count++; |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
893 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
894 ngx_memcpy((u_char *) &fcn->node.key, c->key, sizeof(ngx_rbtree_key_t)); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
895 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
896 ngx_memcpy(fcn->key, &c->key[sizeof(ngx_rbtree_key_t)], |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
897 NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
898 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
899 ngx_rbtree_insert(&cache->sh->rbtree, &fcn->node); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
900 |
3724
e9f0a2497d3c
count cache key node usage for cached error statuses
Igor Sysoev <igor@sysoev.ru>
parents:
3723
diff
changeset
|
901 fcn->uses = 1; |
e9f0a2497d3c
count cache key node usage for cached error statuses
Igor Sysoev <igor@sysoev.ru>
parents:
3723
diff
changeset
|
902 fcn->count = 1; |
e9f0a2497d3c
count cache key node usage for cached error statuses
Igor Sysoev <igor@sysoev.ru>
parents:
3723
diff
changeset
|
903 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
904 renew: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
905 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
906 rc = NGX_DECLINED; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
907 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
908 fcn->valid_msec = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
909 fcn->error = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
910 fcn->exists = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
911 fcn->valid_sec = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
912 fcn->uniq = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
913 fcn->body_start = 0; |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
914 fcn->fs_size = 0; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
915 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
916 done: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
917 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
918 fcn->expire = ngx_time() + cache->inactive; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
919 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
920 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
921 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
922 c->uniq = fcn->uniq; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
923 c->error = fcn->error; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
924 c->node = fcn; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
925 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
926 failed: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
927 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
928 ngx_shmtx_unlock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
929 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
930 return rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
931 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
932 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
933 |
3696 | 934 static ngx_int_t |
935 ngx_http_file_cache_name(ngx_http_request_t *r, ngx_path_t *path) | |
936 { | |
937 u_char *p; | |
938 ngx_http_cache_t *c; | |
939 | |
940 c = r->cache; | |
941 | |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
942 if (c->file.name.len) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
943 return NGX_OK; |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
944 } |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
945 |
3696 | 946 c->file.name.len = path->name.len + 1 + path->len |
947 + 2 * NGX_HTTP_CACHE_KEY_LEN; | |
948 | |
949 c->file.name.data = ngx_pnalloc(r->pool, c->file.name.len + 1); | |
950 if (c->file.name.data == NULL) { | |
951 return NGX_ERROR; | |
952 } | |
953 | |
954 ngx_memcpy(c->file.name.data, path->name.data, path->name.len); | |
955 | |
956 p = c->file.name.data + path->name.len + 1 + path->len; | |
957 p = ngx_hex_dump(p, c->key, NGX_HTTP_CACHE_KEY_LEN); | |
958 *p = '\0'; | |
959 | |
960 ngx_create_hashed_filename(path, c->file.name.data, c->file.name.len); | |
961 | |
962 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | |
963 "cache file: \"%s\"", c->file.name.data); | |
964 | |
965 return NGX_OK; | |
966 } | |
967 | |
968 | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
969 static ngx_http_file_cache_node_t * |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
970 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
971 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
972 ngx_int_t rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
973 ngx_rbtree_key_t node_key; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
974 ngx_rbtree_node_t *node, *sentinel; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
975 ngx_http_file_cache_node_t *fcn; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
976 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
977 ngx_memcpy((u_char *) &node_key, key, sizeof(ngx_rbtree_key_t)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
978 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
979 node = cache->sh->rbtree.root; |
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
980 sentinel = cache->sh->rbtree.sentinel; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
981 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
982 while (node != sentinel) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
983 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
984 if (node_key < node->key) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
985 node = node->left; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
986 continue; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
987 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
988 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
989 if (node_key > node->key) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
990 node = node->right; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
991 continue; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
992 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
993 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
994 /* node_key == node->key */ |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
995 |
4497
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
996 fcn = (ngx_http_file_cache_node_t *) node; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
997 |
4497
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
998 rc = ngx_memcmp(&key[sizeof(ngx_rbtree_key_t)], fcn->key, |
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
999 NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t)); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1000 |
4497
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
1001 if (rc == 0) { |
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
1002 return fcn; |
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
1003 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1004 |
4497
95ab6658654a
Fix of rbtree lookup on hash collisions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4474
diff
changeset
|
1005 node = (rc < 0) ? node->left : node->right; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1006 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1007 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1008 /* not found */ |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1009 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1010 return NULL; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1011 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1012 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1013 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1014 static void |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1015 ngx_http_file_cache_rbtree_insert_value(ngx_rbtree_node_t *temp, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1016 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1017 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1018 ngx_rbtree_node_t **p; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1019 ngx_http_file_cache_node_t *cn, *cnt; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1020 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1021 for ( ;; ) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1022 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1023 if (node->key < temp->key) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1024 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1025 p = &temp->left; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1026 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1027 } else if (node->key > temp->key) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1028 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1029 p = &temp->right; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1030 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1031 } else { /* node->key == temp->key */ |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1032 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1033 cn = (ngx_http_file_cache_node_t *) node; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1034 cnt = (ngx_http_file_cache_node_t *) temp; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1035 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1036 p = (ngx_memcmp(cn->key, cnt->key, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1037 NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t)) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1038 < 0) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1039 ? &temp->left : &temp->right; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1040 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1041 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1042 if (*p == sentinel) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1043 break; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1044 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1045 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1046 temp = *p; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1047 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1048 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1049 *p = node; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1050 node->parent = temp; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1051 node->left = sentinel; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1052 node->right = sentinel; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1053 ngx_rbt_red(node); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1054 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1055 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1056 |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1057 static void |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1058 ngx_http_file_cache_vary(ngx_http_request_t *r, u_char *vary, size_t len, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1059 u_char *hash) |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1060 { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1061 u_char *p, *last; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1062 ngx_str_t name; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1063 ngx_md5_t md5; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1064 u_char buf[NGX_HTTP_CACHE_VARY_LEN]; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1065 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1066 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1067 "http file cache vary: \"%*s\"", len, vary); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1068 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1069 ngx_md5_init(&md5); |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1070 ngx_md5_update(&md5, r->cache->main, NGX_HTTP_CACHE_KEY_LEN); |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1071 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1072 ngx_strlow(buf, vary, len); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1073 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1074 p = buf; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1075 last = buf + len; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1076 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1077 while (p < last) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1078 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1079 while (p < last && (*p == ' ' || *p == ',')) { p++; } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1080 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1081 name.data = p; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1082 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1083 while (p < last && *p != ',' && *p != ' ') { p++; } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1084 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1085 name.len = p - name.data; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1086 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1087 if (name.len == 0) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1088 break; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1089 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1090 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1091 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1092 "http file cache vary: %V", &name); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1093 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1094 ngx_md5_update(&md5, name.data, name.len); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1095 ngx_md5_update(&md5, (u_char *) ":", sizeof(":") - 1); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1096 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1097 ngx_http_file_cache_vary_header(r, &md5, &name); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1098 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1099 ngx_md5_update(&md5, (u_char *) CRLF, sizeof(CRLF) - 1); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1100 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1101 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1102 ngx_md5_final(hash, &md5); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1103 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1104 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1105 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1106 static void |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1107 ngx_http_file_cache_vary_header(ngx_http_request_t *r, ngx_md5_t *md5, |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1108 ngx_str_t *name) |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1109 { |
5881
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1110 size_t len; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1111 u_char *p, *start, *last; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1112 ngx_uint_t i, multiple, normalize; |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1113 ngx_list_part_t *part; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1114 ngx_table_elt_t *header; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1115 |
5881
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1116 multiple = 0; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1117 normalize = 0; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1118 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1119 if (name->len == sizeof("Accept-Charset") - 1 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1120 && ngx_strncasecmp(name->data, (u_char *) "Accept-Charset", |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1121 sizeof("Accept-Charset") - 1) == 0) |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1122 { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1123 normalize = 1; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1124 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1125 } else if (name->len == sizeof("Accept-Encoding") - 1 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1126 && ngx_strncasecmp(name->data, (u_char *) "Accept-Encoding", |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1127 sizeof("Accept-Encoding") - 1) == 0) |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1128 { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1129 normalize = 1; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1130 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1131 } else if (name->len == sizeof("Accept-Language") - 1 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1132 && ngx_strncasecmp(name->data, (u_char *) "Accept-Language", |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1133 sizeof("Accept-Language") - 1) == 0) |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1134 { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1135 normalize = 1; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1136 } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1137 |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1138 part = &r->headers_in.headers.part; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1139 header = part->elts; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1140 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1141 for (i = 0; /* void */ ; i++) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1142 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1143 if (i >= part->nelts) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1144 if (part->next == NULL) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1145 break; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1146 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1147 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1148 part = part->next; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1149 header = part->elts; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1150 i = 0; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1151 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1152 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1153 if (header[i].hash == 0) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1154 continue; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1155 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1156 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1157 if (header[i].key.len != name->len) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1158 continue; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1159 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1160 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1161 if (ngx_strncasecmp(header[i].key.data, name->data, name->len) != 0) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1162 continue; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1163 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1164 |
5881
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1165 if (!normalize) { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1166 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1167 if (multiple) { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1168 ngx_md5_update(md5, (u_char *) ",", sizeof(",") - 1); |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1169 } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1170 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1171 ngx_md5_update(md5, header[i].value.data, header[i].value.len); |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1172 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1173 multiple = 1; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1174 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1175 continue; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1176 } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1177 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1178 /* normalize spaces */ |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1179 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1180 p = header[i].value.data; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1181 last = p + header[i].value.len; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1182 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1183 while (p < last) { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1184 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1185 while (p < last && (*p == ' ' || *p == ',')) { p++; } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1186 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1187 start = p; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1188 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1189 while (p < last && *p != ',' && *p != ' ') { p++; } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1190 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1191 len = p - start; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1192 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1193 if (len == 0) { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1194 break; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1195 } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1196 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1197 if (multiple) { |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1198 ngx_md5_update(md5, (u_char *) ",", sizeof(",") - 1); |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1199 } |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1200 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1201 ngx_md5_update(md5, start, len); |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1202 |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1203 multiple = 1; |
ee9230cd4bda
Cache: normalization of some Vary headers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5880
diff
changeset
|
1204 } |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1205 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1206 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1207 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1208 |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1209 static ngx_int_t |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1210 ngx_http_file_cache_reopen(ngx_http_request_t *r, ngx_http_cache_t *c) |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1211 { |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1212 ngx_http_file_cache_t *cache; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1213 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1214 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->file.log, 0, |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1215 "http file cache reopen"); |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1216 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1217 if (c->secondary) { |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1218 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1219 "cache file \"%s\" has incorrect vary hash", |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1220 c->file.name.data); |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1221 return NGX_DECLINED; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1222 } |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1223 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1224 cache = c->file_cache; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1225 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1226 ngx_shmtx_lock(&cache->shpool->mutex); |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1227 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1228 c->node->count--; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1229 c->node = NULL; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1230 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1231 ngx_shmtx_unlock(&cache->shpool->mutex); |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1232 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1233 c->secondary = 1; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1234 c->file.name.len = 0; |
8107
847fd35f94de
Cache: reset c->body_start when reading a variant on Vary mismatch.
Sergey Kandaurov <pluknet@nginx.com>
parents:
7973
diff
changeset
|
1235 c->body_start = c->buffer_size; |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1236 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1237 ngx_memcpy(c->key, c->variant, NGX_HTTP_CACHE_KEY_LEN); |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1238 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1239 return ngx_http_file_cache_open(r); |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1240 } |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1241 |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1242 |
5959
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1243 ngx_int_t |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1244 ngx_http_file_cache_set_header(ngx_http_request_t *r, u_char *buf) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1245 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1246 ngx_http_file_cache_header_t *h = (ngx_http_file_cache_header_t *) buf; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1247 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1248 u_char *p; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1249 ngx_str_t *key; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1250 ngx_uint_t i; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1251 ngx_http_cache_t *c; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1252 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1253 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1254 "http file cache set header"); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1255 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1256 c = r->cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1257 |
5245
711fa02afae8
Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5077
diff
changeset
|
1258 ngx_memzero(h, sizeof(ngx_http_file_cache_header_t)); |
711fa02afae8
Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5077
diff
changeset
|
1259 |
5736
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
1260 h->version = NGX_HTTP_CACHE_VERSION; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1261 h->valid_sec = c->valid_sec; |
6905
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
1262 h->updating_sec = c->updating_sec; |
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
1263 h->error_sec = c->error_sec; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1264 h->last_modified = c->last_modified; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1265 h->date = c->date; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1266 h->crc32 = c->crc32; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1267 h->valid_msec = (u_short) c->valid_msec; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1268 h->header_start = (u_short) c->header_start; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1269 h->body_start = (u_short) c->body_start; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1270 |
5737
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1271 if (c->etag.len <= NGX_HTTP_CACHE_ETAG_LEN) { |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1272 h->etag_len = (u_char) c->etag.len; |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1273 ngx_memcpy(h->etag, c->etag.data, c->etag.len); |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1274 } |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1275 |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1276 if (c->vary.len) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1277 if (c->vary.len > NGX_HTTP_CACHE_VARY_LEN) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1278 /* should not happen */ |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1279 c->vary.len = NGX_HTTP_CACHE_VARY_LEN; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1280 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1281 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1282 h->vary_len = (u_char) c->vary.len; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1283 ngx_memcpy(h->vary, c->vary.data, c->vary.len); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1284 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1285 ngx_http_file_cache_vary(r, c->vary.data, c->vary.len, c->variant); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1286 ngx_memcpy(h->variant, c->variant, NGX_HTTP_CACHE_KEY_LEN); |
5959
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1287 } |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1288 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1289 if (ngx_http_file_cache_update_variant(r, c) != NGX_OK) { |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1290 return NGX_ERROR; |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1291 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1292 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1293 p = buf + sizeof(ngx_http_file_cache_header_t); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1294 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1295 p = ngx_cpymem(p, ngx_http_file_cache_key, sizeof(ngx_http_file_cache_key)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1296 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1297 key = c->keys.elts; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1298 for (i = 0; i < c->keys.nelts; i++) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1299 p = ngx_copy(p, key[i].data, key[i].len); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1300 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1301 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1302 *p = LF; |
5959
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1303 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1304 return NGX_OK; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1305 } |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1306 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1307 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1308 static ngx_int_t |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1309 ngx_http_file_cache_update_variant(ngx_http_request_t *r, ngx_http_cache_t *c) |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1310 { |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1311 ngx_http_file_cache_t *cache; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1312 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1313 if (!c->secondary) { |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1314 return NGX_OK; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1315 } |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1316 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1317 if (c->vary.len |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1318 && ngx_memcmp(c->variant, c->key, NGX_HTTP_CACHE_KEY_LEN) == 0) |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1319 { |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1320 return NGX_OK; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1321 } |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1322 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1323 /* |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1324 * if the variant hash doesn't match one we used as a secondary |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1325 * cache key, switch back to the original key |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1326 */ |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1327 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1328 cache = c->file_cache; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1329 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1330 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1331 "http file cache main key"); |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1332 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1333 ngx_shmtx_lock(&cache->shpool->mutex); |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1334 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1335 c->node->count--; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1336 c->node->updating = 0; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1337 c->node = NULL; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1338 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1339 ngx_shmtx_unlock(&cache->shpool->mutex); |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1340 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1341 c->file.name.len = 0; |
8108
3781de64e747
Cache: keep c->body_start when Vary changes (ticket #2029).
Sergey Kandaurov <pluknet@nginx.com>
parents:
8107
diff
changeset
|
1342 c->update_variant = 1; |
5959
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1343 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1344 ngx_memcpy(c->key, c->main, NGX_HTTP_CACHE_KEY_LEN); |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1345 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1346 if (ngx_http_file_cache_exists(cache, c) == NGX_ERROR) { |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1347 return NGX_ERROR; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1348 } |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1349 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1350 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1351 return NGX_ERROR; |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1352 } |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1353 |
f7584d7c0ccb
Cache: update variant while setting header.
Valentin Bartenev <vbart@nginx.com>
parents:
5951
diff
changeset
|
1354 return NGX_OK; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1355 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1356 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1357 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1358 void |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1359 ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1360 { |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
1361 off_t fs_size; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1362 ngx_int_t rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1363 ngx_file_uniq_t uniq; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1364 ngx_file_info_t fi; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1365 ngx_http_cache_t *c; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1366 ngx_ext_rename_file_t ext; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1367 ngx_http_file_cache_t *cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1368 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1369 c = r->cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1370 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1371 if (c->updated) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1372 return; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1373 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1374 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1375 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1376 "http file cache update"); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1377 |
5880
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1378 cache = c->file_cache; |
78c49e243848
Cache: multiple variants of a resource now can be stored.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5879
diff
changeset
|
1379 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1380 c->updated = 1; |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1381 c->updating = 0; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1382 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1383 uniq = 0; |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
1384 fs_size = 0; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1385 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1386 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1387 "http file cache rename: \"%s\" to \"%s\"", |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1388 tf->file.name.data, c->file.name.data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1389 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1390 ext.access = NGX_FILE_OWNER_ACCESS; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1391 ext.path_access = NGX_FILE_OWNER_ACCESS; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1392 ext.time = -1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1393 ext.create_path = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1394 ext.delete_file = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1395 ext.log = r->connection->log; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1396 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1397 rc = ngx_ext_rename_file(&tf->file.name, &c->file.name, &ext); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1398 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1399 if (rc == NGX_OK) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1400 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1401 if (ngx_fd_info(tf->file.fd, &fi) == NGX_FILE_ERROR) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1402 ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1403 ngx_fd_info_n " \"%s\" failed", tf->file.name.data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1404 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1405 rc = NGX_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1406 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1407 } else { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1408 uniq = ngx_file_uniq(&fi); |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
1409 fs_size = (ngx_file_fs_size(&fi) + cache->bsize - 1) / cache->bsize; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1410 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1411 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1412 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1413 ngx_shmtx_lock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1414 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1415 c->node->count--; |
6539
d94f57990492
Cache: fixed updating bypassed cached errors (ticket #827).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6478
diff
changeset
|
1416 c->node->error = 0; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1417 c->node->uniq = uniq; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1418 c->node->body_start = c->body_start; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1419 |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
1420 cache->sh->size += fs_size - c->node->fs_size; |
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
1421 c->node->fs_size = fs_size; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1422 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1423 if (rc == NGX_OK) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1424 c->node->exists = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1425 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1426 |
2927
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
1427 c->node->updating = 0; |
55ceaef03d34
proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents:
2926
diff
changeset
|
1428 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1429 ngx_shmtx_unlock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1430 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1431 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1432 |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1433 void |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1434 ngx_http_file_cache_update_header(ngx_http_request_t *r) |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1435 { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1436 ssize_t n; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1437 ngx_err_t err; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1438 ngx_file_t file; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1439 ngx_file_info_t fi; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1440 ngx_http_cache_t *c; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1441 ngx_http_file_cache_header_t h; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1442 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1443 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1444 "http file cache update header"); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1445 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1446 c = r->cache; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1447 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1448 ngx_memzero(&file, sizeof(ngx_file_t)); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1449 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1450 file.name = c->file.name; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1451 file.log = r->connection->log; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1452 file.fd = ngx_open_file(file.name.data, NGX_FILE_RDWR, NGX_FILE_OPEN, 0); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1453 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1454 if (file.fd == NGX_INVALID_FILE) { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1455 err = ngx_errno; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1456 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1457 /* cache file may have been deleted */ |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1458 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1459 if (err == NGX_ENOENT) { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1460 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1461 "http file cache \"%s\" not found", |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1462 file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1463 return; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1464 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1465 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1466 ngx_log_error(NGX_LOG_CRIT, r->connection->log, err, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1467 ngx_open_file_n " \"%s\" failed", file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1468 return; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1469 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1470 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1471 /* |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1472 * make sure cache file wasn't replaced; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1473 * if it was, do nothing |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1474 */ |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1475 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1476 if (ngx_fd_info(file.fd, &fi) == NGX_FILE_ERROR) { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1477 ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1478 ngx_fd_info_n " \"%s\" failed", file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1479 goto done; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1480 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1481 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1482 if (c->uniq != ngx_file_uniq(&fi) |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1483 || c->length != ngx_file_size(&fi)) |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1484 { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1485 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1486 "http file cache \"%s\" changed", |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1487 file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1488 goto done; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1489 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1490 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1491 n = ngx_read_file(&file, (u_char *) &h, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1492 sizeof(ngx_http_file_cache_header_t), 0); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1493 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1494 if (n == NGX_ERROR) { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1495 goto done; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1496 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1497 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1498 if ((size_t) n != sizeof(ngx_http_file_cache_header_t)) { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1499 ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1500 ngx_read_file_n " read only %z of %z from \"%s\"", |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1501 n, sizeof(ngx_http_file_cache_header_t), file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1502 goto done; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1503 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1504 |
5736
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
1505 if (h.version != NGX_HTTP_CACHE_VERSION |
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
1506 || h.last_modified != c->last_modified |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1507 || h.crc32 != c->crc32 |
6860
f18c285c2e59
Win32: fixed some warnings reported by Borland C.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6795
diff
changeset
|
1508 || (size_t) h.header_start != c->header_start |
f18c285c2e59
Win32: fixed some warnings reported by Borland C.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6795
diff
changeset
|
1509 || (size_t) h.body_start != c->body_start) |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1510 { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1511 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1512 "http file cache \"%s\" content changed", |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1513 file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1514 goto done; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1515 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1516 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1517 /* |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1518 * update cache file header with new data, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1519 * notably h.valid_sec and h.date |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1520 */ |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1521 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1522 ngx_memzero(&h, sizeof(ngx_http_file_cache_header_t)); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1523 |
5736
2fe1967f8854
Cache: version in cache files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5726
diff
changeset
|
1524 h.version = NGX_HTTP_CACHE_VERSION; |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1525 h.valid_sec = c->valid_sec; |
6905
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
1526 h.updating_sec = c->updating_sec; |
9a9e13686869
Cache: support for stale-while-revalidate and stale-if-error.
Roman Arutyunyan <arut@nginx.com>
parents:
6860
diff
changeset
|
1527 h.error_sec = c->error_sec; |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1528 h.last_modified = c->last_modified; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1529 h.date = c->date; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1530 h.crc32 = c->crc32; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1531 h.valid_msec = (u_short) c->valid_msec; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1532 h.header_start = (u_short) c->header_start; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1533 h.body_start = (u_short) c->body_start; |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1534 |
5737
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1535 if (c->etag.len <= NGX_HTTP_CACHE_ETAG_LEN) { |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1536 h.etag_len = (u_char) c->etag.len; |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1537 ngx_memcpy(h.etag, c->etag.data, c->etag.len); |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1538 } |
44b9ab7752e3
Cache: ETag now saved into cache header.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5736
diff
changeset
|
1539 |
5878
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1540 if (c->vary.len) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1541 if (c->vary.len > NGX_HTTP_CACHE_VARY_LEN) { |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1542 /* should not happen */ |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1543 c->vary.len = NGX_HTTP_CACHE_VARY_LEN; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1544 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1545 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1546 h.vary_len = (u_char) c->vary.len; |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1547 ngx_memcpy(h.vary, c->vary.data, c->vary.len); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1548 |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1549 ngx_http_file_cache_vary(r, c->vary.data, c->vary.len, c->variant); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1550 ngx_memcpy(h.variant, c->variant, NGX_HTTP_CACHE_KEY_LEN); |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1551 } |
2c89956b6a76
Cache: hash of Vary headers now stored in cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5822
diff
changeset
|
1552 |
5441
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1553 (void) ngx_write_file(&file, (u_char *) &h, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1554 sizeof(ngx_http_file_cache_header_t), 0); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1555 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1556 done: |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1557 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1558 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) { |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1559 ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno, |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1560 ngx_close_file_n " \"%s\" failed", file.name.data); |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1561 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1562 } |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1563 |
43ccaf8e8728
Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5359
diff
changeset
|
1564 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1565 ngx_int_t |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1566 ngx_http_cache_send(ngx_http_request_t *r) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1567 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1568 ngx_int_t rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1569 ngx_buf_t *b; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1570 ngx_chain_t out; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1571 ngx_http_cache_t *c; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1572 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1573 c = r->cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1574 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1575 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3965 | 1576 "http file cache send: %s", c->file.name.data); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1577 |
4150
b9ee14871bf1
Cache: fix for sending of empty responses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4034
diff
changeset
|
1578 if (r != r->main && c->length - c->body_start == 0) { |
b9ee14871bf1
Cache: fix for sending of empty responses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4034
diff
changeset
|
1579 return ngx_http_send_header(r); |
b9ee14871bf1
Cache: fix for sending of empty responses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4034
diff
changeset
|
1580 } |
b9ee14871bf1
Cache: fix for sending of empty responses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4034
diff
changeset
|
1581 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1582 /* we need to allocate all before the header would be sent */ |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1583 |
6973
99934aade555
Use ngx_calloc_buf() where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents:
6906
diff
changeset
|
1584 b = ngx_calloc_buf(r->pool); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1585 if (b == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1586 return NGX_HTTP_INTERNAL_SERVER_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1587 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1588 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1589 b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1590 if (b->file == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1591 return NGX_HTTP_INTERNAL_SERVER_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1592 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1593 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1594 rc = ngx_http_send_header(r); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1595 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1596 if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1597 return rc; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1598 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1599 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1600 b->file_pos = c->body_start; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1601 b->file_last = c->length; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1602 |
4150
b9ee14871bf1
Cache: fix for sending of empty responses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4034
diff
changeset
|
1603 b->in_file = (c->length - c->body_start) ? 1: 0; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1604 b->last_buf = (r == r->main) ? 1: 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1605 b->last_in_chain = 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1606 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1607 b->file->fd = c->file.fd; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1608 b->file->name = c->file.name; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1609 b->file->log = r->connection->log; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1610 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1611 out.buf = b; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1612 out.next = NULL; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1613 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1614 return ngx_http_output_filter(r, &out); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1615 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1616 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1617 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1618 void |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1619 ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1620 { |
3694
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1621 ngx_http_file_cache_t *cache; |
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1622 ngx_http_file_cache_node_t *fcn; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1623 |
3917
2a70484a6580
fix a broken cached response if bypass/no_cache directive values are different,
Igor Sysoev <igor@sysoev.ru>
parents:
3899
diff
changeset
|
1624 if (c->updated || c->node == NULL) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1625 return; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1626 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1627 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1628 cache = c->file_cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1629 |
3713
f0b62d1ac7af
move debug logging inside ngx_http_file_cache_free()
Igor Sysoev <igor@sysoev.ru>
parents:
3711
diff
changeset
|
1630 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->file.log, 0, |
f0b62d1ac7af
move debug logging inside ngx_http_file_cache_free()
Igor Sysoev <igor@sysoev.ru>
parents:
3711
diff
changeset
|
1631 "http file cache free, fd: %d", c->file.fd); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1632 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1633 ngx_shmtx_lock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1634 |
3694
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1635 fcn = c->node; |
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1636 fcn->count--; |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1637 |
5905
2f7e557eab5b
Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
5898
diff
changeset
|
1638 if (c->updating && fcn->lock_time == c->lock_time) { |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1639 fcn->updating = 0; |
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1640 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1641 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1642 if (c->error) { |
3694
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1643 fcn->error = c->error; |
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1644 |
3743
c469ffeab569
error status codes could be cached for next request only,
Igor Sysoev <igor@sysoev.ru>
parents:
3732
diff
changeset
|
1645 if (c->valid_sec) { |
c469ffeab569
error status codes could be cached for next request only,
Igor Sysoev <igor@sysoev.ru>
parents:
3732
diff
changeset
|
1646 fcn->valid_sec = c->valid_sec; |
c469ffeab569
error status codes could be cached for next request only,
Igor Sysoev <igor@sysoev.ru>
parents:
3732
diff
changeset
|
1647 fcn->valid_msec = c->valid_msec; |
c469ffeab569
error status codes could be cached for next request only,
Igor Sysoev <igor@sysoev.ru>
parents:
3732
diff
changeset
|
1648 } |
c469ffeab569
error status codes could be cached for next request only,
Igor Sysoev <igor@sysoev.ru>
parents:
3732
diff
changeset
|
1649 |
3723
14ad3210fc73
do not free unused cache node if cache min_uses > 1,
Igor Sysoev <igor@sysoev.ru>
parents:
3713
diff
changeset
|
1650 } else if (!fcn->exists && fcn->count == 0 && c->min_uses == 1) { |
3694
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1651 ngx_queue_remove(&fcn->queue); |
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1652 ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node); |
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1653 ngx_slab_free_locked(cache->shpool, fcn); |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1654 cache->sh->count--; |
3694
dfb17155eca9
delete empty cache zone node if we could not get response to cache
Igor Sysoev <igor@sysoev.ru>
parents:
3526
diff
changeset
|
1655 c->node = NULL; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1656 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1657 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1658 ngx_shmtx_unlock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1659 |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1660 c->updated = 1; |
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1661 c->updating = 0; |
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1662 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1663 if (c->temp_file) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1664 if (tf && tf->file.fd != NGX_INVALID_FILE) { |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1665 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->file.log, 0, |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1666 "http file cache incomplete: \"%s\"", |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1667 tf->file.name.data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1668 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1669 if (ngx_delete_file(tf->file.name.data) == NGX_FILE_ERROR) { |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1670 ngx_log_error(NGX_LOG_CRIT, c->file.log, ngx_errno, |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1671 ngx_delete_file_n " \"%s\" failed", |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1672 tf->file.name.data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1673 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1674 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1675 } |
4385
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
1676 |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
1677 if (c->wait_event.timer_set) { |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
1678 ngx_del_timer(&c->wait_event); |
70ba81827472
Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4340
diff
changeset
|
1679 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1680 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1681 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1682 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1683 static void |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1684 ngx_http_file_cache_cleanup(void *data) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1685 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1686 ngx_http_cache_t *c = data; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1687 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1688 if (c->updated) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1689 return; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1690 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1691 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1692 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->file.log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1693 "http file cache cleanup"); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1694 |
6906
1aeaae6e9446
Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents:
6905
diff
changeset
|
1695 if (c->updating && !c->background) { |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1696 ngx_log_error(NGX_LOG_ALERT, c->file.log, 0, |
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1697 "stalled cache updating, error:%ui", c->error); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1698 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1699 |
3711
ce6ba077c270
several changes in cache cleanup handling:
Igor Sysoev <igor@sysoev.ru>
parents:
3710
diff
changeset
|
1700 ngx_http_file_cache_free(c, NULL); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1701 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1702 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1703 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1704 static time_t |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1705 ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache) |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1706 { |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1707 u_char *name, *p; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1708 size_t len; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1709 time_t wait; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1710 ngx_uint_t tries; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1711 ngx_path_t *path; |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1712 ngx_queue_t *q, *sentinel; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1713 ngx_http_file_cache_node_t *fcn; |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1714 u_char key[2 * NGX_HTTP_CACHE_KEY_LEN]; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1715 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1716 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1717 "http file cache forced expire"); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1718 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1719 path = cache->path; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1720 len = path->name.len + 1 + path->len + 2 * NGX_HTTP_CACHE_KEY_LEN; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1721 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1722 name = ngx_alloc(len + 1, ngx_cycle->log); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1723 if (name == NULL) { |
2694
49a1382b249b
set cache manager maximum sleep time to 10s
Igor Sysoev <igor@sysoev.ru>
parents:
2693
diff
changeset
|
1724 return 10; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1725 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1726 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1727 ngx_memcpy(name, path->name.data, path->name.len); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1728 |
2694
49a1382b249b
set cache manager maximum sleep time to 10s
Igor Sysoev <igor@sysoev.ru>
parents:
2693
diff
changeset
|
1729 wait = 10; |
3728 | 1730 tries = 20; |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1731 sentinel = NULL; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1732 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1733 ngx_shmtx_lock(&cache->shpool->mutex); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1734 |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1735 for ( ;; ) { |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1736 if (ngx_queue_empty(&cache->sh->queue)) { |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1737 break; |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1738 } |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1739 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1740 q = ngx_queue_last(&cache->sh->queue); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1741 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1742 if (q == sentinel) { |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1743 break; |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1744 } |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1745 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1746 fcn = ngx_queue_data(q, ngx_http_file_cache_node_t, queue); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1747 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1748 ngx_log_debug6(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1749 "http file cache forced expire: #%d %d %02xd%02xd%02xd%02xd", |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1750 fcn->count, fcn->exists, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1751 fcn->key[0], fcn->key[1], fcn->key[2], fcn->key[3]); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1752 |
3727 | 1753 if (fcn->count == 0) { |
1754 ngx_http_file_cache_delete(cache, q, name); | |
3885 | 1755 wait = 0; |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1756 break; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1757 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1758 |
7002
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1759 p = ngx_hex_dump(key, (u_char *) &fcn->node.key, |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1760 sizeof(ngx_rbtree_key_t)); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1761 len = NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1762 (void) ngx_hex_dump(p, fcn->key, len); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1763 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1764 /* |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1765 * abnormally exited workers may leave locked cache entries, |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1766 * and although it may be safe to remove them completely, |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1767 * we prefer to just move them to the top of the inactive queue |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1768 */ |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1769 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1770 ngx_queue_remove(q); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1771 fcn->expire = ngx_time() + cache->inactive; |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1772 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1773 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1774 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1775 "ignore long locked inactive cache entry %*s, count:%d", |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1776 (size_t) 2 * NGX_HTTP_CACHE_KEY_LEN, key, fcn->count); |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1777 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1778 if (sentinel == NULL) { |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1779 sentinel = q; |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1780 } |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1781 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1782 if (--tries) { |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1783 continue; |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1784 } |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1785 |
ab199f0eb8e8
Cache: ignore long locked entries during forced expire.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6973
diff
changeset
|
1786 wait = 1; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1787 break; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1788 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1789 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1790 ngx_shmtx_unlock(&cache->shpool->mutex); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1791 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1792 ngx_free(name); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1793 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1794 return wait; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1795 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1796 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1797 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1798 static time_t |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1799 ngx_http_file_cache_expire(ngx_http_file_cache_t *cache) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1800 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1801 u_char *name, *p; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1802 size_t len; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1803 time_t now, wait; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1804 ngx_path_t *path; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1805 ngx_msec_t elapsed; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1806 ngx_queue_t *q; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1807 ngx_http_file_cache_node_t *fcn; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1808 u_char key[2 * NGX_HTTP_CACHE_KEY_LEN]; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1809 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1810 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1811 "http file cache expire"); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1812 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1813 path = cache->path; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1814 len = path->name.len + 1 + path->len + 2 * NGX_HTTP_CACHE_KEY_LEN; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1815 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1816 name = ngx_alloc(len + 1, ngx_cycle->log); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1817 if (name == NULL) { |
2694
49a1382b249b
set cache manager maximum sleep time to 10s
Igor Sysoev <igor@sysoev.ru>
parents:
2693
diff
changeset
|
1818 return 10; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1819 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1820 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1821 ngx_memcpy(name, path->name.data, path->name.len); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1822 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1823 now = ngx_time(); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1824 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1825 ngx_shmtx_lock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1826 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1827 for ( ;; ) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1828 |
5679
5748ce74c1cc
Cache: added ngx_quit check to ngx_http_file_cache_expire().
Maxim Dounin <mdounin@mdounin.ru>
parents:
5441
diff
changeset
|
1829 if (ngx_quit || ngx_terminate) { |
5748ce74c1cc
Cache: added ngx_quit check to ngx_http_file_cache_expire().
Maxim Dounin <mdounin@mdounin.ru>
parents:
5441
diff
changeset
|
1830 wait = 1; |
5748ce74c1cc
Cache: added ngx_quit check to ngx_http_file_cache_expire().
Maxim Dounin <mdounin@mdounin.ru>
parents:
5441
diff
changeset
|
1831 break; |
5748ce74c1cc
Cache: added ngx_quit check to ngx_http_file_cache_expire().
Maxim Dounin <mdounin@mdounin.ru>
parents:
5441
diff
changeset
|
1832 } |
5748ce74c1cc
Cache: added ngx_quit check to ngx_http_file_cache_expire().
Maxim Dounin <mdounin@mdounin.ru>
parents:
5441
diff
changeset
|
1833 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
1834 if (ngx_queue_empty(&cache->sh->queue)) { |
2694
49a1382b249b
set cache manager maximum sleep time to 10s
Igor Sysoev <igor@sysoev.ru>
parents:
2693
diff
changeset
|
1835 wait = 10; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1836 break; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1837 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1838 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
1839 q = ngx_queue_last(&cache->sh->queue); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1840 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1841 fcn = ngx_queue_data(q, ngx_http_file_cache_node_t, queue); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1842 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1843 wait = fcn->expire - now; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1844 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1845 if (wait > 0) { |
2694
49a1382b249b
set cache manager maximum sleep time to 10s
Igor Sysoev <igor@sysoev.ru>
parents:
2693
diff
changeset
|
1846 wait = wait > 10 ? 10 : wait; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1847 break; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1848 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1849 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1850 ngx_log_debug6(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1851 "http file cache expire: #%d %d %02xd%02xd%02xd%02xd", |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1852 fcn->count, fcn->exists, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1853 fcn->key[0], fcn->key[1], fcn->key[2], fcn->key[3]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1854 |
3727 | 1855 if (fcn->count == 0) { |
1856 ngx_http_file_cache_delete(cache, q, name); | |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1857 goto next; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1858 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1859 |
3755
76e3a93821b1
fix race condition if during reconfiguration two cache managers try
Igor Sysoev <igor@sysoev.ru>
parents:
3744
diff
changeset
|
1860 if (fcn->deleting) { |
3942
2e8dbd773d63
fix r3756: release lock to allow other process to delete cache node
Igor Sysoev <igor@sysoev.ru>
parents:
3917
diff
changeset
|
1861 wait = 1; |
2e8dbd773d63
fix r3756: release lock to allow other process to delete cache node
Igor Sysoev <igor@sysoev.ru>
parents:
3917
diff
changeset
|
1862 break; |
3755
76e3a93821b1
fix race condition if during reconfiguration two cache managers try
Igor Sysoev <igor@sysoev.ru>
parents:
3744
diff
changeset
|
1863 } |
76e3a93821b1
fix race condition if during reconfiguration two cache managers try
Igor Sysoev <igor@sysoev.ru>
parents:
3744
diff
changeset
|
1864 |
3727 | 1865 p = ngx_hex_dump(key, (u_char *) &fcn->node.key, |
1866 sizeof(ngx_rbtree_key_t)); | |
1867 len = NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t); | |
1868 (void) ngx_hex_dump(p, fcn->key, len); | |
1869 | |
1870 /* | |
1871 * abnormally exited workers may leave locked cache entries, | |
1872 * and although it may be safe to remove them completely, | |
4340
4533d7684e14
Cache: only complain on long locked entries.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4339
diff
changeset
|
1873 * we prefer to just move them to the top of the inactive queue |
3727 | 1874 */ |
1875 | |
1876 ngx_queue_remove(q); | |
4340
4533d7684e14
Cache: only complain on long locked entries.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4339
diff
changeset
|
1877 fcn->expire = ngx_time() + cache->inactive; |
4533d7684e14
Cache: only complain on long locked entries.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4339
diff
changeset
|
1878 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); |
3727 | 1879 |
1880 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, | |
1881 "ignore long locked inactive cache entry %*s, count:%d", | |
6478
3ef7bb882ad4
Fixed logging with variable field width.
Sergey Kandaurov <pluknet@nginx.com>
parents:
6450
diff
changeset
|
1882 (size_t) 2 * NGX_HTTP_CACHE_KEY_LEN, key, fcn->count); |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1883 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1884 next: |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1885 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1886 if (++cache->files >= cache->manager_files) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1887 wait = 0; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1888 break; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1889 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1890 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1891 ngx_time_update(); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1892 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1893 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1894 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1895 if (elapsed >= cache->manager_threshold) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1896 wait = 0; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1897 break; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1898 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1899 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1900 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1901 ngx_shmtx_unlock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1902 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1903 ngx_free(name); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1904 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1905 return wait; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1906 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1907 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1908 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1909 static void |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1910 ngx_http_file_cache_delete(ngx_http_file_cache_t *cache, ngx_queue_t *q, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1911 u_char *name) |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1912 { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1913 u_char *p; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1914 size_t len; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1915 ngx_path_t *path; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1916 ngx_http_file_cache_node_t *fcn; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1917 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1918 fcn = ngx_queue_data(q, ngx_http_file_cache_node_t, queue); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1919 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1920 if (fcn->exists) { |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
1921 cache->sh->size -= fcn->fs_size; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1922 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1923 path = cache->path; |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1924 p = name + path->name.len + 1 + path->len; |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1925 p = ngx_hex_dump(p, (u_char *) &fcn->node.key, |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1926 sizeof(ngx_rbtree_key_t)); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1927 len = NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1928 p = ngx_hex_dump(p, fcn->key, len); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1929 *p = '\0'; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1930 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1931 fcn->count++; |
3755
76e3a93821b1
fix race condition if during reconfiguration two cache managers try
Igor Sysoev <igor@sysoev.ru>
parents:
3744
diff
changeset
|
1932 fcn->deleting = 1; |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1933 ngx_shmtx_unlock(&cache->shpool->mutex); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1934 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1935 len = path->name.len + 1 + path->len + 2 * NGX_HTTP_CACHE_KEY_LEN; |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1936 ngx_create_hashed_filename(path, name, len); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1937 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1938 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1939 "http file cache expire: \"%s\"", name); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1940 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1941 if (ngx_delete_file(name) == NGX_FILE_ERROR) { |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1942 ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, ngx_errno, |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1943 ngx_delete_file_n " \"%s\" failed", name); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1944 } |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1945 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1946 ngx_shmtx_lock(&cache->shpool->mutex); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1947 fcn->count--; |
3755
76e3a93821b1
fix race condition if during reconfiguration two cache managers try
Igor Sysoev <igor@sysoev.ru>
parents:
3744
diff
changeset
|
1948 fcn->deleting = 0; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1949 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1950 |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1951 if (fcn->count == 0) { |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1952 ngx_queue_remove(q); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1953 ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node); |
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1954 ngx_slab_free_locked(cache->shpool, fcn); |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1955 cache->sh->count--; |
3726
282ddd49f925
*) delete cache key node after a cache file removal
Igor Sysoev <igor@sysoev.ru>
parents:
3724
diff
changeset
|
1956 } |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1957 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1958 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1959 |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1960 static ngx_msec_t |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1961 ngx_http_file_cache_manager(void *data) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1962 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1963 ngx_http_file_cache_t *cache = data; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1964 |
7973
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1965 off_t size, free; |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
1966 time_t wait; |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
1967 ngx_msec_t elapsed, next; |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1968 ngx_uint_t count, watermark; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1969 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1970 cache->last = ngx_current_msec; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1971 cache->files = 0; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1972 |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
1973 next = (ngx_msec_t) ngx_http_file_cache_expire(cache) * 1000; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1974 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1975 if (next == 0) { |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
1976 next = cache->manager_sleep; |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
1977 goto done; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1978 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
1979 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1980 for ( ;; ) { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1981 ngx_shmtx_lock(&cache->shpool->mutex); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1982 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
1983 size = cache->sh->size; |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1984 count = cache->sh->count; |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1985 watermark = cache->sh->watermark; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
1986 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1987 ngx_shmtx_unlock(&cache->shpool->mutex); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
1988 |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1989 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1990 "http file cache size: %O c:%ui w:%i", |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1991 size, count, (ngx_int_t) watermark); |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1992 |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
1993 if (size < cache->max_size && count < watermark) { |
7973
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1994 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1995 if (!cache->min_free) { |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1996 break; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1997 } |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1998 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
1999 free = ngx_fs_available(cache->path->name.data); |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2000 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2001 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2002 "http file cache free: %O", free); |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2003 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2004 if (free > cache->min_free) { |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2005 break; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2006 } |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2007 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2008 |
3885 | 2009 wait = ngx_http_file_cache_forced_expire(cache); |
2010 | |
2011 if (wait > 0) { | |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2012 next = (ngx_msec_t) wait * 1000; |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2013 break; |
3885 | 2014 } |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2015 |
3972
c1a69e03bdf2
rename ngx_http_file_cache_manager_sleep() to ngx_http_file_cache_loader_sleep()
Igor Sysoev <igor@sysoev.ru>
parents:
3971
diff
changeset
|
2016 if (ngx_quit || ngx_terminate) { |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2017 break; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2018 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2019 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2020 if (++cache->files >= cache->manager_files) { |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2021 next = cache->manager_sleep; |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2022 break; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2023 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2024 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2025 ngx_time_update(); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2026 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2027 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2028 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2029 if (elapsed >= cache->manager_threshold) { |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2030 next = cache->manager_sleep; |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2031 break; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2032 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2033 } |
6742
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2034 |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2035 done: |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2036 |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2037 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2038 |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2039 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2040 "http file cache manager: %ui e:%M n:%M", |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2041 cache->files, elapsed, next); |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2042 |
3fbb3bdff824
Cache: cache manager debugging.
Ruslan Ermilov <ru@nginx.com>
parents:
6727
diff
changeset
|
2043 return next; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2044 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2045 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2046 |
3018 | 2047 static void |
2048 ngx_http_file_cache_loader(void *data) | |
2049 { | |
2050 ngx_http_file_cache_t *cache = data; | |
2051 | |
2052 ngx_tree_ctx_t tree; | |
2053 | |
2054 if (!cache->sh->cold || cache->sh->loading) { | |
2055 return; | |
2056 } | |
2057 | |
2058 if (!ngx_atomic_cmp_set(&cache->sh->loading, 0, ngx_pid)) { | |
2059 return; | |
2060 } | |
2061 | |
2062 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, | |
2063 "http file cache loader"); | |
2064 | |
2065 tree.init_handler = NULL; | |
2066 tree.file_handler = ngx_http_file_cache_manage_file; | |
5968
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2067 tree.pre_tree_handler = ngx_http_file_cache_manage_directory; |
3018 | 2068 tree.post_tree_handler = ngx_http_file_cache_noop; |
2069 tree.spec_handler = ngx_http_file_cache_delete_file; | |
2070 tree.data = cache; | |
2071 tree.alloc = 0; | |
2072 tree.log = ngx_cycle->log; | |
2073 | |
2074 cache->last = ngx_current_msec; | |
2075 cache->files = 0; | |
2076 | |
2077 if (ngx_walk_tree(&tree, &cache->path->name) == NGX_ABORT) { | |
3020
364ea8f54a2f
unlock incompletely loaded cache
Igor Sysoev <igor@sysoev.ru>
parents:
3018
diff
changeset
|
2078 cache->sh->loading = 0; |
3018 | 2079 return; |
2080 } | |
2081 | |
2082 cache->sh->cold = 0; | |
2083 cache->sh->loading = 0; | |
2084 | |
2085 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0, | |
2086 "http file cache: %V %.3fM, bsize: %uz", | |
2087 &cache->path->name, | |
2088 ((double) cache->sh->size * cache->bsize) / (1024 * 1024), | |
2089 cache->bsize); | |
2090 } | |
2091 | |
2092 | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2093 static ngx_int_t |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2094 ngx_http_file_cache_noop(ngx_tree_ctx_t *ctx, ngx_str_t *path) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2095 { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2096 return NGX_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2097 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2098 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2099 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2100 static ngx_int_t |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2101 ngx_http_file_cache_manage_file(ngx_tree_ctx_t *ctx, ngx_str_t *path) |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2102 { |
4018
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2103 ngx_msec_t elapsed; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2104 ngx_http_file_cache_t *cache; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2105 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2106 cache = ctx->data; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2107 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2108 if (ngx_http_file_cache_add_file(ctx, path) != NGX_OK) { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2109 (void) ngx_http_file_cache_delete_file(ctx, path); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2110 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2111 |
4018
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2112 if (++cache->files >= cache->loader_files) { |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2113 ngx_http_file_cache_loader_sleep(cache); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2114 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2115 } else { |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2116 ngx_time_update(); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2117 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2118 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2119 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2120 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2121 "http file cache loader time elapsed: %M", elapsed); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2122 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2123 if (elapsed >= cache->loader_threshold) { |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2124 ngx_http_file_cache_loader_sleep(cache); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2125 } |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2126 } |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2127 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2128 return (ngx_quit || ngx_terminate) ? NGX_ABORT : NGX_OK; |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2129 } |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2130 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2131 |
5968
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2132 static ngx_int_t |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2133 ngx_http_file_cache_manage_directory(ngx_tree_ctx_t *ctx, ngx_str_t *path) |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2134 { |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2135 if (path->len >= 5 |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2136 && ngx_strncmp(path->data + path->len - 5, "/temp", 5) == 0) |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2137 { |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2138 return NGX_DECLINED; |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2139 } |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2140 |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2141 return NGX_OK; |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2142 } |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2143 |
99639bfdfa2a
Cache: added temp_path to file cache.
Roman Arutyunyan <arut@nginx.com>
parents:
5960
diff
changeset
|
2144 |
4018
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2145 static void |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2146 ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache) |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2147 { |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2148 ngx_msleep(cache->loader_sleep); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2149 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2150 ngx_time_update(); |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2151 |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2152 cache->last = ngx_current_msec; |
5e544655d97b
The change in adaptive loader behaviour introduced in r3975:
Igor Sysoev <igor@sysoev.ru>
parents:
3974
diff
changeset
|
2153 cache->files = 0; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2154 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2155 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2156 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2157 static ngx_int_t |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2158 ngx_http_file_cache_add_file(ngx_tree_ctx_t *ctx, ngx_str_t *name) |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2159 { |
3970
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2160 u_char *p; |
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2161 ngx_int_t n; |
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2162 ngx_uint_t i; |
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2163 ngx_http_cache_t c; |
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2164 ngx_http_file_cache_t *cache; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2165 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2166 if (name->len < 2 * NGX_HTTP_CACHE_KEY_LEN) { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2167 return NGX_ERROR; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2168 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2169 |
6795
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2170 /* |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2171 * Temporary files in cache have a suffix consisting of a dot |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2172 * followed by 10 digits. |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2173 */ |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2174 |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2175 if (name->len >= 2 * NGX_HTTP_CACHE_KEY_LEN + 1 + 10 |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2176 && name->data[name->len - 10 - 1] == '.') |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2177 { |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2178 return NGX_OK; |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2179 } |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2180 |
3970
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2181 if (ctx->size < (off_t) sizeof(ngx_http_file_cache_header_t)) { |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2182 ngx_log_error(NGX_LOG_CRIT, ctx->log, 0, |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2183 "cache file \"%s\" is too small", name->data); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2184 return NGX_ERROR; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2185 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2186 |
3970
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2187 ngx_memzero(&c, sizeof(ngx_http_cache_t)); |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
2188 cache = ctx->data; |
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
2189 |
3970
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2190 c.length = ctx->size; |
2d05952a324d
elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents:
3969
diff
changeset
|
2191 c.fs_size = (ctx->fs_size + cache->bsize - 1) / cache->bsize; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2192 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2193 p = &name->data[name->len - 2 * NGX_HTTP_CACHE_KEY_LEN]; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2194 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2195 for (i = 0; i < NGX_HTTP_CACHE_KEY_LEN; i++) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2196 n = ngx_hextoi(p, 2); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2197 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2198 if (n == NGX_ERROR) { |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2199 return NGX_ERROR; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2200 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2201 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2202 p += 2; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2203 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2204 c.key[i] = (u_char) n; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2205 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2206 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2207 return ngx_http_file_cache_add(cache, &c); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2208 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2209 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2210 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2211 static ngx_int_t |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2212 ngx_http_file_cache_add(ngx_http_file_cache_t *cache, ngx_http_cache_t *c) |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2213 { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2214 ngx_http_file_cache_node_t *fcn; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2215 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2216 ngx_shmtx_lock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2217 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2218 fcn = ngx_http_file_cache_lookup(cache, c->key); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2219 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2220 if (fcn == NULL) { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2221 |
5726
25ade23cf281
Core: added ngx_slab_calloc() and ngx_slab_calloc_locked().
Ruslan Ermilov <ru@nginx.com>
parents:
5679
diff
changeset
|
2222 fcn = ngx_slab_calloc_locked(cache->shpool, |
25ade23cf281
Core: added ngx_slab_calloc() and ngx_slab_calloc_locked().
Ruslan Ermilov <ru@nginx.com>
parents:
5679
diff
changeset
|
2223 sizeof(ngx_http_file_cache_node_t)); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2224 if (fcn == NULL) { |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2225 ngx_http_file_cache_set_watermark(cache); |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2226 |
6444
043914d19be8
Cache: report error if slab allocator fails during cache loading.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6441
diff
changeset
|
2227 if (cache->fail_time != ngx_time()) { |
043914d19be8
Cache: report error if slab allocator fails during cache loading.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6441
diff
changeset
|
2228 cache->fail_time = ngx_time(); |
043914d19be8
Cache: report error if slab allocator fails during cache loading.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6441
diff
changeset
|
2229 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, |
043914d19be8
Cache: report error if slab allocator fails during cache loading.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6441
diff
changeset
|
2230 "could not allocate node%s", cache->shpool->log_ctx); |
043914d19be8
Cache: report error if slab allocator fails during cache loading.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6441
diff
changeset
|
2231 } |
043914d19be8
Cache: report error if slab allocator fails during cache loading.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6441
diff
changeset
|
2232 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2233 ngx_shmtx_unlock(&cache->shpool->mutex); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2234 return NGX_ERROR; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2235 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2236 |
6450
22c32937a41f
Cache: fixed slots accounting error introduced in c9d680b00744.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6445
diff
changeset
|
2237 cache->sh->count++; |
22c32937a41f
Cache: fixed slots accounting error introduced in c9d680b00744.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6445
diff
changeset
|
2238 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2239 ngx_memcpy((u_char *) &fcn->node.key, c->key, sizeof(ngx_rbtree_key_t)); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2240 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2241 ngx_memcpy(fcn->key, &c->key[sizeof(ngx_rbtree_key_t)], |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2242 NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t)); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2243 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
2244 ngx_rbtree_insert(&cache->sh->rbtree, &fcn->node); |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2245 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2246 fcn->uses = 1; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2247 fcn->exists = 1; |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
2248 fcn->fs_size = c->fs_size; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2249 |
3899
e7cd13b7f759
Use more precise stat.st_blocks to account cache size on Unix
Igor Sysoev <igor@sysoev.ru>
parents:
3885
diff
changeset
|
2250 cache->sh->size += c->fs_size; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2251 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2252 } else { |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2253 ngx_queue_remove(&fcn->queue); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2254 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2255 |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2256 fcn->expire = ngx_time() + cache->inactive; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2257 |
2720
b3b8c66bd520
support attaching to an existent Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
2716
diff
changeset
|
2258 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2259 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2260 ngx_shmtx_unlock(&cache->shpool->mutex); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2261 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2262 return NGX_OK; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2263 } |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2264 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2265 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2266 static ngx_int_t |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2267 ngx_http_file_cache_delete_file(ngx_tree_ctx_t *ctx, ngx_str_t *path) |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2268 { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2269 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ctx->log, 0, |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2270 "http file cache delete: \"%s\"", path->data); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2271 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2272 if (ngx_delete_file(path->data) == NGX_FILE_ERROR) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2273 ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2274 ngx_delete_file_n " \"%s\" failed", path->data); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2275 } |
477 | 2276 |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2277 return NGX_OK; |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2278 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2279 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2280 |
6445
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2281 static void |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2282 ngx_http_file_cache_set_watermark(ngx_http_file_cache_t *cache) |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2283 { |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2284 cache->sh->watermark = cache->sh->count - cache->sh->count / 8; |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2285 |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2286 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2287 "http file cache watermark: %ui", cache->sh->watermark); |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2288 } |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2289 |
c9d680b00744
Cache: added watermark to reduce IO load when keys_zone is full.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6444
diff
changeset
|
2290 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2291 time_t |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2292 ngx_http_file_cache_valid(ngx_array_t *cache_valid, ngx_uint_t status) |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2293 { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2294 ngx_uint_t i; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2295 ngx_http_cache_valid_t *valid; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2296 |
2626
b0cfe5f66e8d
fix segfault introduced in r2602 if there is 502/504 error
Igor Sysoev <igor@sysoev.ru>
parents:
2616
diff
changeset
|
2297 if (cache_valid == NULL) { |
b0cfe5f66e8d
fix segfault introduced in r2602 if there is 502/504 error
Igor Sysoev <igor@sysoev.ru>
parents:
2616
diff
changeset
|
2298 return 0; |
b0cfe5f66e8d
fix segfault introduced in r2602 if there is 502/504 error
Igor Sysoev <igor@sysoev.ru>
parents:
2616
diff
changeset
|
2299 } |
b0cfe5f66e8d
fix segfault introduced in r2602 if there is 502/504 error
Igor Sysoev <igor@sysoev.ru>
parents:
2616
diff
changeset
|
2300 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2301 valid = cache_valid->elts; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2302 for (i = 0; i < cache_valid->nelts; i++) { |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2303 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2304 if (valid[i].status == 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2305 return valid[i].valid; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2306 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2307 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2308 if (valid[i].status == status) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2309 return valid[i].valid; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2310 } |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2311 } |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2312 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2313 return 0; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2314 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2315 |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2316 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2317 char * |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2318 ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2319 { |
5951
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2320 char *confp = conf; |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2321 |
7973
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2322 off_t max_size, min_free; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2323 u_char *last, *p; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2324 time_t inactive; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2325 ssize_t size; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2326 ngx_str_t s, name, *value; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2327 ngx_int_t loader_files, manager_files; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2328 ngx_msec_t loader_sleep, manager_sleep, loader_threshold, |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2329 manager_threshold; |
5960
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2330 ngx_uint_t i, n, use_temp_path; |
5951
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2331 ngx_array_t *caches; |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2332 ngx_http_file_cache_t *cache, **ce; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2333 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2334 cache = ngx_pcalloc(cf->pool, sizeof(ngx_http_file_cache_t)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2335 if (cache == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2336 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2337 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2338 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2339 cache->path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2340 if (cache->path == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2341 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2342 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2343 |
5960
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2344 use_temp_path = 1; |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2345 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2346 inactive = 600; |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2347 |
3974
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2348 loader_files = 100; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2349 loader_sleep = 50; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2350 loader_threshold = 200; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2351 |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2352 manager_files = 100; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2353 manager_sleep = 50; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2354 manager_threshold = 200; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2355 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2356 name.len = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2357 size = 0; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2358 max_size = NGX_MAX_OFF_T_VALUE; |
7973
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2359 min_free = 0; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2360 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2361 value = cf->args->elts; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2362 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2363 cache->path->name = value[1]; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2364 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2365 if (cache->path->name.data[cache->path->name.len - 1] == '/') { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2366 cache->path->name.len--; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2367 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2368 |
5330
314c3d7cc3a5
Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5317
diff
changeset
|
2369 if (ngx_conf_full_name(cf->cycle, &cache->path->name, 0) != NGX_OK) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2370 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2371 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2372 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2373 for (i = 2; i < cf->args->nelts; i++) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2374 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2375 if (ngx_strncmp(value[i].data, "levels=", 7) == 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2376 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2377 p = value[i].data + 7; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2378 last = value[i].data + value[i].len; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2379 |
6617
8bf484eef9ab
Use NGX_MAX_PATH_LEVEL where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents:
6539
diff
changeset
|
2380 for (n = 0; n < NGX_MAX_PATH_LEVEL && p < last; n++) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2381 |
2671 | 2382 if (*p > '0' && *p < '3') { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2383 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2384 cache->path->level[n] = *p++ - '0'; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2385 cache->path->len += cache->path->level[n] + 1; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2386 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2387 if (p == last) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2388 break; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2389 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2390 |
6617
8bf484eef9ab
Use NGX_MAX_PATH_LEVEL where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents:
6539
diff
changeset
|
2391 if (*p++ == ':' && n < NGX_MAX_PATH_LEVEL - 1 && p < last) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2392 continue; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2393 } |
2671 | 2394 |
2395 goto invalid_levels; | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2396 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2397 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2398 goto invalid_levels; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2399 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2400 |
6617
8bf484eef9ab
Use NGX_MAX_PATH_LEVEL where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents:
6539
diff
changeset
|
2401 if (cache->path->len < 10 + NGX_MAX_PATH_LEVEL) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2402 continue; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2403 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2404 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2405 invalid_levels: |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2406 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2407 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2408 "invalid \"levels\" \"%V\"", &value[i]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2409 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2410 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2411 |
5960
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2412 if (ngx_strncmp(value[i].data, "use_temp_path=", 14) == 0) { |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2413 |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2414 if (ngx_strcmp(&value[i].data[14], "on") == 0) { |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2415 use_temp_path = 1; |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2416 |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2417 } else if (ngx_strcmp(&value[i].data[14], "off") == 0) { |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2418 use_temp_path = 0; |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2419 |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2420 } else { |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2421 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2422 "invalid use_temp_path value \"%V\", " |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2423 "it must be \"on\" or \"off\"", |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2424 &value[i]); |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2425 return NGX_CONF_ERROR; |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2426 } |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2427 |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2428 continue; |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2429 } |
e9effef98874
Upstream: use_temp_path parameter of proxy_cache_path and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5959
diff
changeset
|
2430 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2431 if (ngx_strncmp(value[i].data, "keys_zone=", 10) == 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2432 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2433 name.data = value[i].data + 10; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2434 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2435 p = (u_char *) ngx_strchr(name.data, ':'); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2436 |
7375
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2437 if (p == NULL) { |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2438 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2439 "invalid keys zone size \"%V\"", &value[i]); |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2440 return NGX_CONF_ERROR; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2441 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2442 |
7375
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2443 name.len = p - name.data; |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2444 |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2445 s.data = p + 1; |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2446 s.len = value[i].data + value[i].len - s.data; |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2447 |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2448 size = ngx_parse_size(&s); |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2449 |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2450 if (size == NGX_ERROR) { |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2451 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2452 "invalid keys zone size \"%V\"", &value[i]); |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2453 return NGX_CONF_ERROR; |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2454 } |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2455 |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2456 if (size < (ssize_t) (2 * ngx_pagesize)) { |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2457 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2458 "keys zone \"%V\" is too small", &value[i]); |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2459 return NGX_CONF_ERROR; |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2460 } |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2461 |
bddacdaaec9e
Cache: improved keys zone size error reporting.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7374
diff
changeset
|
2462 continue; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2463 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2464 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2465 if (ngx_strncmp(value[i].data, "inactive=", 9) == 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2466 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2467 s.len = value[i].len - 9; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2468 s.data = value[i].data + 9; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2469 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2470 inactive = ngx_parse_time(&s, 1); |
4474 | 2471 if (inactive == (time_t) NGX_ERROR) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2472 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2473 "invalid inactive value \"%V\"", &value[i]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2474 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2475 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2476 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2477 continue; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2478 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2479 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2480 if (ngx_strncmp(value[i].data, "max_size=", 9) == 0) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2481 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2482 s.len = value[i].len - 9; |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2483 s.data = value[i].data + 9; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2484 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2485 max_size = ngx_parse_offset(&s); |
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2486 if (max_size < 0) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2487 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2488 "invalid max_size value \"%V\"", &value[i]); |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2489 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2490 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2491 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2492 continue; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2493 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2494 |
7973
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2495 if (ngx_strncmp(value[i].data, "min_free=", 9) == 0) { |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2496 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2497 #if (NGX_WIN32 || NGX_HAVE_STATFS || NGX_HAVE_STATVFS) |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2498 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2499 s.len = value[i].len - 9; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2500 s.data = value[i].data + 9; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2501 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2502 min_free = ngx_parse_offset(&s); |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2503 if (min_free < 0) { |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2504 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2505 "invalid min_free value \"%V\"", &value[i]); |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2506 return NGX_CONF_ERROR; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2507 } |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2508 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2509 #else |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2510 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2511 "min_free is not supported " |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2512 "on this platform, ignored"); |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2513 #endif |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2514 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2515 continue; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2516 } |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2517 |
3974
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2518 if (ngx_strncmp(value[i].data, "loader_files=", 13) == 0) { |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2519 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2520 loader_files = ngx_atoi(value[i].data + 13, value[i].len - 13); |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2521 if (loader_files == NGX_ERROR) { |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2522 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2523 "invalid loader_files value \"%V\"", &value[i]); |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2524 return NGX_CONF_ERROR; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2525 } |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2526 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2527 continue; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2528 } |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2529 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2530 if (ngx_strncmp(value[i].data, "loader_sleep=", 13) == 0) { |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2531 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2532 s.len = value[i].len - 13; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2533 s.data = value[i].data + 13; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2534 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2535 loader_sleep = ngx_parse_time(&s, 0); |
4474 | 2536 if (loader_sleep == (ngx_msec_t) NGX_ERROR) { |
3974
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2537 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2538 "invalid loader_sleep value \"%V\"", &value[i]); |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2539 return NGX_CONF_ERROR; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2540 } |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2541 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2542 continue; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2543 } |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2544 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2545 if (ngx_strncmp(value[i].data, "loader_threshold=", 17) == 0) { |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2546 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2547 s.len = value[i].len - 17; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2548 s.data = value[i].data + 17; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2549 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2550 loader_threshold = ngx_parse_time(&s, 0); |
4474 | 2551 if (loader_threshold == (ngx_msec_t) NGX_ERROR) { |
3974
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2552 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2553 "invalid loader_threshold value \"%V\"", &value[i]); |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2554 return NGX_CONF_ERROR; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2555 } |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2556 |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2557 continue; |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2558 } |
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2559 |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2560 if (ngx_strncmp(value[i].data, "manager_files=", 14) == 0) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2561 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2562 manager_files = ngx_atoi(value[i].data + 14, value[i].len - 14); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2563 if (manager_files == NGX_ERROR) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2564 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2565 "invalid manager_files value \"%V\"", &value[i]); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2566 return NGX_CONF_ERROR; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2567 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2568 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2569 continue; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2570 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2571 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2572 if (ngx_strncmp(value[i].data, "manager_sleep=", 14) == 0) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2573 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2574 s.len = value[i].len - 14; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2575 s.data = value[i].data + 14; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2576 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2577 manager_sleep = ngx_parse_time(&s, 0); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2578 if (manager_sleep == (ngx_msec_t) NGX_ERROR) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2579 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2580 "invalid manager_sleep value \"%V\"", &value[i]); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2581 return NGX_CONF_ERROR; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2582 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2583 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2584 continue; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2585 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2586 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2587 if (ngx_strncmp(value[i].data, "manager_threshold=", 18) == 0) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2588 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2589 s.len = value[i].len - 18; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2590 s.data = value[i].data + 18; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2591 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2592 manager_threshold = ngx_parse_time(&s, 0); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2593 if (manager_threshold == (ngx_msec_t) NGX_ERROR) { |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2594 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2595 "invalid manager_threshold value \"%V\"", &value[i]); |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2596 return NGX_CONF_ERROR; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2597 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2598 |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2599 continue; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2600 } |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2601 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2602 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2603 "invalid parameter \"%V\"", &value[i]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2604 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2605 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2606 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2607 if (name.len == 0 || size == 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2608 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2609 "\"%V\" must have \"keys_zone\" parameter", |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2610 &cmd->name); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2611 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2612 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2613 |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2614 cache->path->manager = ngx_http_file_cache_manager; |
3018 | 2615 cache->path->loader = ngx_http_file_cache_loader; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2616 cache->path->data = cache; |
3973
9d6f21415231
set correct configuration file values while adding path
Igor Sysoev <igor@sysoev.ru>
parents:
3972
diff
changeset
|
2617 cache->path->conf_file = cf->conf_file->file.name.data; |
9d6f21415231
set correct configuration file values while adding path
Igor Sysoev <igor@sysoev.ru>
parents:
3972
diff
changeset
|
2618 cache->path->line = cf->conf_file->line; |
3974
d10bcb07d9d4
loader_files, loader_sleep, and loader_threshold
Igor Sysoev <igor@sysoev.ru>
parents:
3973
diff
changeset
|
2619 cache->loader_files = loader_files; |
4474 | 2620 cache->loader_sleep = loader_sleep; |
2621 cache->loader_threshold = loader_threshold; | |
6727
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2622 cache->manager_files = manager_files; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2623 cache->manager_sleep = manager_sleep; |
ca709bca4b77
Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
6617
diff
changeset
|
2624 cache->manager_threshold = manager_threshold; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2625 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2626 if (ngx_add_path(cf, &cache->path) != NGX_OK) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2627 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2628 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2629 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2630 cache->shm_zone = ngx_shared_memory_add(cf, &name, size, cmd->post); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2631 if (cache->shm_zone == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2632 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2633 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2634 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2635 if (cache->shm_zone->data) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2636 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2637 "duplicate zone \"%V\"", &name); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2638 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2639 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2640 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2641 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2642 cache->shm_zone->init = ngx_http_file_cache_init; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2643 cache->shm_zone->data = cache; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2644 |
6795
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2645 cache->use_temp_path = use_temp_path; |
1a917932db96
Cache: prefix-based temporary files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6742
diff
changeset
|
2646 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2647 cache->inactive = inactive; |
2616
d19979e0d980
introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents:
2611
diff
changeset
|
2648 cache->max_size = max_size; |
7973
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7375
diff
changeset
|
2649 cache->min_free = min_free; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2650 |
5951
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2651 caches = (ngx_array_t *) (confp + cmd->offset); |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2652 |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2653 ce = ngx_array_push(caches); |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2654 if (ce == NULL) { |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2655 return NGX_CONF_ERROR; |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2656 } |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2657 |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2658 *ce = cache; |
610832763648
Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents:
5935
diff
changeset
|
2659 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2660 return NGX_CONF_OK; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2661 } |
477 | 2662 |
2663 | |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2664 char * |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2665 ngx_http_file_cache_valid_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2666 void *conf) |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2667 { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2668 char *p = conf; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2669 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2670 time_t valid; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2671 ngx_str_t *value; |
7267
7c614ef3c6ea
Cache: fixed cache valid slot to reject incorrect statuses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7075
diff
changeset
|
2672 ngx_int_t status; |
7c614ef3c6ea
Cache: fixed cache valid slot to reject incorrect statuses.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7075
diff
changeset
|
2673 ngx_uint_t i, n; |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2674 ngx_array_t **a; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2675 ngx_http_cache_valid_t *v; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2676 static ngx_uint_t statuses[] = { 200, 301, 302 }; |
477 | 2677 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2678 a = (ngx_array_t **) (p + cmd->offset); |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2679 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2680 if (*a == NGX_CONF_UNSET_PTR) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2681 *a = ngx_array_create(cf->pool, 1, sizeof(ngx_http_cache_valid_t)); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2682 if (*a == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2683 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2684 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2685 } |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2686 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2687 value = cf->args->elts; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2688 n = cf->args->nelts - 1; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2689 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2690 valid = ngx_parse_time(&value[n], 1); |
4474 | 2691 if (valid == (time_t) NGX_ERROR) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2692 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2693 "invalid time value \"%V\"", &value[n]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2694 return NGX_CONF_ERROR; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2695 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2696 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2697 if (n == 1) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2698 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2699 for (i = 0; i < 3; i++) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2700 v = ngx_array_push(*a); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2701 if (v == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2702 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2703 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2704 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2705 v->status = statuses[i]; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2706 v->valid = valid; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2707 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2708 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2709 return NGX_CONF_OK; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2710 } |
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2711 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2712 for (i = 1; i < n; i++) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2713 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2714 if (ngx_strcmp(value[i].data, "any") == 0) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2715 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2716 status = 0; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2717 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2718 } else { |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2719 |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2720 status = ngx_atoi(value[i].data, value[i].len); |
7359
b5ea47df9bee
Cache: status must be less then 599 in *_cache_valid directives.
Gena Makhomed <gmm@csdoc.com>
parents:
7267
diff
changeset
|
2721 if (status < 100 || status > 599) { |
2592
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2722 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2723 "invalid status \"%V\"", &value[i]); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2724 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2725 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2726 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2727 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2728 v = ngx_array_push(*a); |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2729 if (v == NULL) { |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2730 return NGX_CONF_ERROR; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2731 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2732 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2733 v->status = status; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2734 v->valid = valid; |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2735 } |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2736 |
3a8a53c0c42f
a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents:
633
diff
changeset
|
2737 return NGX_CONF_OK; |
202
74994aeef848
nginx-0.0.1-2003-12-01-19:28:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2738 } |