[packages/squid] - fix issues with caching responses with "Vary" responses - rel 3
baggins
baggins at pld-linux.org
Mon Oct 29 15:51:47 CET 2012
commit 07a3710ea56ccd89b63a552e42ef517026e8dfe2
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Mon Oct 29 15:51:30 2012 +0100
- fix issues with caching responses with "Vary" responses
- rel 3
squid.spec | 9 ++-
squidv3-vary-cache-1.patch | 20 ++++++
squidv3-vary-headers-shm-hack.patch | 122 ++++++++++++++++++++++++++++++++++++
3 files changed, 150 insertions(+), 1 deletion(-)
---
diff --git a/squid.spec b/squid.spec
index c0b2ca3..a05f764 100644
--- a/squid.spec
+++ b/squid.spec
@@ -17,7 +17,7 @@ Summary(uk.UTF-8): Squid - кеш об'єктів Internet
Summary(zh_CN.UTF-8): SQUID 高速缓冲代理服务器
Name: squid
Version: 3.2.3
-Release: 2
+Release: 3
Epoch: 7
License: GPL v2
Group: Networking/Daemons
@@ -38,6 +38,11 @@ Patch2: %{name}-crash-on-ENOSPC.patch
Patch4: %{name}-2.5.STABLE4-apache-like-combined-log.patch
Patch5: %{name}-ppc-m32.patch
Patch6: %{name}-cachemgr-webapp.patch
+# http://www.squid-cache.org/mail-archive/squid-dev/201207/0099.html
+# http://www.squid-cache.org/mail-archive/squid-dev/201207/att-0177/squidv3-vary-cache-1.patch
+Patch7: squidv3-vary-cache-1.patch
+# http://www.squid-cache.org/mail-archive/squid-dev/201207/att-0177/squidv3-vary-headers-shm-hack.patch
+Patch8: squidv3-vary-headers-shm-hack.patch
URL: http://www.squid-cache.org/
BuildRequires: autoconf
BuildRequires: automake
@@ -584,6 +589,8 @@ Ten pakiet zawiera skrypty perlowe i dodatkowe programy dla Squida.
%patch5 -p1
%endif
%patch6 -p1
+%patch7 -p1
+%patch8 -p1
%build
%{__libtoolize}
diff --git a/squidv3-vary-cache-1.patch b/squidv3-vary-cache-1.patch
new file mode 100644
index 0000000..7f7c592
--- /dev/null
+++ b/squidv3-vary-cache-1.patch
@@ -0,0 +1,20 @@
+diff -uNrw squid-3.2.0.18/src/store.cc squid-3.2.0.18.n/src/store.cc
+--- squid-3.2.0.18/src/store.cc 2012-07-11 06:06:31.000000000 +0400
++++ squid-3.2.0.18.n/src/store.cc 2012-07-17 18:50:22.746674120 +0400
+@@ -769,12 +769,14 @@
+ }
+
+ #endif
+- pe->replaceHttpReply(rep);
++ pe->replaceHttpReply(rep, false);
+
+ pe->timestampsSet();
+
+ pe->makePublic();
+
++ pe->startWriting();
++
+ pe->complete();
+
+ pe->unlock();
+
diff --git a/squidv3-vary-headers-shm-hack.patch b/squidv3-vary-headers-shm-hack.patch
new file mode 100644
index 0000000..f292328
--- /dev/null
+++ b/squidv3-vary-headers-shm-hack.patch
@@ -0,0 +1,122 @@
+diff -uNrw squid-3.2.0.18/src/client_side.cc squid-3.2.0.18/src/client_side.cc
+--- squid-3.2.0.18/src/client_side.cc 2012-07-18 19:36:09.982711673 +0400
++++ squid-3.2.0.18/src/client_side.cc 2012-07-18 19:47:28.594672449 +0400
+@@ -1349,6 +1349,15 @@
+ {
+ reply = rep;
+
++ /* Remove our HDR_X_VARY_FOR hack if present.
++ * Client won't get the joke anyway.
++ */
++ if (rep && rep->header.has(HDR_X_VARY_FOR))
++ {
++ debugs(11,3, HERE << "HDR_X_VARY_FOR hack detected. Cleaning it up");
++ rep->header.delById(HDR_X_VARY_FOR);
++ }
++
+ if (http->request->range)
+ buildRangeHeader(rep);
+ }
+diff -uNrw squid-3.2.0.18/src/http.cc squid-3.2.0.18/src/http.cc
+--- squid-3.2.0.18/src/http.cc 2012-07-18 19:36:09.962712057 +0400
++++ squid-3.2.0.18/src/http.cc 2012-07-18 19:40:02.442715425 +0400
+@@ -880,6 +880,12 @@
+ }
+
+ entry->mem_obj->vary_headers = xstrdup(vary);
++ /* XXX: Currently we are losing vary_headers when
++ * saving objects to shm, so we now add them as header
++ * and remove on preparing client reply.
++ */
++ debugs(11,3,"haveParsedReplyHeaders: inserting HDR_X_VARY_FOR into the reply");
++ rep->header.putStr(HDR_X_VARY_FOR, entry->mem_obj->vary_headers);
+ }
+
+ /*
+diff -uNrw squid-3.2.0.18/src/HttpHeader.cc squid-3.2.0.18/src/HttpHeader.cc
+--- squid-3.2.0.18/src/HttpHeader.cc 2012-07-18 19:36:09.982711673 +0400
++++ squid-3.2.0.18/src/HttpHeader.cc 2012-07-18 19:52:20.551796245 +0400
+@@ -147,6 +147,7 @@
+ {"X-Cache", HDR_X_CACHE, ftStr},
+ {"X-Cache-Lookup", HDR_X_CACHE_LOOKUP, ftStr},
+ {"X-Forwarded-For", HDR_X_FORWARDED_FOR, ftStr},
++ {"X-Vary-For", HDR_X_VARY_FOR, ftStr},
+ {"X-Request-URI", HDR_X_REQUEST_URI, ftStr},
+ {"X-Squid-Error", HDR_X_SQUID_ERROR, ftStr},
+ #if X_ACCELERATOR_VARY
+@@ -206,7 +207,8 @@
+ #endif
+ HDR_SURROGATE_CAPABILITY,
+ HDR_SURROGATE_CONTROL,
+- HDR_X_FORWARDED_FOR
++ HDR_X_FORWARDED_FOR,
++ HDR_X_VARY_FOR
+ };
+
+ /* general-headers */
+diff -uNrw squid-3.2.0.18/src/HttpHeader.h squid-3.2.0.18/src/HttpHeader.h
+--- squid-3.2.0.18/src/HttpHeader.h 2012-07-18 19:36:09.978711678 +0400
++++ squid-3.2.0.18/src/HttpHeader.h 2012-07-18 19:36:44.754628494 +0400
+@@ -136,6 +136,7 @@
+ HDR_AUTHENTICATION_INFO, /**< RFC 2617 */
+ HDR_X_CACHE, /**< Squid custom header */
+ HDR_X_CACHE_LOOKUP, /**< Squid custom header. temporary hack that became de-facto. TODO remove */
++ HDR_X_VARY_FOR, /**< Squid custom header. temporary hack */
+ HDR_X_FORWARDED_FOR, /**< Squid custom header */
+ HDR_X_REQUEST_URI, /**< Squid custom header appended if ADD_X_REQUEST_URI is defined */
+ HDR_X_SQUID_ERROR, /**< Squid custom header on generated error responses */
+diff -uNrw squid-3.2.0.18/src/MemObject.cc squid-3.2.0.18/src/MemObject.cc
+--- squid-3.2.0.18/src/MemObject.cc 2012-07-18 19:36:09.986711701 +0400
++++ squid-3.2.0.18/src/MemObject.cc 2012-07-18 19:43:45.843879163 +0400
+@@ -189,6 +189,24 @@
+ return _reply;
+ }
+
++/* Dirty hack to fill vary_headers field from
++ * our special HDR_X_VARY_FOR reply header
++ */
++void
++MemObject::fillVaryHeader()
++{
++ if (_reply && _reply->header.has(HDR_X_VARY_FOR))
++ {
++ debugs(20,3, HERE << "got HDR_X_VARY_FOR: " << _reply->header.getList(HDR_X_VARY_FOR));
++ if (! vary_headers)
++ vary_headers = xstrdup(_reply->header.getList(HDR_X_VARY_FOR).termedBuf());
++ else
++ debugs(20,3, HERE << "vary_headers has already been set up: " << vary_headers);
++ }
++ else
++ debugs(20,3, HERE << "no HDR_X_VARY_FOR present!");
++}
++
+ void
+ MemObject::replaceHttpReply(HttpReply *newrep)
+ {
+diff -uNrw squid-3.2.0.18/src/MemObject.h squid-3.2.0.18/src/MemObject.h
+--- squid-3.2.0.18/src/MemObject.h 2012-07-18 20:06:23.151879182 +0400
++++ squid-3.2.0.18/src/MemObject.h 2012-07-18 20:08:14.755379555 +0400
+@@ -76,6 +76,8 @@
+ int64_t lowestMemReaderOffset() const;
+ bool readAheadPolicyCanRead() const;
+ void addClient(store_client *);
++ /* dirty hack to recover vary_headers from the reply */
++ void fillVaryHeader();
+ /* XXX belongs in MemObject::swapout, once swaphdrsz is managed
+ * better
+ */
+diff -uNrw squid-3.2.0.18/src/store.cc squid-3.2.0.18/src/store.cc
+--- squid-3.2.0.18/src/store.cc 2012-07-18 19:36:09.958711514 +0400
++++ squid-3.2.0.18/src/store.cc 2012-07-18 19:55:00.518734384 +0400
+@@ -1689,6 +1689,10 @@
+ mem_obj = hidden_mem_obj;
+ hidden_mem_obj = NULL;
+ mem_obj->resetUrls(aUrl, aLogUrl);
++ /* XXX: we're probably restoring from the cache,
++ * so try to recover vary_headers in mem_obj
++ */
++ mem_obj->fillVaryHeader();
+ return;
+ }
+
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/squid.git/commitdiff/07a3710ea56ccd89b63a552e42ef517026e8dfe2
More information about the pld-cvs-commit
mailing list