mirror of
https://github.com/apache/httpd.git
synced 2025-11-06 16:49:32 +03:00
Quick hack to store varied contents under the same path, making it
easier for admins to manage the cache. Still requires modifications to htcacheclean to work. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@219945 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
3
CHANGES
3
CHANGES
@@ -2,6 +2,9 @@
|
|||||||
Changes with Apache 2.1.7
|
Changes with Apache 2.1.7
|
||||||
[Remove entries to the current 2.0 section below, when backported]
|
[Remove entries to the current 2.0 section below, when backported]
|
||||||
|
|
||||||
|
*) mod_cache: Store varied contents all in the same prefix for a varied URI.
|
||||||
|
[Paul Querna]
|
||||||
|
|
||||||
*) mod_cache: Run the CACHE_SAVE and CACHE_OUT Filters after other content
|
*) mod_cache: Run the CACHE_SAVE and CACHE_OUT Filters after other content
|
||||||
filters. [Paul Querna]
|
filters. [Paul Querna]
|
||||||
|
|
||||||
|
|||||||
26
modules/cache/mod_disk_cache.c
vendored
26
modules/cache/mod_disk_cache.c
vendored
@@ -50,8 +50,8 @@
|
|||||||
* CRLF
|
* CRLF
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VARY_FORMAT_VERSION 1
|
#define VARY_FORMAT_VERSION 3
|
||||||
#define DISK_FORMAT_VERSION 2
|
#define DISK_FORMAT_VERSION 4
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* Indicates the format of the header struct stored on-disk. */
|
/* Indicates the format of the header struct stored on-disk. */
|
||||||
@@ -76,6 +76,7 @@ typedef struct {
|
|||||||
typedef struct disk_cache_object {
|
typedef struct disk_cache_object {
|
||||||
const char *root; /* the location of the cache directory */
|
const char *root; /* the location of the cache directory */
|
||||||
char *tempfile; /* temp file tohold the content */
|
char *tempfile; /* temp file tohold the content */
|
||||||
|
const char *prefix;
|
||||||
const char *datafile; /* name of file where the data will go */
|
const char *datafile; /* name of file where the data will go */
|
||||||
const char *hdrsfile; /* name of file where the hdrs will go */
|
const char *hdrsfile; /* name of file where the hdrs will go */
|
||||||
const char *hashfile; /* Computed hash key for this URI */
|
const char *hashfile; /* Computed hash key for this URI */
|
||||||
@@ -124,6 +125,8 @@ static apr_status_t read_array(request_rec *r, apr_array_header_t* arr,
|
|||||||
*/
|
*/
|
||||||
#define CACHE_HEADER_SUFFIX ".header"
|
#define CACHE_HEADER_SUFFIX ".header"
|
||||||
#define CACHE_DATA_SUFFIX ".data"
|
#define CACHE_DATA_SUFFIX ".data"
|
||||||
|
#define CACHE_VDIR_SUFFIX ".vary"
|
||||||
|
|
||||||
static char *header_file(apr_pool_t *p, disk_cache_conf *conf,
|
static char *header_file(apr_pool_t *p, disk_cache_conf *conf,
|
||||||
disk_cache_object_t *dobj, const char *name)
|
disk_cache_object_t *dobj, const char *name)
|
||||||
{
|
{
|
||||||
@@ -131,9 +134,16 @@ static char *header_file(apr_pool_t *p, disk_cache_conf *conf,
|
|||||||
dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels,
|
dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels,
|
||||||
conf->dirlength, name);
|
conf->dirlength, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dobj->prefix) {
|
||||||
|
return apr_pstrcat(p, dobj->prefix, CACHE_VDIR_SUFFIX, "/",
|
||||||
|
dobj->hashfile, CACHE_HEADER_SUFFIX, NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
|
return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
|
||||||
CACHE_HEADER_SUFFIX, NULL);
|
CACHE_HEADER_SUFFIX, NULL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static char *data_file(apr_pool_t *p, disk_cache_conf *conf,
|
static char *data_file(apr_pool_t *p, disk_cache_conf *conf,
|
||||||
disk_cache_object_t *dobj, const char *name)
|
disk_cache_object_t *dobj, const char *name)
|
||||||
@@ -142,9 +152,16 @@ static char *data_file(apr_pool_t *p, disk_cache_conf *conf,
|
|||||||
dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels,
|
dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels,
|
||||||
conf->dirlength, name);
|
conf->dirlength, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dobj->prefix) {
|
||||||
|
return apr_pstrcat(p, dobj->prefix, CACHE_VDIR_SUFFIX, "/",
|
||||||
|
dobj->hashfile, CACHE_DATA_SUFFIX, NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
|
return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
|
||||||
CACHE_DATA_SUFFIX, NULL);
|
CACHE_DATA_SUFFIX, NULL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void mkdir_structure(disk_cache_conf *conf, const char *file, apr_pool_t *pool)
|
static void mkdir_structure(disk_cache_conf *conf, const char *file, apr_pool_t *pool)
|
||||||
{
|
{
|
||||||
@@ -352,6 +369,7 @@ static int create_entity(cache_handle_t *h, request_rec *r, const char *key, apr
|
|||||||
obj->key = apr_pstrdup(r->pool, key);
|
obj->key = apr_pstrdup(r->pool, key);
|
||||||
|
|
||||||
dobj->name = obj->key;
|
dobj->name = obj->key;
|
||||||
|
dobj->prefix = NULL;
|
||||||
dobj->datafile = data_file(r->pool, conf, dobj, key);
|
dobj->datafile = data_file(r->pool, conf, dobj, key);
|
||||||
dobj->hdrsfile = header_file(r->pool, conf, dobj, key);
|
dobj->hdrsfile = header_file(r->pool, conf, dobj, key);
|
||||||
dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
|
dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
|
||||||
@@ -393,6 +411,8 @@ static int open_entity(cache_handle_t *h, request_rec *r, const char *key)
|
|||||||
info = &(obj->info);
|
info = &(obj->info);
|
||||||
|
|
||||||
/* Open the headers file */
|
/* Open the headers file */
|
||||||
|
dobj->prefix = NULL;
|
||||||
|
|
||||||
dobj->hdrsfile = header_file(r->pool, conf, dobj, key);
|
dobj->hdrsfile = header_file(r->pool, conf, dobj, key);
|
||||||
flags = APR_READ|APR_BINARY|APR_BUFFERED;
|
flags = APR_READ|APR_BINARY|APR_BUFFERED;
|
||||||
rc = apr_file_open(&dobj->hfd, dobj->hdrsfile, flags, 0, r->pool);
|
rc = apr_file_open(&dobj->hfd, dobj->hdrsfile, flags, 0, r->pool);
|
||||||
@@ -428,6 +448,7 @@ static int open_entity(cache_handle_t *h, request_rec *r, const char *key)
|
|||||||
nkey = regen_key(r->pool, r->headers_in, varray, key);
|
nkey = regen_key(r->pool, r->headers_in, varray, key);
|
||||||
|
|
||||||
dobj->hashfile = NULL;
|
dobj->hashfile = NULL;
|
||||||
|
dobj->prefix = dobj->hdrsfile;
|
||||||
dobj->hdrsfile = header_file(r->pool, conf, dobj, nkey);
|
dobj->hdrsfile = header_file(r->pool, conf, dobj, nkey);
|
||||||
|
|
||||||
flags = APR_READ|APR_BINARY|APR_BUFFERED;
|
flags = APR_READ|APR_BINARY|APR_BUFFERED;
|
||||||
@@ -784,6 +805,7 @@ static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info
|
|||||||
|
|
||||||
dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
|
dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
|
||||||
tmp = regen_key(r->pool, r->headers_in, varray, dobj->name);
|
tmp = regen_key(r->pool, r->headers_in, varray, dobj->name);
|
||||||
|
dobj->prefix = dobj->hdrsfile;
|
||||||
dobj->hashfile = NULL;
|
dobj->hashfile = NULL;
|
||||||
dobj->datafile = data_file(r->pool, conf, dobj, tmp);
|
dobj->datafile = data_file(r->pool, conf, dobj, tmp);
|
||||||
dobj->hdrsfile = header_file(r->pool, conf, dobj, tmp);
|
dobj->hdrsfile = header_file(r->pool, conf, dobj, tmp);
|
||||||
|
|||||||
Reference in New Issue
Block a user