Skip to content
This repository was archived by the owner on Apr 10, 2025. It is now read-only.

Commit c122121

Browse files
authored
LoadFromFileCacheTtlMs is not honored (*after* first request) (#1552)
Fix: LoadFromFileCacheTtlMs is not honored (*after* first request) Fixes apache/incubator-pagespeed-ngx#1418
1 parent 755bb11 commit c122121

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

net/instaweb/rewriter/in_place_rewrite_context.cc

+18-1
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,15 @@ void InPlaceRewriteContext::FixFetchFallbackHeaders(
402402
headers->Replace(HttpAttributes::kEtag, HTTPCache::FormatEtag(StrCat(
403403
id(), "-", rewritten_hash_)));
404404
}
405+
406+
// Determine if we need to use the implicit cache ttl ms or the implicit
407+
// load from file cache ttl ms.
408+
int64 implicit_ttl_ms = IsLoadFromFileBased() ?
409+
Options()->load_from_file_cache_ttl_ms() :
410+
Options()->implicit_cache_ttl_ms();
411+
405412
headers->RemoveAll(HttpAttributes::kLastModified);
406-
headers->set_implicit_cache_ttl_ms(Options()->implicit_cache_ttl_ms());
413+
headers->set_implicit_cache_ttl_ms(implicit_ttl_ms);
407414
headers->ComputeCaching();
408415
int64 expire_at_ms = kint64max;
409416
int64 date_ms = kint64max;
@@ -454,6 +461,16 @@ void InPlaceRewriteContext::RemoveRedundantRelCanonicalHeader(
454461
ResponseHeaders::RelCanonicalHeaderValue(url_));
455462
}
456463

464+
bool InPlaceRewriteContext::IsLoadFromFileBased() {
465+
if (num_slots() == 1) {
466+
ResourcePtr resource(slot(0)->resource());
467+
if (!resource->UseHttpCache()) {
468+
return true;
469+
}
470+
}
471+
return false;
472+
}
473+
457474
void InPlaceRewriteContext::UpdateDateAndExpiry(
458475
const protobuf::RepeatedPtrField<InputInfo>& inputs,
459476
int64* date_ms,

net/instaweb/rewriter/in_place_rewrite_context_test.cc

+9-12
Original file line numberDiff line numberDiff line change
@@ -1682,18 +1682,15 @@ TEST_F(InPlaceRewriteContextTest, OptimizeForBrowserNegative) {
16821682
}
16831683

16841684
TEST_F(InPlaceRewriteContextTest, LoadFromFile) {
1685+
const int64 kIproFileTtlMs = 15000;
16851686
options()->file_load_policy()->Associate("http://www.example.com", "/test/");
1687+
options()->set_load_from_file_cache_ttl_ms(kIproFileTtlMs);
16861688
WriteFile("/test/cacheable.js", cache_body_ /*" alert ( 'foo ') "*/);
16871689

16881690
Init();
16891691

1690-
// TODO(jmarantz): currently we will not have caching headers on
1691-
// file-input-resources so we default to the implicit cache TTL.
1692-
// We should probably have a new config options for file-input
1693-
// TTL for use with in-place.
1694-
const int64 kIproFileTtl = RewriteOptions::kDefaultImplicitCacheTtlMs;
16951692
FetchAndCheckResponse(cache_js_url_, cache_body_, true,
1696-
kIproFileTtl, NULL, start_time_ms());
1693+
kIproFileTtlMs, NULL, start_time_ms());
16971694

16981695
// First fetch misses initial cache lookup, succeeds at fetch and inserts
16991696
// result into cache. Also, the resource gets rewritten and the rewritten
@@ -1715,7 +1712,7 @@ TEST_F(InPlaceRewriteContextTest, LoadFromFile) {
17151712
ResetHeadersAndStats();
17161713
SetTimeMs(start_time_ms() + ttl_ms_/2);
17171714
FetchAndCheckResponse(cache_js_url_, "good:jm", true,
1718-
kIproFileTtl, etag_,
1715+
kIproFileTtlMs, etag_,
17191716
start_time_ms() + ttl_ms_/2);
17201717
// Second fetch hits the metadata cache and the rewritten resource is served
17211718
// out.
@@ -1737,7 +1734,7 @@ TEST_F(InPlaceRewriteContextTest, LoadFromFile) {
17371734
AdvanceTimeMs(2 * ttl_ms_);
17381735
ResetHeadersAndStats();
17391736
FetchAndCheckResponse(cache_js_url_, "good:jm", true,
1740-
kIproFileTtl, etag_, timer()->NowMs());
1737+
kIproFileTtlMs, etag_, timer()->NowMs());
17411738
CheckWarmCache("third_fetch");
17421739

17431740
// OK let's now move time forward a little and touch the file
@@ -1749,7 +1746,7 @@ TEST_F(InPlaceRewriteContextTest, LoadFromFile) {
17491746
WriteFile("/test/cacheable.js", cache_body_ /*" alert ( 'foo ') "*/);
17501747
ResetHeadersAndStats();
17511748
FetchAndCheckResponse(cache_js_url_, cache_body_, true,
1752-
kIproFileTtl, NULL, timer()->NowMs());
1749+
kIproFileTtlMs, NULL, timer()->NowMs());
17531750
EXPECT_EQ(0, counting_url_async_fetcher()->fetch_count());
17541751
EXPECT_EQ(0, http_cache()->cache_hits()->Get());
17551752
EXPECT_EQ(0, http_cache()->cache_misses()->Get());
@@ -1764,15 +1761,15 @@ TEST_F(InPlaceRewriteContextTest, LoadFromFile) {
17641761
AdvanceTimeMs(1 * Timer::kSecondMs);
17651762
ResetHeadersAndStats();
17661763
FetchAndCheckResponse(cache_js_url_, "good:jm", true,
1767-
kIproFileTtl, etag_, timer()->NowMs());
1764+
kIproFileTtlMs, etag_, timer()->NowMs());
17681765
CheckWarmCache("second_fetch_after_touch");
17691766

17701767
// Now change the content.
17711768
AdvanceTimeMs(1 * Timer::kSecondMs);
17721769
WriteFile("/test/cacheable.js", "new_content");
17731770
ResetHeadersAndStats();
17741771
FetchAndCheckResponse(cache_js_url_, "new_content", true,
1775-
kIproFileTtl, NULL, timer()->NowMs());
1772+
kIproFileTtlMs, NULL, timer()->NowMs());
17761773
EXPECT_EQ(0, counting_url_async_fetcher()->fetch_count());
17771774
EXPECT_EQ(0, http_cache()->cache_hits()->Get());
17781775
EXPECT_EQ(0, http_cache()->cache_misses()->Get());
@@ -1787,7 +1784,7 @@ TEST_F(InPlaceRewriteContextTest, LoadFromFile) {
17871784
AdvanceTimeMs(1 * Timer::kSecondMs);
17881785
ResetHeadersAndStats();
17891786
FetchAndCheckResponse(cache_js_url_, "new_content:jm", true,
1790-
kIproFileTtl, etag_, timer()->NowMs());
1787+
kIproFileTtlMs, etag_, timer()->NowMs());
17911788
CheckWarmCache("second_fetch_after_mutation");
17921789
}
17931790

net/instaweb/rewriter/public/in_place_rewrite_context.h

+3
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ class InPlaceRewriteContext : public SingleRewriteContext {
152152
void RemoveRedundantRelCanonicalHeader(const CachedResult& cached_result,
153153
ResponseHeaders* headers);
154154

155+
// Returns true iff the single underlying resource is mapped by LoadFromFile.
156+
bool IsLoadFromFileBased();
157+
155158
GoogleString url_;
156159
// Boolean indicating whether or not the resource was rewritten successfully.
157160
bool is_rewritten_;

0 commit comments

Comments
 (0)