Retargeting #1173 to v3.1 instead of 3.0
Introduced ndb backed page caching
Added cache identifier override to PageStoreTool get() & put()
Extended NDB to caching of response headers for 304 returns
Added json extenstion to etags for json pages
In response to issue (#1171)
Previously created pages are held in a within instance memory cache that is shared between threads. This means that each page is recreated for each application instance. We previously noted that the live site spawned off dozens of instances to support the load,
This version uses the Cloud Datastore to hold cached pages.
The single NDB store is shared between all threads of all instances.
Should result in a lot less page creations, and more importantly you having to wait for a new instance to create you a page.
The NDB store is persistent so will keep the page store even when you reload/deploy a new version of the code/data.
Implemented code that detects this condition and deletes all pages in the store as it starts.
For early supporting there is a way to manually call this caheFlush function.