Lines Matching refs:cache

31 static ngx_int_t ngx_http_file_cache_exists(ngx_http_file_cache_t *cache,
36 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key);
48 static time_t ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache);
49 static time_t ngx_http_file_cache_expire(ngx_http_file_cache_t *cache);
50 static void ngx_http_file_cache_delete(ngx_http_file_cache_t *cache,
52 static void ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache);
61 static ngx_int_t ngx_http_file_cache_add(ngx_http_file_cache_t *cache,
65 static void ngx_http_file_cache_set_watermark(ngx_http_file_cache_t *cache);
89 ngx_http_file_cache_t *cache; in ngx_http_file_cache_init() local
91 cache = shm_zone->data; in ngx_http_file_cache_init()
94 if (ngx_strcmp(cache->path->name.data, ocache->path->name.data) != 0) { in ngx_http_file_cache_init()
98 &shm_zone->shm.name, &cache->path->name, in ngx_http_file_cache_init()
105 if (cache->path->level[n] != ocache->path->level[n]) { in ngx_http_file_cache_init()
113 cache->sh = ocache->sh; in ngx_http_file_cache_init()
115 cache->shpool = ocache->shpool; in ngx_http_file_cache_init()
116 cache->bsize = ocache->bsize; in ngx_http_file_cache_init()
118 cache->max_size /= cache->bsize; in ngx_http_file_cache_init()
120 if (!cache->sh->cold || cache->sh->loading) { in ngx_http_file_cache_init()
121 cache->path->loader = NULL; in ngx_http_file_cache_init()
127 cache->shpool = (ngx_slab_pool_t *) shm_zone->shm.addr; in ngx_http_file_cache_init()
130 cache->sh = cache->shpool->data; in ngx_http_file_cache_init()
131 cache->bsize = ngx_fs_bsize(cache->path->name.data); in ngx_http_file_cache_init()
132 cache->max_size /= cache->bsize; in ngx_http_file_cache_init()
137 cache->sh = ngx_slab_alloc(cache->shpool, sizeof(ngx_http_file_cache_sh_t)); in ngx_http_file_cache_init()
138 if (cache->sh == NULL) { in ngx_http_file_cache_init()
142 cache->shpool->data = cache->sh; in ngx_http_file_cache_init()
144 ngx_rbtree_init(&cache->sh->rbtree, &cache->sh->sentinel, in ngx_http_file_cache_init()
147 ngx_queue_init(&cache->sh->queue); in ngx_http_file_cache_init()
149 cache->sh->cold = 1; in ngx_http_file_cache_init()
150 cache->sh->loading = 0; in ngx_http_file_cache_init()
151 cache->sh->size = 0; in ngx_http_file_cache_init()
152 cache->sh->count = 0; in ngx_http_file_cache_init()
153 cache->sh->watermark = (ngx_uint_t) -1; in ngx_http_file_cache_init()
155 cache->bsize = ngx_fs_bsize(cache->path->name.data); in ngx_http_file_cache_init()
157 cache->max_size /= cache->bsize; in ngx_http_file_cache_init()
161 cache->shpool->log_ctx = ngx_slab_alloc(cache->shpool, len); in ngx_http_file_cache_init()
162 if (cache->shpool->log_ctx == NULL) { in ngx_http_file_cache_init()
166 ngx_sprintf(cache->shpool->log_ctx, " in cache keys zone \"%V\"%Z", in ngx_http_file_cache_init()
169 cache->shpool->log_nomem = 0; in ngx_http_file_cache_init()
189 r->cache = c; in ngx_http_file_cache_new()
202 ngx_http_file_cache_t *cache; in ngx_http_file_cache_create() local
204 c = r->cache; in ngx_http_file_cache_create()
205 cache = c->file_cache; in ngx_http_file_cache_create()
215 if (ngx_http_file_cache_exists(cache, c) == NGX_ERROR) { in ngx_http_file_cache_create()
219 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { in ngx_http_file_cache_create()
236 c = r->cache; in ngx_http_file_cache_create_key()
272 ngx_http_file_cache_t *cache; in ngx_http_file_cache_open() local
275 c = r->cache; in ngx_http_file_cache_open()
285 cache = c->file_cache; in ngx_http_file_cache_open()
297 rc = ngx_http_file_cache_exists(cache, c); in ngx_http_file_cache_open()
322 test = cache->sh->cold ? 1 : 0; in ngx_http_file_cache_open()
338 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { in ngx_http_file_cache_open()
383 c->fs_size = (of.fs_size + cache->bsize - 1) / cache->bsize; in ngx_http_file_cache_open()
406 ngx_http_file_cache_t *cache; in ngx_http_file_cache_lock() local
414 cache = c->file_cache; in ngx_http_file_cache_lock()
416 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_lock()
427 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_lock()
475 ngx_http_file_cache_lock_wait(r, r->cache); in ngx_http_file_cache_lock_wait_handler()
486 ngx_http_file_cache_t *cache; in ngx_http_file_cache_lock_wait() local
499 cache = c->file_cache; in ngx_http_file_cache_lock_wait()
502 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_lock_wait()
510 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_lock_wait()
534 ngx_http_file_cache_t *cache; in ngx_http_file_cache_read() local
616 cache = c->file_cache; in ngx_http_file_cache_read()
618 if (cache->sh->cold) { in ngx_http_file_cache_read()
620 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_read()
629 cache->sh->size += c->fs_size; in ngx_http_file_cache_read()
632 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_read()
641 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_read()
653 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_read()
820 ngx_http_file_cache_exists(ngx_http_file_cache_t *cache, ngx_http_cache_t *c) in ngx_http_file_cache_exists() argument
825 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_exists()
830 fcn = ngx_http_file_cache_lookup(cache, c->key); in ngx_http_file_cache_exists()
869 fcn = ngx_slab_calloc_locked(cache->shpool, in ngx_http_file_cache_exists()
872 ngx_http_file_cache_set_watermark(cache); in ngx_http_file_cache_exists()
874 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_exists()
876 (void) ngx_http_file_cache_forced_expire(cache); in ngx_http_file_cache_exists()
878 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_exists()
880 fcn = ngx_slab_calloc_locked(cache->shpool, in ngx_http_file_cache_exists()
884 "could not allocate node%s", cache->shpool->log_ctx); in ngx_http_file_cache_exists()
890 cache->sh->count++; in ngx_http_file_cache_exists()
897 ngx_rbtree_insert(&cache->sh->rbtree, &fcn->node); in ngx_http_file_cache_exists()
916 fcn->expire = ngx_time() + cache->inactive; in ngx_http_file_cache_exists()
918 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); in ngx_http_file_cache_exists()
926 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_exists()
938 c = r->cache; in ngx_http_file_cache_name()
968 ngx_http_file_cache_lookup(ngx_http_file_cache_t *cache, u_char *key) in ngx_http_file_cache_lookup() argument
977 node = cache->sh->rbtree.root; in ngx_http_file_cache_lookup()
978 sentinel = cache->sh->rbtree.sentinel; in ngx_http_file_cache_lookup()
1068 ngx_md5_update(&md5, r->cache->main, NGX_HTTP_CACHE_KEY_LEN); in ngx_http_file_cache_vary()
1210 ngx_http_file_cache_t *cache; in ngx_http_file_cache_reopen() local
1222 cache = c->file_cache; in ngx_http_file_cache_reopen()
1224 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_reopen()
1229 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_reopen()
1254 c = r->cache; in ngx_http_file_cache_set_header()
1309 ngx_http_file_cache_t *cache; in ngx_http_file_cache_update_variant() local
1326 cache = c->file_cache; in ngx_http_file_cache_update_variant()
1331 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_update_variant()
1337 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_update_variant()
1343 if (ngx_http_file_cache_exists(cache, c) == NGX_ERROR) { in ngx_http_file_cache_update_variant()
1347 if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { in ngx_http_file_cache_update_variant()
1364 ngx_http_file_cache_t *cache; in ngx_http_file_cache_update() local
1366 c = r->cache; in ngx_http_file_cache_update()
1375 cache = c->file_cache; in ngx_http_file_cache_update()
1406 fs_size = (ngx_file_fs_size(&fi) + cache->bsize - 1) / cache->bsize; in ngx_http_file_cache_update()
1410 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_update()
1417 cache->sh->size += fs_size - c->node->fs_size; in ngx_http_file_cache_update()
1426 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_update()
1443 c = r->cache; in ngx_http_file_cache_update_header()
1570 c = r->cache; in ngx_http_cache_send()
1618 ngx_http_file_cache_t *cache; in ngx_http_file_cache_free() local
1625 cache = c->file_cache; in ngx_http_file_cache_free()
1630 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_free()
1649 ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node); in ngx_http_file_cache_free()
1650 ngx_slab_free_locked(cache->shpool, fcn); in ngx_http_file_cache_free()
1651 cache->sh->count--; in ngx_http_file_cache_free()
1655 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_free()
1702 ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache) in ngx_http_file_cache_forced_expire() argument
1716 path = cache->path; in ngx_http_file_cache_forced_expire()
1730 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_forced_expire()
1733 if (ngx_queue_empty(&cache->sh->queue)) { in ngx_http_file_cache_forced_expire()
1737 q = ngx_queue_last(&cache->sh->queue); in ngx_http_file_cache_forced_expire()
1751 ngx_http_file_cache_delete(cache, q, name); in ngx_http_file_cache_forced_expire()
1768 fcn->expire = ngx_time() + cache->inactive; in ngx_http_file_cache_forced_expire()
1769 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); in ngx_http_file_cache_forced_expire()
1787 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_forced_expire()
1796 ngx_http_file_cache_expire(ngx_http_file_cache_t *cache) in ngx_http_file_cache_expire() argument
1810 path = cache->path; in ngx_http_file_cache_expire()
1822 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_expire()
1831 if (ngx_queue_empty(&cache->sh->queue)) { in ngx_http_file_cache_expire()
1836 q = ngx_queue_last(&cache->sh->queue); in ngx_http_file_cache_expire()
1853 ngx_http_file_cache_delete(cache, q, name); in ngx_http_file_cache_expire()
1874 fcn->expire = ngx_time() + cache->inactive; in ngx_http_file_cache_expire()
1875 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); in ngx_http_file_cache_expire()
1883 if (++cache->files >= cache->manager_files) { in ngx_http_file_cache_expire()
1890 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); in ngx_http_file_cache_expire()
1892 if (elapsed >= cache->manager_threshold) { in ngx_http_file_cache_expire()
1898 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_expire()
1907 ngx_http_file_cache_delete(ngx_http_file_cache_t *cache, ngx_queue_t *q, in ngx_http_file_cache_delete() argument
1918 cache->sh->size -= fcn->fs_size; in ngx_http_file_cache_delete()
1920 path = cache->path; in ngx_http_file_cache_delete()
1930 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_delete()
1943 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_delete()
1950 ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node); in ngx_http_file_cache_delete()
1951 ngx_slab_free_locked(cache->shpool, fcn); in ngx_http_file_cache_delete()
1952 cache->sh->count--; in ngx_http_file_cache_delete()
1960 ngx_http_file_cache_t *cache = data; in ngx_http_file_cache_manager() local
1967 cache->last = ngx_current_msec; in ngx_http_file_cache_manager()
1968 cache->files = 0; in ngx_http_file_cache_manager()
1970 next = (ngx_msec_t) ngx_http_file_cache_expire(cache) * 1000; in ngx_http_file_cache_manager()
1973 next = cache->manager_sleep; in ngx_http_file_cache_manager()
1978 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_manager()
1980 size = cache->sh->size; in ngx_http_file_cache_manager()
1981 count = cache->sh->count; in ngx_http_file_cache_manager()
1982 watermark = cache->sh->watermark; in ngx_http_file_cache_manager()
1984 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_manager()
1990 if (size < cache->max_size && count < watermark) { in ngx_http_file_cache_manager()
1994 wait = ngx_http_file_cache_forced_expire(cache); in ngx_http_file_cache_manager()
2005 if (++cache->files >= cache->manager_files) { in ngx_http_file_cache_manager()
2006 next = cache->manager_sleep; in ngx_http_file_cache_manager()
2012 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); in ngx_http_file_cache_manager()
2014 if (elapsed >= cache->manager_threshold) { in ngx_http_file_cache_manager()
2015 next = cache->manager_sleep; in ngx_http_file_cache_manager()
2022 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); in ngx_http_file_cache_manager()
2026 cache->files, elapsed, next); in ngx_http_file_cache_manager()
2035 ngx_http_file_cache_t *cache = data; in ngx_http_file_cache_loader() local
2039 if (!cache->sh->cold || cache->sh->loading) { in ngx_http_file_cache_loader()
2043 if (!ngx_atomic_cmp_set(&cache->sh->loading, 0, ngx_pid)) { in ngx_http_file_cache_loader()
2055 tree.data = cache; in ngx_http_file_cache_loader()
2059 cache->last = ngx_current_msec; in ngx_http_file_cache_loader()
2060 cache->files = 0; in ngx_http_file_cache_loader()
2062 if (ngx_walk_tree(&tree, &cache->path->name) == NGX_ABORT) { in ngx_http_file_cache_loader()
2063 cache->sh->loading = 0; in ngx_http_file_cache_loader()
2067 cache->sh->cold = 0; in ngx_http_file_cache_loader()
2068 cache->sh->loading = 0; in ngx_http_file_cache_loader()
2072 &cache->path->name, in ngx_http_file_cache_loader()
2073 ((double) cache->sh->size * cache->bsize) / (1024 * 1024), in ngx_http_file_cache_loader()
2074 cache->bsize); in ngx_http_file_cache_loader()
2089 ngx_http_file_cache_t *cache; in ngx_http_file_cache_manage_file() local
2091 cache = ctx->data; in ngx_http_file_cache_manage_file()
2097 if (++cache->files >= cache->loader_files) { in ngx_http_file_cache_manage_file()
2098 ngx_http_file_cache_loader_sleep(cache); in ngx_http_file_cache_manage_file()
2103 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); in ngx_http_file_cache_manage_file()
2108 if (elapsed >= cache->loader_threshold) { in ngx_http_file_cache_manage_file()
2109 ngx_http_file_cache_loader_sleep(cache); in ngx_http_file_cache_manage_file()
2131 ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache) in ngx_http_file_cache_loader_sleep() argument
2133 ngx_msleep(cache->loader_sleep); in ngx_http_file_cache_loader_sleep()
2137 cache->last = ngx_current_msec; in ngx_http_file_cache_loader_sleep()
2138 cache->files = 0; in ngx_http_file_cache_loader_sleep()
2149 ngx_http_file_cache_t *cache; in ngx_http_file_cache_add_file() local
2173 cache = ctx->data; in ngx_http_file_cache_add_file()
2176 c.fs_size = (ctx->fs_size + cache->bsize - 1) / cache->bsize; in ngx_http_file_cache_add_file()
2192 return ngx_http_file_cache_add(cache, &c); in ngx_http_file_cache_add_file()
2197 ngx_http_file_cache_add(ngx_http_file_cache_t *cache, ngx_http_cache_t *c) in ngx_http_file_cache_add() argument
2201 ngx_shmtx_lock(&cache->shpool->mutex); in ngx_http_file_cache_add()
2203 fcn = ngx_http_file_cache_lookup(cache, c->key); in ngx_http_file_cache_add()
2207 fcn = ngx_slab_calloc_locked(cache->shpool, in ngx_http_file_cache_add()
2210 ngx_http_file_cache_set_watermark(cache); in ngx_http_file_cache_add()
2212 if (cache->fail_time != ngx_time()) { in ngx_http_file_cache_add()
2213 cache->fail_time = ngx_time(); in ngx_http_file_cache_add()
2215 "could not allocate node%s", cache->shpool->log_ctx); in ngx_http_file_cache_add()
2218 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_add()
2222 cache->sh->count++; in ngx_http_file_cache_add()
2229 ngx_rbtree_insert(&cache->sh->rbtree, &fcn->node); in ngx_http_file_cache_add()
2235 cache->sh->size += c->fs_size; in ngx_http_file_cache_add()
2241 fcn->expire = ngx_time() + cache->inactive; in ngx_http_file_cache_add()
2243 ngx_queue_insert_head(&cache->sh->queue, &fcn->queue); in ngx_http_file_cache_add()
2245 ngx_shmtx_unlock(&cache->shpool->mutex); in ngx_http_file_cache_add()
2267 ngx_http_file_cache_set_watermark(ngx_http_file_cache_t *cache) in ngx_http_file_cache_set_watermark() argument
2269 cache->sh->watermark = cache->sh->count - cache->sh->count / 8; in ngx_http_file_cache_set_watermark()
2272 "http file cache watermark: %ui", cache->sh->watermark); in ngx_http_file_cache_set_watermark()
2317 ngx_http_file_cache_t *cache, **ce; in ngx_http_file_cache_set_slot() local
2319 cache = ngx_pcalloc(cf->pool, sizeof(ngx_http_file_cache_t)); in ngx_http_file_cache_set_slot()
2320 if (cache == NULL) { in ngx_http_file_cache_set_slot()
2324 cache->path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t)); in ngx_http_file_cache_set_slot()
2325 if (cache->path == NULL) { in ngx_http_file_cache_set_slot()
2347 cache->path->name = value[1]; in ngx_http_file_cache_set_slot()
2349 if (cache->path->name.data[cache->path->name.len - 1] == '/') { in ngx_http_file_cache_set_slot()
2350 cache->path->name.len--; in ngx_http_file_cache_set_slot()
2353 if (ngx_conf_full_name(cf->cycle, &cache->path->name, 0) != NGX_OK) { in ngx_http_file_cache_set_slot()
2368 cache->path->level[n] = *p++ - '0'; in ngx_http_file_cache_set_slot()
2369 cache->path->len += cache->path->level[n] + 1; in ngx_http_file_cache_set_slot()
2385 if (cache->path->len < 10 + NGX_MAX_PATH_LEVEL) { in ngx_http_file_cache_set_slot()
2575 cache->path->manager = ngx_http_file_cache_manager; in ngx_http_file_cache_set_slot()
2576 cache->path->loader = ngx_http_file_cache_loader; in ngx_http_file_cache_set_slot()
2577 cache->path->data = cache; in ngx_http_file_cache_set_slot()
2578 cache->path->conf_file = cf->conf_file->file.name.data; in ngx_http_file_cache_set_slot()
2579 cache->path->line = cf->conf_file->line; in ngx_http_file_cache_set_slot()
2580 cache->loader_files = loader_files; in ngx_http_file_cache_set_slot()
2581 cache->loader_sleep = loader_sleep; in ngx_http_file_cache_set_slot()
2582 cache->loader_threshold = loader_threshold; in ngx_http_file_cache_set_slot()
2583 cache->manager_files = manager_files; in ngx_http_file_cache_set_slot()
2584 cache->manager_sleep = manager_sleep; in ngx_http_file_cache_set_slot()
2585 cache->manager_threshold = manager_threshold; in ngx_http_file_cache_set_slot()
2587 if (ngx_add_path(cf, &cache->path) != NGX_OK) { in ngx_http_file_cache_set_slot()
2591 cache->shm_zone = ngx_shared_memory_add(cf, &name, size, cmd->post); in ngx_http_file_cache_set_slot()
2592 if (cache->shm_zone == NULL) { in ngx_http_file_cache_set_slot()
2596 if (cache->shm_zone->data) { in ngx_http_file_cache_set_slot()
2603 cache->shm_zone->init = ngx_http_file_cache_init; in ngx_http_file_cache_set_slot()
2604 cache->shm_zone->data = cache; in ngx_http_file_cache_set_slot()
2606 cache->use_temp_path = use_temp_path; in ngx_http_file_cache_set_slot()
2608 cache->inactive = inactive; in ngx_http_file_cache_set_slot()
2609 cache->max_size = max_size; in ngx_http_file_cache_set_slot()
2618 *ce = cache; in ngx_http_file_cache_set_slot()