Page MenuHomePhabricator

Don't cache resources we can't generate properly
ClosedPublic

Authored by epriestley on Apr 20 2016, 10:25 PM.
Tags
None
Referenced Files
F13059612: D15775.diff
Fri, Apr 19, 4:33 PM
Unknown Object (File)
Thu, Apr 18, 10:03 PM
Unknown Object (File)
Wed, Apr 17, 3:08 PM
Unknown Object (File)
Thu, Apr 11, 7:17 AM
Unknown Object (File)
Tue, Apr 9, 8:59 PM
Unknown Object (File)
Tue, Apr 9, 4:49 PM
Unknown Object (File)
Mon, Apr 8, 11:58 PM
Unknown Object (File)
Thu, Apr 4, 12:58 PM
Subscribers
None

Details

Summary

Fixes T10843. In a multi-server setup, we can do this:

  • Two servers, A and B.
  • You push an update.
  • A gets pushed first.
  • After A has been pushed, but before B has been pushed, a user loads a page from A.
  • It generates resource URIs like /stuff/new/package.css.
  • Those requests hit B.
  • B doesn't have the new resources yet.
  • It responds with old resources.
  • Your CDN caches things. You now have a poisoned CDN: old data is saved in a new URL.

To try to avoid this with as little work as possible and generally make it hard to get wrong, check the URL hash against the hash we would generate.

If they don't match, serve our best guess at the resource, but don't cache it. This should make things mostly keep working during the push, but prevent caches from becoming poisoned, and everyone should get a working version of everything after the push finishes.

Test Plan
  • curl'd a resource, got a cacheable one.
  • Changed the hash a little, curl'd again. This time: valid resource, but not cacheable.

Diff Detail

Repository
rP Phabricator
Branch
cache1
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 11878
Build 14916: Run Core Tests
Build 14915: arc lint + arc unit

Event Timeline

epriestley retitled this revision from to Don't cache resources we can't generate properly.
epriestley updated this object.
epriestley edited the test plan for this revision. (Show Details)
epriestley added a reviewer: chad.
chad edited edge metadata.
This revision is now accepted and ready to land.Apr 21 2016, 5:30 PM
This revision was automatically updated to reflect the committed changes.