diff src/http/ngx_http_cache.h @ 464:c8cfb6c462ef NGINX_0_7_44

nginx 0.7.44 *) Feature: the ngx_http_proxy_module preliminary cache support. *) Feature: the --with-pcre option in the configure. *) Feature: the "try_files" directive is now allowed on the server block level. *) Bugfix: the "try_files" directive handled incorrectly a query string in a fallback parameter. *) Bugfix: the "try_files" directive might test incorrectly directories. *) Bugfix: if there is the single server for given address:port pair, then captures in regular expressions in a "server_name" directive did not work.
author Igor Sysoev <http://sysoev.ru>
date Mon, 23 Mar 2009 00:00:00 +0300
parents 45fe5b98a9de
children 56baf312c1b5
line wrap: on
line diff
--- 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;
-
-    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;
+/**/
+#define NGX_HTTP_CACHE_STALE         1
+#define NGX_HTTP_CACHE_AGED          2
+#define NGX_HTTP_CACHE_THE_SAME      3
+/**/
 
-    union {
-        off_t        size;
-        ngx_str_t    value;
-    } data;
-} ngx_http_cache_entry_t;
-
-
-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;
-
-
-#define NGX_HTTP_CACHE_HASH   7
-#define NGX_HTTP_CACHE_NELTS  4
-
-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;
+#define NGX_HTTP_CACHE_KEY_LEN       16
 
 
 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;
+    ngx_uint_t                       status;
+    time_t                           valid;
+} ngx_http_cache_valid_t;
+
+
+/* ngx_http_file_cache_node_t takes exactly 64 bytes on FreeBSD/i386 */
+
+typedef struct {
+    ngx_rbtree_node_t                node;
+    ngx_queue_t                      queue;
+
+    u_char                           key[NGX_HTTP_CACHE_KEY_LEN
+                                         - sizeof(ngx_rbtree_key_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;
+
 
-    /* STUB */
-    ssize_t                   header_size;
-    ngx_str_t                 key0;
-} ngx_http_cache_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;
+
+    ngx_uint_t                       min_uses;
+    ngx_uint_t                       uses;
+    ngx_uint_t                       error;
+    ngx_uint_t                       valid_msec;
+
+    ngx_buf_t                       *buf;
+
+    ngx_http_file_cache_t           *file_cache;
+    ngx_http_file_cache_node_t      *node;
+
+    unsigned                         updated:1;
+    unsigned                         exists:1;
+    unsigned                         temp_file:1;
+};
 
 
 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;
-
-
-#define NGX_HTTP_CACHE_STALE     1
-#define NGX_HTTP_CACHE_AGED      2
-#define NGX_HTTP_CACHE_THE_SAME  3
-
-
-ngx_int_t ngx_http_cache_get(ngx_http_request_t *r, ngx_http_cache_ctx_t *ctx);
-
-ngx_int_t ngx_http_file_cache_get(ngx_http_request_t *r,
-                                  ngx_http_cache_ctx_t *ctx);
-
-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);
+    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);
-
-int ngx_http_send_cached(ngx_http_request_t *r);
+    ngx_shm_zone_t                  *shm_zone;
+};
 
 
-char *ngx_http_set_cache_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+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);
 
-#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_ */