/healthcheck always returns 500 with BACKEND_TYPE=memcache since #1144 (Redis health component starts unhealthy)
Maintainers usually reply within 3 days
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 73/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- go
- Domain
- backend, observability
Research direction
Read src/server/health.go, starting with NewHealthChecker and areAllComponentsHealthy, then trace how the configured backend is selected. Check the health checker tests for Redis and memcache behavior. Done means /healthcheck returns 200 with BACKEND_TYPE=memcache while Redis health remains covered for Redis configurations.
Written by the indexing model from the issue text.
Description
Description
Since commit b8d893f3 ("feat: add retry in init phase instead of panic directly", #1144), the HTTP /healthcheck endpoint returns 500 forever when the service is configured with BACKEND_TYPE=memcache.
In src/server/health.go, NewHealthChecker now initialises the Redis component as unhealthy:
// Redis starts unhealthy; it is marked healthy once the connection is confirmed at startup.
ret.healthMap[RedisHealthComponentName] = false
With the memcache backend, no Redis client is ever created, so nothing calls Ok(RedisHealthComponentName) and the component stays unhealthy. areAllComponentsHealthy therefore never returns true.
Rate limiting itself works fine (the /json endpoint returns correct OK / OVER_LIMIT answers), but any Kubernetes liveness/readiness probe on /healthcheck fails and the pod is restarted in a loop.
Steps to reproduce
- Run any image built from b8d893f3 or later (including current
master) with:BACKEND_TYPE=memcacheMEMCACHE_HOST_PORT=<memcached>:11211- a valid config in
RUNTIME_ROOT/RUNTIME_SUBDIRECTORY
curl -i http://localhost:8080/healthcheck
Expected: 200 OK
Actual: 500, forever
Bisect
Same config, same memcached, only the image tag changes:
| Image tag | /healthcheck |
|---|---|
58496ffc (2026-05-15) and older |
200 |
b8d893f3 (2026-05-27) |
500 |
every later tag up to current master |
500 |
Suggested fix
Only register / start the Redis health component as unhealthy when the Redis backend is actually used (BACKEND_TYPE=redis), or mark it healthy (or skip it) for other backends such as memcache.
Workaround
Pin the image to 58496ffc.
- Dominant language
- Go
- Stars
- 2.7k
- Forks
- 548
- Avg merge
- 4d 20h
- Merged PRs (30d)
- 10
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from envoyproxy/ratelimit
-
DogStatsD sink appends STATSD_PORT to unix:// addresses, breaking Unix Domain Socket supportPossibly taken @cvas22 claimed this 5 days ago. Openstale
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
envoyproxy/ratelimit#1223 · 3 comments ·
Maintainers usually reply within 3 days
-
Validate Valkey as a Redis-protocol backend for the rate limit servicePossibly taken A pull request linked to this issue is open or already merged. Openstale
Difficulty 4/5 3-5 days Newbie friendliness 48/100
envoyproxy/ratelimit#1247 · 1 comment · 1 reaction ·
Maintainers usually reply within 3 days
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
envoyproxy/ratelimit#1139 · 9 comments · 3 reactions ·
Maintainers usually reply within 3 days
-
help wanted
Difficulty 4/5 3-5 days Newbie friendliness 25/100
envoyproxy/ratelimit#358 · 3 comments ·
Maintainers usually reply within 3 days
-
Support TracingOpenhelp wanted
Difficulty 5/5 Over a week Newbie friendliness 25/100
envoyproxy/ratelimit#326 · 7 comments ·
Maintainers usually reply within 3 days
All issues in envoyproxy/ratelimit
Similar issues
-
agent-butler-finding chore
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
jordansmall/spindrift#6114 ·
Maintainers usually reply within 1 day
-
documentation skill: good first issue status: ready for dev testing
Difficulty 1/5 1-3 hours Newbie friendliness 88/100
hyperledger-labs/fabric-smart-client#2327 ·
Maintainers usually reply within 1 day
-
[Bug] MCP tools/list returns a boolean JSON Schema for get_task_stats, breaking strict clientsPossibly taken @monkeyWie claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
Maintainers usually reply within 2 days
-
enhancement runtime:claude
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
FootprintAI/Containarium#3214 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100