mirror of
https://github.com/games-on-whales/wolf-ui.git
synced 2026-10-15 13:02:04 +00:00
[GH-ISSUE #18] Apps shown red with "Download" and missing covers: client-side rate limiter rejects requests and the empty 429 gets cached #13
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
games-on-whales/wolf-ui#13
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @To0wnn on GitHub (Oct 5, 2026).
Original GitHub issue: https://github.com/games-on-whales/wolf-ui/issues/18
What happens
With a profile that has many apps (26 in my case), the Wolf UI often shows every app as red ("not on disk") and the start button reads Download, even though the image is present. Some app covers are also missing. Mostly seen when coming back to the Wolf UI while a game is running. Starting via "Download" isn't what you want for a locally built image.
Why
WolfApi's HttpClient uses a client-sideTokenBucketRateLimiterwithTokenLimit = 8andQueueLimit = 3. When all apps check/docker/images/inspect(and fetch icons) at the same moment, requests beyond 8+3 aren't sent;ClientSideRateLimitedHandlerreturns a synthetic429 TooManyRequestswith an empty body.IsImageOnDiskonly treats 404 as "missing", so the 429 response body ("") is put in the cache. The cached""is then read back as "not on disk" for ~90 s → red + Download. Icons showCould not access image: ...: TooManyRequestsin the log.Wolf itself is fine: 156 parallel inspect calls from inside the Wolf UI container all returned 200 with a full body.
Fix that works for me
One line in
src/Resources/WolfAPI/WolfAPI.cs, let requests queue instead of being rejected:Rebuilt the image with that change: apps stay green and all covers load. A more thorough fix might also be to never cache non-success responses in
IsImageOnDisk/GetIcon.Tested on
ghcr.io/games-on-whales/wolf-ui:main(source at60908b9), Wolf stable, rootful podman.