diff options
Diffstat (limited to 'src/http/ngx_http_cache.h')
| -rw-r--r-- | src/http/ngx_http_cache.h | 190 |
1 files changed, 80 insertions, 110 deletions
diff --git a/src/http/ngx_http_cache.h b/src/http/ngx_http_cache.h index fb446e471..b18d53961 100644 --- a/src/http/ngx_http_cache.h +++ b/src/http/ngx_http_cache.h @@ -13,145 +13,115 @@ #include <ngx_http.h> -/* - * The 3 bits allows the 7 uses before the cache entry allocation. - * We can use maximum 7 bits, i.e up to the 127 uses. - */ -#define NGX_HTTP_CACHE_LAZY_ALLOCATION_BITS 3 - - -typedef struct { - uint32_t crc; - ngx_str_t key; - time_t accessed; - - unsigned refs:20; /* 1048576 references */ - - unsigned count:NGX_HTTP_CACHE_LAZY_ALLOCATION_BITS; +/**/ +#define NGX_HTTP_CACHE_STALE 1 +#define NGX_HTTP_CACHE_AGED 2 +#define NGX_HTTP_CACHE_THE_SAME 3 +/**/ - unsigned deleted:1; - unsigned expired:1; - unsigned memory:1; - unsigned mmap:1; - unsigned notify:1; - - ngx_fd_t fd; -#if (NGX_USE_HTTP_FILE_CACHE_UNIQ) - ngx_file_uniq_t uniq; /* no needed with kqueue */ -#endif - time_t last_modified; - time_t updated; - - union { - off_t size; - ngx_str_t value; - } data; -} ngx_http_cache_entry_t; +#define NGX_HTTP_CACHE_KEY_LEN 16 typedef struct { - time_t expires; - time_t last_modified; - time_t date; - off_t length; - size_t key_len; - char key[1]; -} ngx_http_cache_header_t; + ngx_uint_t status; + time_t valid; +} ngx_http_cache_valid_t; -#define NGX_HTTP_CACHE_HASH 7 -#define NGX_HTTP_CACHE_NELTS 4 +/* ngx_http_file_cache_node_t takes exactly 64 bytes on FreeBSD/i386 */ typedef struct { - ngx_http_cache_entry_t *elts; - size_t hash; - size_t nelts; - time_t life; - time_t update; -#if (NGX_THREADS) - ngx_mutex_t mutex; -#endif - ngx_pool_t *pool; -} ngx_http_cache_hash_t; + ngx_rbtree_node_t node; + ngx_queue_t queue; + u_char key[NGX_HTTP_CACHE_KEY_LEN + - sizeof(ngx_rbtree_key_t)]; -typedef struct { - ngx_http_cache_hash_t *hash; - ngx_http_cache_entry_t *cache; - ngx_file_t file; - ngx_array_t key; - uint32_t crc; - u_char md5[16]; - ngx_path_t *path; - ngx_buf_t *buf; - time_t expires; - time_t last_modified; - time_t date; - off_t length; - size_t key_len; - size_t file_start; - ngx_file_uniq_t uniq; - ngx_log_t *log; - - /* STUB */ - ssize_t header_size; - ngx_str_t key0; -} ngx_http_cache_t; + unsigned count:20; + unsigned uses:10; + unsigned valid_msec:10; + unsigned error:10; + /* 7 unused bits */ + unsigned exists:1; + ngx_file_uniq_t uniq; + time_t expire; + time_t valid_sec; + size_t body_start; +} ngx_http_file_cache_node_t; -typedef struct { - ngx_path_t *path; - ngx_str_t key; - ngx_buf_t *buf; - unsigned file:1; - unsigned memory:1; - unsigned primary:1; -} ngx_http_cache_ctx_t; +struct ngx_http_cache_s { + ngx_file_t file; + ngx_array_t keys; + uint32_t crc32; + u_char key[NGX_HTTP_CACHE_KEY_LEN]; + + ngx_file_uniq_t uniq; + time_t valid_sec; + time_t last_modified; + time_t date; + size_t header_start; + size_t body_start; + off_t length; -#define NGX_HTTP_CACHE_STALE 1 -#define NGX_HTTP_CACHE_AGED 2 -#define NGX_HTTP_CACHE_THE_SAME 3 + ngx_uint_t min_uses; + ngx_uint_t uses; + ngx_uint_t error; + ngx_uint_t valid_msec; + ngx_buf_t *buf; -ngx_int_t ngx_http_cache_get(ngx_http_request_t *r, ngx_http_cache_ctx_t *ctx); + ngx_http_file_cache_t *file_cache; + ngx_http_file_cache_node_t *node; -ngx_int_t ngx_http_file_cache_get(ngx_http_request_t *r, - ngx_http_cache_ctx_t *ctx); + unsigned updated:1; + unsigned exists:1; + unsigned temp_file:1; +}; -ngx_int_t ngx_http_file_cache_open(ngx_http_cache_t *c); -ngx_int_t ngx_http_cache_cleaner_handler(ngx_gc_t *gc, ngx_str_t *name, - ngx_dir_t *dir); +typedef struct { + time_t valid_sec; + time_t last_modified; + time_t date; + uint32_t crc32; + u_short valid_msec; + u_short header_start; + u_short body_start; +} ngx_http_file_cache_header_t; -#if 0 +struct ngx_http_file_cache_s { + ngx_rbtree_t *rbtree; + ngx_queue_t *queue; + ngx_slab_pool_t *shpool; -ngx_http_cache_t *ngx_http_cache_get(ngx_http_cache_hash_t *cache, - ngx_http_cleanup_t *cleanup, - ngx_str_t *key, uint32_t *crc); + ngx_path_t *path; -ngx_http_cache_t *ngx_http_cache_alloc(ngx_http_cache_hash_t *hash, - ngx_http_cache_t *cache, - ngx_http_cleanup_t *cleanup, - ngx_str_t *key, uint32_t crc, - ngx_str_t *value, ngx_log_t *log); -void ngx_http_cache_free(ngx_http_cache_t *cache, - ngx_str_t *key, ngx_str_t *value, ngx_log_t *log); -void ngx_http_cache_lock(ngx_http_cache_hash_t *hash, ngx_http_cache_t *cache); -void ngx_http_cache_unlock(ngx_http_cache_hash_t *hash, - ngx_http_cache_t *cache, ngx_log_t *log); + time_t inactive; + time_t created; + time_t clean_time; + time_t next_clean_time; -int ngx_http_cache_update_file(ngx_http_request_t *r,ngx_http_cache_ctx_t *ctx, - ngx_str_t *temp_file); + ngx_shm_zone_t *shm_zone; +}; -int ngx_http_send_cached(ngx_http_request_t *r); +void ngx_http_file_cache_create_key(ngx_http_request_t *r); +ngx_int_t ngx_http_file_cache_open(ngx_http_request_t *r); +void ngx_http_file_cache_set_header(ngx_http_request_t *r, u_char *buf); +void ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf); +ngx_int_t ngx_http_cache_send(ngx_http_request_t *); +void ngx_http_file_cache_free(ngx_http_request_t *r, ngx_temp_file_t *tf); +time_t ngx_http_file_cache_valid(ngx_array_t *cache_valid, ngx_uint_t status); -char *ngx_http_set_cache_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -#endif +char *ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); +char *ngx_http_file_cache_valid_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); #endif /* _NGX_HTTP_CACHE_H_INCLUDED_ */ |
