From c2e49a4196749676ccea31ae645c5d3eb4408520 Mon Sep 17 00:00:00 2001 From: Maxim Dounin Date: Thu, 26 Jun 2014 02:27:21 +0400 Subject: [PATCH] Cache: version in cache files. This allows to change the structure of cache files without spamming logs with false alerts. --- src/http/ngx_http_cache.h | 3 +++ src/http/ngx_http_file_cache.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/http/ngx_http_cache.h b/src/http/ngx_http_cache.h index 193a35322..1a3117adb 100644 --- a/src/http/ngx_http_cache.h +++ b/src/http/ngx_http_cache.h @@ -25,6 +25,8 @@ #define NGX_HTTP_CACHE_KEY_LEN 16 +#define NGX_HTTP_CACHE_VERSION 1 + typedef struct { ngx_uint_t status; @@ -97,6 +99,7 @@ struct ngx_http_cache_s { typedef struct { + ngx_uint_t version; time_t valid_sec; time_t last_modified; time_t date; diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c index 4d9e82235..1eab77215 100644 --- a/src/http/ngx_http_file_cache.c +++ b/src/http/ngx_http_file_cache.c @@ -498,6 +498,12 @@ ngx_http_file_cache_read(ngx_http_request_t *r, ngx_http_cache_t *c) h = (ngx_http_file_cache_header_t *) c->buf->pos; + if (h->version != NGX_HTTP_CACHE_VERSION) { + ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, + "cache file \"%s\" version mismatch", c->file.name.data); + return NGX_DECLINED; + } + if (h->crc32 != c->crc32) { ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, "cache file \"%s\" has md5 collision", c->file.name.data); @@ -875,6 +881,7 @@ ngx_http_file_cache_set_header(ngx_http_request_t *r, u_char *buf) ngx_memzero(h, sizeof(ngx_http_file_cache_header_t)); + h->version = NGX_HTTP_CACHE_VERSION; h->valid_sec = c->valid_sec; h->last_modified = c->last_modified; h->date = c->date; @@ -1042,7 +1049,8 @@ ngx_http_file_cache_update_header(ngx_http_request_t *r) goto done; } - if (h.last_modified != c->last_modified + if (h.version != NGX_HTTP_CACHE_VERSION + || h.last_modified != c->last_modified || h.crc32 != c->crc32 || h.header_start != c->header_start || h.body_start != c->body_start) @@ -1060,6 +1068,7 @@ ngx_http_file_cache_update_header(ngx_http_request_t *r) ngx_memzero(&h, sizeof(ngx_http_file_cache_header_t)); + h.version = NGX_HTTP_CACHE_VERSION; h.valid_sec = c->valid_sec; h.last_modified = c->last_modified; h.date = c->date;