Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/ngx_http_cache.h')
-rw-r--r--src/http/ngx_http_cache.h190
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_ */