Summary
Commit 5b77ebd removed TransientBackendInterface from ReverseProxyCacheBackend. The tx_proxy cache uses VariableFrontend, which serializes entries unless the backend is transient. Dropping the marker means stored URLs are now serialized before being written to cache_tx_proxy.content. Previously content held the plain URL.
The commit message states this is "functionally identical," but it is not, because the backend never deserializes them:
• getAllCachedUrls() runs a raw SELECT content and uses the value directly.
• flushByTag() / flushByTags() call $this->get(), which resolves to Typo3DatabaseBackend::get() and returns the raw content with no unserialize.
Impact
The strings passed to ProxyProviderInterface::flushAllUrls() / flushCacheForUrls() are now serialized blobs (e.g. s:30:"https://example.com/page";) instead of URLs. The local DB truncate/delete still happens, but the HTTP PURGE calls target invalid URLs, so reverse-proxy/CDN invalidation silently no longer works. Existing pre-upgrade rows (plain URLs) and new rows (serialized) also coexist with inconsistent formats.
Expected
flush() / flushByTag() / flushByTags() send the original page URLs to the proxy provider.
- TYPO3 13.4
- EXT:proxycachemanager 5.0.0
Summary
Commit 5b77ebd removed
TransientBackendInterfacefromReverseProxyCacheBackend. The tx_proxy cache usesVariableFrontend, which serializes entries unless the backend is transient. Dropping the marker means stored URLs are now serialized before being written tocache_tx_proxy.content. Previously content held the plain URL.The commit message states this is "functionally identical," but it is not, because the backend never deserializes them:
•
getAllCachedUrls()runs a raw SELECT content and uses the value directly.•
flushByTag()/flushByTags()call$this->get(), which resolves toTypo3DatabaseBackend::get()and returns the raw content with no unserialize.Impact
The strings passed to
ProxyProviderInterface::flushAllUrls()/flushCacheForUrls()are now serialized blobs (e.g. s:30:"https://example.com/page";) instead of URLs. The local DB truncate/delete still happens, but the HTTP PURGE calls target invalid URLs, so reverse-proxy/CDN invalidation silently no longer works. Existing pre-upgrade rows (plain URLs) and new rows (serialized) also coexist with inconsistent formats.Expected
flush()/flushByTag()/flushByTags()send the original page URLs to the proxy provider.