This file contains example repro script output for issue envoyproxy/envoy#45344
envoy.reloadable_features.coalesce_lb_rebuilds_on_batch_update: true
$ ./repro-envoy-ring-hash-503.sh coalesce-enabled
Working directory: /tmp/repro-ring-hash-503.Mzj6Ud
=== Envoy RING_HASH + EDS: 503 on late endpoint arrival ===
This test checks whether Envoy correctly handles the case where an EDS
cluster starts with zero endpoints and receives its first endpoints shortly
after Envoy is already running.
Expected behavior: once endpoints are pushed via EDS and become healthy,
requests should be routed successfully (HTTP 200).
Bug (envoyproxy/envoy#45055): with coalesce_lb_rebuilds_on_batch_update
enabled (default in Envoy 1.38), worker threads can snapshot the empty
ring state. When endpoints arrive, the ring is rebuilt on the main thread
but workers are never re-notified. Result: permanent 503 (no healthy
upstream) even though endpoints are healthy.
Config: ENVOY_IMAGE=envoyproxy/envoy:v1.38.0
coalesce_lb_rebuilds_on_batch_update=ENABLED
--- Step 1: Starting 1 backend server ---
backend-1: 172.20.0.2:8080
--- Step 2: Start Envoy with RING_HASH cluster (0 endpoints) ---
Waiting for Envoy to start... ready.
--- Step 3: Send request → expect 503 (no endpoints yet) ---
Result: HTTP 503
--- Step 4: Push endpoint via EDS update ---
Waiting for endpoint to become healthy... ok.
--- Step 5: Send 10 requests → expect 200 (endpoint is healthy) ---
Result: 503 503 503 503 503 503 503 503 503 503
(200s: 0, 503s: 10)
Envoy cluster stats:
app::172.20.0.2:8080::rq_error::0
app::172.20.0.2:8080::rq_total::0
app::172.20.0.2:8080::health_flags::healthy
(Debug dumps saved to: /tmp/repro-ring-hash-503.Mzj6Ud/)
FAIL: Got 10 x 503 even though the endpoint is healthy.
Workers are permanently stuck with the empty ring from step 2.
The 503 will never self-heal until another unrelated EDS change arrives.
envoy.reloadable_features.coalesce_lb_rebuilds_on_batch_update: false
$ ./repro-envoy-ring-hash-503.sh coalesce-disabled
Working directory: /tmp/repro-ring-hash-503.APxrL4
=== Envoy RING_HASH + EDS: 503 on late endpoint arrival ===
This test checks whether Envoy correctly handles the case where an EDS
cluster starts with zero endpoints and receives its first endpoints shortly
after Envoy is already running.
Expected behavior: once endpoints are pushed via EDS and become healthy,
requests should be routed successfully (HTTP 200).
Bug (envoyproxy/envoy#45055): with coalesce_lb_rebuilds_on_batch_update
enabled (default in Envoy 1.38), worker threads can snapshot the empty
ring state. When endpoints arrive, the ring is rebuilt on the main thread
but workers are never re-notified. Result: permanent 503 (no healthy
upstream) even though endpoints are healthy.
Config: ENVOY_IMAGE=envoyproxy/envoy:v1.38.0
coalesce_lb_rebuilds_on_batch_update=DISABLED
--- Step 1: Starting 1 backend server ---
backend-1: 172.20.0.2:8080
--- Step 2: Start Envoy with RING_HASH cluster (0 endpoints) ---
Waiting for Envoy to start... ready.
--- Step 3: Send request → expect 503 (no endpoints yet) ---
Result: HTTP 503
--- Step 4: Push endpoint via EDS update ---
Waiting for endpoint to become healthy... ok.
--- Step 5: Send 10 requests → expect 200 (endpoint is healthy) ---
Result: 200 200 200 200 200 200 200 200 200 200
(200s: 10, 503s: 0)
Envoy cluster stats:
app::172.20.0.2:8080::rq_error::0
app::172.20.0.2:8080::rq_total::10
app::172.20.0.2:8080::health_flags::healthy
(Debug dumps saved to: /tmp/repro-ring-hash-503.APxrL4/)
PASS: All requests returned 200.
The ring was correctly built when the endpoint arrived.