]> granicus.if.org Git - apache/commitdiff
Quick hack to store varied contents under the same path, making it
authorPaul Querna <pquerna@apache.org>
Wed, 20 Jul 2005 16:56:23 +0000 (16:56 +0000)
committerPaul Querna <pquerna@apache.org>
Wed, 20 Jul 2005 16:56:23 +0000 (16:56 +0000)
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

CHANGES
modules/cache/mod_disk_cache.c

diff --git a/CHANGES b/CHANGES
index 5c3c2a5719778cb3f29bf567e3128c4763c27356..c69a902b6d65ff9c91df8f477a7061d828760885 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 Changes with Apache 2.1.7
   [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
      filters. [Paul Querna]
 
index 4afce624f94036094652b2226ba648e3913196e3..784b1371fb7ecc43b1ffe2b95cfd1d881e7a22c1 100644 (file)
@@ -50,8 +50,8 @@
  *   CRLF
  */
 
-#define VARY_FORMAT_VERSION 1
-#define DISK_FORMAT_VERSION 2
+#define VARY_FORMAT_VERSION 3
+#define DISK_FORMAT_VERSION 4
 
 typedef struct {
     /* Indicates the format of the header struct stored on-disk. */
@@ -76,6 +76,7 @@ typedef struct {
 typedef struct disk_cache_object {
     const char *root;        /* the location of the cache directory */
     char *tempfile;    /* temp file tohold the content */
+    const char *prefix;
     const char *datafile;    /* name of file where the data will go */
     const char *hdrsfile;    /* name of file where the hdrs will go */
     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_DATA_SUFFIX   ".data"
+#define CACHE_VDIR_SUFFIX   ".vary"
+
 static char *header_file(apr_pool_t *p, disk_cache_conf *conf,
                          disk_cache_object_t *dobj, const char *name)
 {
@@ -131,8 +134,15 @@ static char *header_file(apr_pool_t *p, disk_cache_conf *conf,
         dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels, 
                                                 conf->dirlength, name);
     }
-    return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
-                       CACHE_HEADER_SUFFIX, NULL);
+
+    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,
+                           CACHE_HEADER_SUFFIX, NULL);
+     }
 }
 
 static char *data_file(apr_pool_t *p, disk_cache_conf *conf,
@@ -142,8 +152,15 @@ static char *data_file(apr_pool_t *p, disk_cache_conf *conf,
         dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels, 
                                                 conf->dirlength, name);
     }
-    return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
-                       CACHE_DATA_SUFFIX, NULL);
+
+    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,
+                           CACHE_DATA_SUFFIX, NULL);
+     }
 }
 
 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);
 
     dobj->name = obj->key;
+    dobj->prefix = NULL;
     dobj->datafile = data_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);
@@ -393,6 +411,8 @@ static int open_entity(cache_handle_t *h, request_rec *r, const char *key)
     info = &(obj->info);
 
     /* Open the headers file */
+    dobj->prefix = NULL;
+
     dobj->hdrsfile = header_file(r->pool, conf, dobj, key);
     flags = APR_READ|APR_BINARY|APR_BUFFERED;
     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);
 
         dobj->hashfile = NULL;
+        dobj->prefix = dobj->hdrsfile;
         dobj->hdrsfile = header_file(r->pool, conf, dobj, nkey);
 
         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);
             tmp = regen_key(r->pool, r->headers_in, varray, dobj->name);
+            dobj->prefix = dobj->hdrsfile;
             dobj->hashfile = NULL;
             dobj->datafile = data_file(r->pool, conf, dobj, tmp);
             dobj->hdrsfile = header_file(r->pool, conf, dobj, tmp);