[prev in list] [next in list] [prev in thread] [next in thread]
List: httpcomponents-commits
Subject: svn commit: r1051206 - in
From: jonm () apache ! org
Date: 2010-12-20 16:55:03
Message-ID: 20101220165503.F3E20238899C () eris ! apache ! org
[Download RAW message or body]
Author: jonm
Date: Mon Dec 20 16:55:03 2010
New Revision: 1051206
URL: http://svn.apache.org/viewvc?rev=1051206&view=rev
Log:
HTTPCLIENT-975: stale-if-error now yields to higher-priority
directives, like must-revalidate, proxy-revalidate, and requests
with explicit freshness constraints.
Modified:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestRFC5861Compliance.java
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java?rev=1051206&r1=1051205&r2=1051206&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java \
(original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java \
Mon Dec 20 16:55:03 2010 @@ -506,11 +506,16 @@ public class CachingHttpClient \
implement }
private void recordCacheHit(HttpHost target, HttpRequest request) {
+ cacheHits.getAndIncrement();
if (log.isDebugEnabled()) {
RequestLine rl = request.getRequestLine();
log.debug("Cache hit [host: " + target + "; uri: " + rl.getUri() + "]");
}
- cacheHits.getAndIncrement();
+ }
+
+ private void recordCacheUpdate(HttpContext context) {
+ cacheUpdates.getAndIncrement();
+ setResponseStatus(context, CacheResponseStatus.VALIDATED);
}
private void flushEntriesInvalidatedByRequest(HttpHost target,
@@ -737,11 +742,6 @@ public class CachingHttpClient implement
return callBackend(target, unconditional, context);
}
- private void recordCacheUpdate(HttpContext context) {
- cacheUpdates.getAndIncrement();
- setResponseStatus(context, CacheResponseStatus.VALIDATED);
- }
-
private HttpCacheEntry getUpdatedVariantEntry(HttpHost target,
HttpRequest conditionalRequest, Date requestDate,
Date responseDate, HttpResponse backendResponse,
@@ -809,6 +809,7 @@ public class CachingHttpClient implement
}
if (staleIfErrorAppliesTo(statusCode)
+ && !staleResponseNotAllowed(request, cacheEntry, getCurrentDate())
&& validityPolicy.mayReturnStaleIfError(request, cacheEntry, \
responseDate)) {
final HttpResponse cachedResponse = \
responseGenerator.generateResponse(cacheEntry);
cachedResponse.addHeader(HeaderConstants.WARNING, "110 localhost \
\"Response is stale\"");
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestRFC5861Compliance.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/test/java/org/apache/http/impl/client/cache/TestRFC5861Compliance.java?rev=1051206&r1=1051205&r2=1051206&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestRFC5861Compliance.java \
(original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestRFC5861Compliance.java \
Mon Dec 20 16:55:03 2010 @@ -26,9 +26,7 @@
*/
package org.apache.http.impl.client.cache;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
+import static org.junit.Assert.*;
import java.util.Date;
import org.apache.http.Header;
@@ -84,7 +82,105 @@ public class TestRFC5861Compliance exten
HttpTestUtils.assert110WarningFound(result);
}
+
+ @Test
+ public void testStaleIfErrorInResponseYieldsToMustRevalidate()
+ throws Exception{
+ Date tenSecondsAgo = new Date(new Date().getTime() - 10 * 1000L);
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response(tenSecondsAgo,
+ "public, max-age=5, stale-if-error=60, must-revalidate");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp2 = HttpTestUtils.make500Response();
+
+ backendExpectsAnyRequest().andReturn(resp2);
+
+ replayMocks();
+ impl.execute(host,req1);
+ HttpResponse result = impl.execute(host,req2);
+ verifyMocks();
+
+ assertTrue(HttpStatus.SC_OK != result.getStatusLine().getStatusCode());
+ }
+
+ @Test
+ public void testStaleIfErrorInResponseYieldsToProxyRevalidateForSharedCache()
+ throws Exception{
+ assertTrue(impl.isSharedCache());
+ Date tenSecondsAgo = new Date(new Date().getTime() - 10 * 1000L);
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response(tenSecondsAgo,
+ "public, max-age=5, stale-if-error=60, proxy-revalidate");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp2 = HttpTestUtils.make500Response();
+
+ backendExpectsAnyRequest().andReturn(resp2);
+
+ replayMocks();
+ impl.execute(host,req1);
+ HttpResponse result = impl.execute(host,req2);
+ verifyMocks();
+
+ assertTrue(HttpStatus.SC_OK != result.getStatusLine().getStatusCode());
+ }
+
+ @Test
+ public void testStaleIfErrorInResponseNeedNotYieldToProxyRevalidateForPrivateCache()
+ throws Exception{
+ CacheConfig config = new CacheConfig();
+ config.setSharedCache(false);
+ impl = new CachingHttpClient(mockBackend, config);
+
+ Date tenSecondsAgo = new Date(new Date().getTime() - 10 * 1000L);
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response(tenSecondsAgo,
+ "public, max-age=5, stale-if-error=60, proxy-revalidate");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp2 = HttpTestUtils.make500Response();
+
+ backendExpectsAnyRequest().andReturn(resp2);
+
+ replayMocks();
+ impl.execute(host,req1);
+ HttpResponse result = impl.execute(host,req2);
+ verifyMocks();
+
+ HttpTestUtils.assert110WarningFound(result);
+ }
+
+ @Test
+ public void testStaleIfErrorInResponseYieldsToExplicitFreshnessRequest()
+ throws Exception{
+ Date tenSecondsAgo = new Date(new Date().getTime() - 10 * 1000L);
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response(tenSecondsAgo,
+ "public, max-age=5, stale-if-error=60");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ req2.setHeader("Cache-Control","min-fresh=2");
+ HttpResponse resp2 = HttpTestUtils.make500Response();
+
+ backendExpectsAnyRequest().andReturn(resp2);
+
+ replayMocks();
+ impl.execute(host,req1);
+ HttpResponse result = impl.execute(host,req2);
+ verifyMocks();
+
+ assertTrue(HttpStatus.SC_OK != result.getStatusLine().getStatusCode());
+ }
+
@Test
public void testStaleIfErrorInRequestIsTrueReturnsStaleEntryWithWarning()
throws Exception{
@@ -96,7 +192,7 @@ public class TestRFC5861Compliance exten
backendExpectsAnyRequest().andReturn(resp1);
HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
- req2.setHeader("Cache-Control","public, max-age=5, stale-if-error=60");
+ req2.setHeader("Cache-Control","public, stale-if-error=60");
HttpResponse resp2 = HttpTestUtils.make500Response();
backendExpectsAnyRequest().andReturn(resp2);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic