Issue Description
The web application bundle cache is keyed on the application id alone, so
changing an application’s resourceUrl has no effect and the previously
downloaded bundle keeps being served. Separately, when the cached blob expires
it is deleted and re-fetched in full, with no If-Modified-Since, ETag or
version check, so a short autoUpdateFrequency repeatedly transfers an unchanged
~600 KB.
Expected Behavior
Changing resourceUrl should cause the new bundle to be fetched and served.
An expired but unchanged bundle should be revalidated rather than downloaded
again.
Actual Behavior
The old bundle is served until the blob expires or the “update applications”
action is run manually. On expiry the whole archive is downloaded again even
when the origin copy is unchanged.
Reproduction Steps
- Change the Web Interface application’s resourceUrl to a different bundle.
- Restart Stalwart.
- The previous bundle is still served.
- Set autoUpdateFrequency to 1 minute and restart repeatedly: each unpack
downloads the full archive again, with no conditional request.
Relevant Log Output
GitHub honours conditional requests on the release asset:
If-Modified-Since: <current> -> 304, 0 bytes
no header (current behaviour) -> 200, 614990 bytes
Stalwart Version
v0.16.x
Installation Method
Binary (macOS)
Database Backend
SQLite
Blob Storage
SQLite
Search Engine
Internal
Directory Backend
Internal
Additional Context
A possible implementation: Revalidate application bundles instead of re-downloading them - Pull Request #3307 - stalwartlabs/stalwart - GitHub
It also adds STALWART_APP_AUTO_UPDATE=false to skip the periodic check
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on