This repository was archived by the owner on Aug 26, 2026. It is now read-only.
fix(flaresolverr): schedule on the always-on amd64 node and raise the CPU cap - #759
Merged
Merged
Conversation
… CPU cap The Deployment pinned only to personal-stack/site: enschede, so the pod landed on enschede-pi-1. Solving a Cloudflare Turnstile challenge runs headless Chrome, which the arm64 Pis cannot finish inside Prowlarr's 60 s proxy timeout: challenge-solving requests took 70-85 s and returned 500 "Error solving the challenge. Timeout after 60.0 seconds.", surfacing in Prowlarr as "Unable to connect to proxy: Http request timed out". /health kept answering 200 in milliseconds throughout, so the container stayed Ready and the failure never appeared as a restart or a probe error. The pod now pins to enschede-t1000-1. It stays in Enschede because a residential IP draws far fewer challenges than a datacenter address; the other amd64 Enschede nodes are desktops that power off when not in use, so the always-on t1000 is the only stable amd64 target. The CPU limit goes from 1000m to 3000m. Chrome saturated the single-core cap during a solve, accumulating ~1100 s of cgroup throttling. The request stays at 500m because the process idles between indexer queries.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Symptom
Prowlarr reported the FlareSolverr indexer proxy as unreachable:
The service looked healthy from every angle that gets checked first: the pod was
1/1 Running, and/healthanswered{"status": "ok"}in milliseconds, so Gatus stayed green and there were no restarts or probe failures to notice.Root cause
The Deployment pinned only to
personal-stack/site: enschede, which matches all six Enschede nodes, and the pod had landed onenschede-pi-1— an arm64 Raspberry Pi.Solving a Cloudflare Turnstile challenge runs headless Chrome. On the Pi that does not finish inside Prowlarr's 60 s proxy timeout. The container log shows the split cleanly: requests where no challenge appears return 200 in 12-41 s, while every request that actually has to solve one runs 70-85 s and fails:
Only
/v1was ever affected, which is why/healthnever reflected the fault.The single-core CPU limit compounded it. Chrome saturated the cap during a solve, and the container's cgroup recorded
nr_throttled 17928withthrottled_usec 1101692394— roughly 1100 s of throttling.Change
The pod now pins to
enschede-t1000-1(amd64, 12 cores, currently 14 % CPU).It stays in Enschede deliberately: a residential IP draws far fewer Cloudflare challenges than a datacenter address, so moving the solver to Frankfurt would increase the number of challenges it has to solve rather than reduce them. Among the amd64 Enschede nodes,
enschede-gtx-960m-1andenschede-rx7900xtx-1are desktops that power off when not in use, leaving the always-on t1000 as the only stable target.The CPU limit goes from
1000mto3000mso a solve can burst. The request stays at500m, since the process idles between indexer queries and a larger request would consume scheduling budget it does not need.Validation
kubectl kustomize platform/cluster/flux/apps/statelessrenders the intendednodeSelectorandresourcescd platform/tests && node --test— passSolve latency will be re-checked against the live Prowlarr indexer test after this reconciles.