src/http/ngx_http_cache.h - nginx source code

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_HTTP_CACHE_H_INCLUDED_
  6. #define _NGX_HTTP_CACHE_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>
  9. #include <ngx_http.h>


  10. #define NGX_HTTP_CACHE_MISS          1
  11. #define NGX_HTTP_CACHE_BYPASS        2
  12. #define NGX_HTTP_CACHE_EXPIRED       3
  13. #define NGX_HTTP_CACHE_STALE         4
  14. #define NGX_HTTP_CACHE_UPDATING      5
  15. #define NGX_HTTP_CACHE_REVALIDATED   6
  16. #define NGX_HTTP_CACHE_HIT           7
  17. #define NGX_HTTP_CACHE_SCARCE        8

  18. #define NGX_HTTP_CACHE_KEY_LEN       16
  19. #define NGX_HTTP_CACHE_ETAG_LEN      128
  20. #define NGX_HTTP_CACHE_VARY_LEN      128

  21. #define NGX_HTTP_CACHE_VERSION       5


  22. typedef struct {
  23.     ngx_uint_t                       status;
  24.     time_t                           valid;
  25. } ngx_http_cache_valid_t;


  26. typedef struct {
  27.     ngx_rbtree_node_t                node;
  28.     ngx_queue_t                      queue;

  29.     u_char                           key[NGX_HTTP_CACHE_KEY_LEN
  30.                                          - sizeof(ngx_rbtree_key_t)];

  31.     unsigned                         count:20;
  32.     unsigned                         uses:10;
  33.     unsigned                         valid_msec:10;
  34.     unsigned                         error:10;
  35.     unsigned                         exists:1;
  36.     unsigned                         updating:1;
  37.     unsigned                         deleting:1;
  38.     unsigned                         purged:1;
  39.                                      /* 10 unused bits */

  40.     ngx_file_uniq_t                  uniq;
  41.     time_t                           expire;
  42.     time_t                           valid_sec;
  43.     size_t                           body_start;
  44.     off_t                            fs_size;
  45.     ngx_msec_t                       lock_time;
  46. } ngx_http_file_cache_node_t;


  47. struct ngx_http_cache_s {
  48.     ngx_file_t                       file;
  49.     ngx_array_t                      keys;
  50.     uint32_t                         crc32;
  51.     u_char                           key[NGX_HTTP_CACHE_KEY_LEN];
  52.     u_char                           main[NGX_HTTP_CACHE_KEY_LEN];

  53.     ngx_file_uniq_t                  uniq;
  54.     time_t                           valid_sec;
  55.     time_t                           updating_sec;
  56.     time_t                           error_sec;
  57.     time_t                           last_modified;
  58.     time_t                           date;

  59.     ngx_str_t                        etag;
  60.     ngx_str_t                        vary;
  61.     u_char                           variant[NGX_HTTP_CACHE_KEY_LEN];

  62.     size_t                           buffer_size;
  63.     size_t                           header_start;
  64.     size_t                           body_start;
  65.     off_t                            length;
  66.     off_t                            fs_size;

  67.     ngx_uint_t                       min_uses;
  68.     ngx_uint_t                       error;
  69.     ngx_uint_t                       valid_msec;
  70.     ngx_uint_t                       vary_tag;

  71.     ngx_buf_t                       *buf;

  72.     ngx_http_file_cache_t           *file_cache;
  73.     ngx_http_file_cache_node_t      *node;

  74. #if (NGX_THREADS || NGX_COMPAT)
  75.     ngx_thread_task_t               *thread_task;
  76. #endif

  77.     ngx_msec_t                       lock_timeout;
  78.     ngx_msec_t                       lock_age;
  79.     ngx_msec_t                       lock_time;
  80.     ngx_msec_t                       wait_time;

  81.     ngx_event_t                      wait_event;

  82.     unsigned                         lock:1;
  83.     unsigned                         waiting:1;

  84.     unsigned                         updated:1;
  85.     unsigned                         updating:1;
  86.     unsigned                         exists:1;
  87.     unsigned                         temp_file:1;
  88.     unsigned                         purged:1;
  89.     unsigned                         reading:1;
  90.     unsigned                         secondary:1;
  91.     unsigned                         update_variant:1;
  92.     unsigned                         background:1;

  93.     unsigned                         stale_updating:1;
  94.     unsigned                         stale_error:1;
  95. };


  96. typedef struct {
  97.     ngx_uint_t                       version;
  98.     time_t                           valid_sec;
  99.     time_t                           updating_sec;
  100.     time_t                           error_sec;
  101.     time_t                           last_modified;
  102.     time_t                           date;
  103.     uint32_t                         crc32;
  104.     u_short                          valid_msec;
  105.     u_short                          header_start;
  106.     u_short                          body_start;
  107.     u_char                           etag_len;
  108.     u_char                           etag[NGX_HTTP_CACHE_ETAG_LEN];
  109.     u_char                           vary_len;
  110.     u_char                           vary[NGX_HTTP_CACHE_VARY_LEN];
  111.     u_char                           variant[NGX_HTTP_CACHE_KEY_LEN];
  112. } ngx_http_file_cache_header_t;


  113. typedef struct {
  114.     ngx_rbtree_t                     rbtree;
  115.     ngx_rbtree_node_t                sentinel;
  116.     ngx_queue_t                      queue;
  117.     ngx_atomic_t                     cold;
  118.     ngx_atomic_t                     loading;
  119.     off_t                            size;
  120.     ngx_uint_t                       count;
  121.     ngx_uint_t                       watermark;
  122. } ngx_http_file_cache_sh_t;


  123. struct ngx_http_file_cache_s {
  124.     ngx_http_file_cache_sh_t        *sh;
  125.     ngx_slab_pool_t                 *shpool;

  126.     ngx_path_t                      *path;

  127.     off_t                            min_free;
  128.     off_t                            max_size;
  129.     size_t                           bsize;

  130.     time_t                           inactive;

  131.     time_t                           fail_time;

  132.     ngx_uint_t                       files;
  133.     ngx_uint_t                       loader_files;
  134.     ngx_msec_t                       last;
  135.     ngx_msec_t                       loader_sleep;
  136.     ngx_msec_t                       loader_threshold;

  137.     ngx_uint_t                       manager_files;
  138.     ngx_msec_t                       manager_sleep;
  139.     ngx_msec_t                       manager_threshold;

  140.     ngx_shm_zone_t                  *shm_zone;

  141.     ngx_uint_t                       use_temp_path;
  142.                                      /* unsigned use_temp_path:1 */
  143. };


  144. ngx_int_t ngx_http_file_cache_new(ngx_http_request_t *r);
  145. ngx_int_t ngx_http_file_cache_create(ngx_http_request_t *r);
  146. void ngx_http_file_cache_create_key(ngx_http_request_t *r);
  147. ngx_int_t ngx_http_file_cache_open(ngx_http_request_t *r);
  148. ngx_int_t ngx_http_file_cache_set_header(ngx_http_request_t *r, u_char *buf);
  149. void ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf);
  150. void ngx_http_file_cache_update_header(ngx_http_request_t *r);
  151. ngx_int_t ngx_http_cache_send(ngx_http_request_t *);
  152. void ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf);
  153. time_t ngx_http_file_cache_valid(ngx_array_t *cache_valid, ngx_uint_t status);

  154. char *ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd,
  155.     void *conf);
  156. char *ngx_http_file_cache_valid_set_slot(ngx_conf_t *cf, ngx_command_t *cmd,
  157.     void *conf);


  158. extern ngx_str_t  ngx_http_cache_status[];


  159. #endif /* _NGX_HTTP_CACHE_H_INCLUDED_ */