1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-11 14:28:31 +01:00
phorge-phorge/src/applications/celerity
epriestley 43935d5916 Don't cache resources we can't generate properly
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.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10843

Differential Revision: https://secure.phabricator.com/D15775
2016-04-21 11:56:54 -07:00
..
__tests__ Modularize Celerity postprocessors 2015-06-20 06:10:42 -07:00
application Push construction of routing maps into Sites 2015-08-31 04:01:01 -07:00
controller Don't cache resources we can't generate properly 2016-04-21 11:56:54 -07:00
management Various translation improvements 2015-11-03 07:02:46 +11:00
postprocessor Polish up timeline for PHIUTwoColumnView 2016-03-08 17:51:53 -08:00
resources Add mask-icon for Safari pinned tab 2015-11-22 13:04:06 -08:00
api.php Make Celerity a real application 2014-10-13 11:17:23 -07:00
CelerityAPI.php Extend from Phobject 2015-06-15 18:02:27 +10:00
CelerityResourceGraph.php Various linter fixes 2015-05-20 07:27:41 +10:00
CelerityResourceMap.php Don't cache resources we can't generate properly 2016-04-21 11:56:54 -07:00
CelerityResourceMapGenerator.php Extend from Phobject 2015-06-15 18:02:27 +10:00
CelerityResourceTransformer.php Swap charts from gRaphael to D3 2016-02-01 10:36:59 -08:00
CeleritySpriteGenerator.php Remove defunt project image choices 2016-01-19 08:50:59 -08:00
CelerityStaticResourceResponse.php Modularize Celerity postprocessors 2015-06-20 06:10:42 -07:00