view src/http/ngx_http_cache.h @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro и N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 45fe5b98a9de
children c8cfb6c462ef
line wrap: on
line source


/*
 * Copyright (C) Igor Sysoev
 */


#ifndef _NGX_HTTP_CACHE_H_INCLUDED_
#define _NGX_HTTP_CACHE_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>
#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;

    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;


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;


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);


#if 0

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_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);

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);


char *ngx_http_set_cache_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);

#endif


#endif /* _NGX_HTTP_CACHE_H_INCLUDED_ */