fix(bench): bypass frontend-proxy, drive frontend directly (PR-N3.3) - #76
Conversation
The published frontend-proxy image (demo 2.2.0) carries a baked Envoy bootstrap with a 10th cluster whose address env var the demo doesn't set, so Envoy fails proto validation and crash-loops in CI. That flapping container — not a startup race — is what gave the first capture its ERR_NAME_NOT_RESOLVED flood (intermittent DNS for a restarting container). The source tag's envoy.tmpl.yaml has only 9 clusters all with set vars, and the image is distroless (no shell to inspect the baked template), so the empty var can't be identified from outside. Rather than reverse-engineer the image, remove Envoy from the path: the compose override sets LOCUST_BROWSER_TRAFFIC_ENABLED= false + LOCUST_HOST=http://frontend: so the load generator drives the frontend's HTTP API directly. The frontend still fans out to cart / checkout / currency / product-catalog / …, so business-service log diversity still flows. Readiness now gates on otel-collector + frontend running (frontend has no healthcheck and only an ephemeral host port, so the post-restart settle + steady-state slice absorb early ramp errors), and the crash-looping frontend-proxy is stopped to free runner CPU. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughUpdated the OTel demo corpus capture by configuring load-generator to bypass the frontend-proxy/Envoy path and send traffic directly to the frontend service. The Docker Compose override now sets load-generator environment variables, and the workflow startup script no longer waits on Envoy's readiness endpoint; it instead polls service status and manages service startup order directly. ChangesOTel Demo Corpus Capture - Bypass Envoy Path
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
This PR updates the OTel Demo corpus capture workflow to bypass the crash-looping frontend-proxy/Envoy path and drive the demo frontend directly, preserving business-service log generation for benchmark corpus capture.
Changes:
- Removes the Envoy admin readiness probe and instead gates on
otel-collectorandfrontendreachingrunning. - Stops
frontend-proxyafter startup to avoid CI runner churn. - Overrides load-generator settings to disable browser traffic and target
frontenddirectly.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
.github/workflows/capture-otel-demo-corpus.yml |
Updates readiness and load-generator restart flow for direct frontend capture. |
.github/otel-demo-capture-compose-override.yml |
Adds load-generator environment overrides to bypass frontend-proxy. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
What
Removes
frontend-proxy(Envoy) from the OTel Demo capture path. Follow-up to run 26716710757, which failed the readiness gate.Root cause (and a re-read of the first capture)
Envoy fails its bootstrap proto validation in CI:
The published
frontend-proxyimage (demo 2.2.0) carries a baked Envoy config with a 10th cluster whose address env var the demo doesn't set — so Envoy crash-loops. The source tag'senvoy.tmpl.yamlhas only 9 clusters, all with vars set in.env, and the image is distroless (no shell to inspect the baked template), so the empty var can't be pinned from outside.That crash-loop reframes the first capture: its ~34%
ERR_NAME_NOT_RESOLVEDflood wasn't a startup race — it was intermittent DNS for a restarting frontend-proxy. PR-N3.2's readiness probe correctly caught it instead of silently capturing a broken corpus.Fix — bypass Envoy
Per maintainer call, drive the
frontendHTTP API directly instead of debugging a distroless image's baked config:Compose override sets, on
load-generator:LOCUST_BROWSER_TRAFFIC_ENABLED=falseLOCUST_HOST=http://frontend:${FRONTEND_PORT}(
environmentmerges by key, overriding the base's hardcoded=trueand the.envLOCUST_HOST.)The frontend still fans out to cart / checkout / currency / product-catalog / payment / …, so business-service log diversity still flows — the corpus just becomes API-driven rather than browser-driven.
Readiness now gates on
otel-collector+frontendrunning. Frontend has no healthcheck and only an ephemeral host port, so "running" + the post-restart settle + the existing steady-state slice (which discards early ramp errors) is the readiness story.The crash-looping
frontend-proxyisstopped so it doesn't burn runner CPU (nothing depends on it — it fronts the frontend, not the reverse).Verification
🤖 Generated with Claude Code
Summary by CodeRabbit