#23448 closed defect (bug) (fixed)
Passive invalidation via last_changed should use timestamps
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Priority: | high | Milestone: | 3.6 |
| Component: | Cache | Version: | trunk |
| Severity: | major | Keywords: | has-patch |
| Cc: |
Description
For #23173 we are switching lots of things over to passive invalidation via cache incrementors and last_changed.
This includes switching the oldest thing we had using this method of invalidation over to using wp_cache_incr.
This ticket is a petition to use time() still as the initial value so as to avoid race conditions with cache evictions and cache incrementors.
Currently with a 1 based last_changed key the following is possible with a persistent object cache backend like memcache:
- last_changed is set to 1
- list of pages is cached with 2 pages being the result of a get_pages call
- last_changed is evicted from the memcache server
- Another page is added
- A call to get_pages happens, sets last_changed to 1 and returns the old data
Confusion the reigns for a bit until other things are evicted or another change is made.
If we start with last_changed = time() then we have no danger of using stale cache entries.
Attachments (1)
Change History (11)
This patch should fix all these issue, it breaks all the tests that assume we start from 1 and increment up though ;)
A reminder that a bunch of unit tests will need to update. I can get those.
Replying to ryan:
How about microtime()?
That would work too, anything that doesn't always start somewhere deterministic is what matters :)
- Owner set to ryan
- Resolution set to fixed
- Status changed from new to closed
In 23401:

Switch to time() based last_changed