Dispatcher caching issues
Purpose: Diagnose stale content, missing invalidation, and cache-related 404s at the delivery tier.
Who this page is for
| Audience | Why it matters to you |
|---|---|
| All engineers | "The site shows the old version" starts here |
Localise first (always)
publish direct: correct? ──no──▶ not a cache issue: replication/ACL lane
│ yes
dispatcher direct: correct? ──no──▶ THIS page
│ yes
CDN: correct? ──no──▶ CDN TTL/purge lane (same logic, different cache)
Stale content on dispatcher — checklist
- Did a flush arrive? Dispatcher log at invalidation time (grep the path); flush agent on publish enabled + queue healthy?
- .stat vs file times: is there a .stat above the cached file newer than it? No new .stat ⇒ flush didn't cover this path (statfileslevel too shallow/deep for the tree — anatomy).
- /invalidate rules: HTML flushes by default — is your .model.json / custom extension listed? The stale-JSON-forever bug is exactly this line.
- Which dispatcher? With N dispatchers, one missed flush = per-user staleness (LB round-robin). Compare the cached file mtime across all docroots.
- Auto-invalidation scope: activating page X doesn't flush page Y that renders X's content (XF/CF embeds — XF caching note); design, not defect — fix via statfileslevel/flush rules.
Content missing / 404 through dispatcher only
Filter denial (check dispatcher.log for the rule number that denied), extensionless URL, or selector not in the pinned allowlist (security filters). The rule-number log line ends the guessing.
Cache not caching (always MISS)
| Cause | Tell |
|---|---|
| Query string present | URL has ?…; add to /ignoreUrlParams if it's a tracking param |
| No extension | Sling-style URL without .html |
| Authorization header / cookies + no allowAuthorized | Consistent MISS for logged-in flows |
| Backend sent no-cache (Dispatcher: no-cache header) | Something in code marks it uncacheable |
| /rules deny for the path | Config says don't |
Emergency hygiene
Targeted invalidation (touch the right .stat / flush the path) over docroot rm -rf; full clears at peak create the cold-cache stampede you sized for in the load test — hopefully.