HTTPCLIENT-1443: HttpCache uses the physical host instead of the virtual host in the cache key

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1553642 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Francois-Xavier Bonnet 2013-12-27 08:18:03 +00:00
parent cc4b18e865
commit 8acc3ad661
6 changed files with 422 additions and 371 deletions

View File

@ -96,7 +96,7 @@ public synchronized void revalidateCacheEntry(
final HttpExecutionAware execAware,
final HttpCacheEntry entry) {
// getVariantURI will fall back on getURI if no variants exist
final String uri = cacheKeyGenerator.getVariantURI(route.getTargetHost(), request, entry);
final String uri = cacheKeyGenerator.getVariantURI(context.getTargetHost(), request, entry);
if (!queued.contains(uri)) {
final int consecutiveFailedAttempts = failureCache.getErrorCount(uri);

View File

@ -231,7 +231,7 @@ public CloseableHttpResponse execute(
final HttpClientContext context,
final HttpExecutionAware execAware) throws IOException, HttpException {
final HttpHost target = route.getTargetHost();
final HttpHost target = context.getTargetHost();
final String via = generateViaHeader(request.getOriginal());
// default response context
@ -250,7 +250,7 @@ public CloseableHttpResponse execute(
requestCompliance.makeRequestCompliant(request);
request.addHeader("Via",via);
flushEntriesInvalidatedByRequest(route.getTargetHost(), request);
flushEntriesInvalidatedByRequest(context.getTargetHost(), request);
if (!cacheableRequestPolicy.isServableFromCache(request)) {
log.debug("Request is not servable from cache");
@ -272,7 +272,7 @@ private CloseableHttpResponse handleCacheHit(
final HttpClientContext context,
final HttpExecutionAware execAware,
final HttpCacheEntry entry) throws IOException, HttpException {
final HttpHost target = route.getTargetHost();
final HttpHost target = context.getTargetHost();
recordCacheHit(target, request);
CloseableHttpResponse out = null;
final Date now = getCurrentDate();
@ -326,7 +326,7 @@ private CloseableHttpResponse handleCacheMiss(
final HttpRequestWrapper request,
final HttpClientContext context,
final HttpExecutionAware execAware) throws IOException, HttpException {
final HttpHost target = route.getTargetHost();
final HttpHost target = context.getTargetHost();
recordCacheMiss(target, request);
if (!mayCallBackend(request)) {
@ -659,12 +659,12 @@ CloseableHttpResponse negotiateResponseFromVariants(
recordCacheUpdate(context);
final HttpCacheEntry responseEntry = getUpdatedVariantEntry(
route.getTargetHost(), conditionalRequest, requestDate, responseDate,
context.getTargetHost(), conditionalRequest, requestDate, responseDate,
backendResponse, matchingVariant, matchedEntry);
backendResponse.close();
final CloseableHttpResponse resp = responseGenerator.generateResponse(responseEntry);
tryToUpdateVariantMap(route.getTargetHost(), request, matchingVariant);
tryToUpdateVariantMap(context.getTargetHost(), request, matchingVariant);
if (shouldSendNotModifiedResponse(request, responseEntry)) {
return responseGenerator.generateNotModifiedResponse(responseEntry);
@ -760,7 +760,7 @@ CloseableHttpResponse revalidateCacheEntry(
if (statusCode == HttpStatus.SC_NOT_MODIFIED) {
final HttpCacheEntry updatedEntry = responseCache.updateCacheEntry(
route.getTargetHost(), request, cacheEntry,
context.getTargetHost(), request, cacheEntry,
backendResponse, requestDate, responseDate);
if (suitabilityChecker.isConditional(request)
&& suitabilityChecker.allConditionalsMatch(request, updatedEntry, new Date())) {
@ -805,7 +805,7 @@ CloseableHttpResponse handleBackendResponse(
log.trace("Handling Backend response");
responseCompliance.ensureProtocolCompliance(request, backendResponse);
final HttpHost target = route.getTargetHost();
final HttpHost target = context.getTargetHost();
final boolean cacheable = responseCachingPolicy.isResponseCacheable(request, backendResponse);
responseCache.flushInvalidatedCacheEntriesFor(target, request, backendResponse);
if (cacheable && !alreadyHaveNewerCacheEntry(target, request, backendResponse)) {

View File

@ -88,6 +88,7 @@ public void setUp() {
request = HttpRequestWrapper.wrap(new BasicHttpRequest("GET", "/foo", HttpVersion.HTTP_1_1));
context = HttpCacheContext.create();
context.setTargetHost(host);
originResponse = Proxies.enhanceResponse(HttpTestUtils.make200Response());

View File

@ -66,6 +66,7 @@ public void setUp() {
route = new HttpRoute(new HttpHost("foo.example.com"));
request = HttpRequestWrapper.wrap(new HttpGet("/"));
context = HttpClientContext.create();
context.setTargetHost(new HttpHost("foo.example.com"));
mockExecAware = EasyMock.createNiceMock(HttpExecutionAware.class);
mockCacheEntry = EasyMock.createNiceMock(HttpCacheEntry.class);
mockSchedulingStrategy = EasyMock.createNiceMock(SchedulingStrategy.class);

View File

@ -101,6 +101,7 @@ public void setUp() {
request = new BasicHttpRequest("GET", "/foo", HTTP_1_1);
context = HttpCacheContext.create();
context.setTargetHost(host);
originResponse = Proxies.enhanceResponse(make200Response());