Repository navigation
perf(xds): add opt-in endpoint fast path for EDS-only pushes - #10022
Closed
zhaohuabing wants to merge 9 commits into
Closed
zhaohuabing wants to merge 9 commits into
zhaohuabing wants to merge 9 commits into
Conversation
✅ Deploy Preview for cerulean-figolla-1f9435 ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #10022 +/- ##
==========================================
- Coverage 81.89% 81.71% -0.19%
==========================================
Files 268 272 +4
Lines 42452 42761 +309
==========================================
+ Hits 34767 34941 +174
- Misses 7684 7819 +135
Partials 1 1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
zhaohuabing
force-pushed
the
endpoint-fast-path-9777
branch
13 times, most recently
from
September 17, 2026 02:32
c80b052 to
8ba9c9f
Compare
Endpoint updates currently reach Envoy only by riding along in a full rebuild, so their freshness is bound to whatever a full translation costs. This adds an opt-in fast path behind the EndpointFastPath runtime flag: the provider publishes EndpointSlice changes on a dedicated channel, and the xDS runner rebuilds only the affected ClusterLoadAssignments from per-cluster context captured during the last successful translation, patching them into the snapshot with only the EDS version bumped. Full translations still run for every endpoint event and remain authoritative; endpoint state the fast path has published is folded into a racing build before it is published, so a build cannot regress it. Changes that are not load-assignment-only, such as an endpoint count crossing zero or a gateway using EnvoyPatchPolicy or endpoint-modifying extension hooks, are left to the full path. Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Signed-off-by: Huabing (Robin) Zhao <huabing@tetrate.io>
zhaohuabing
force-pushed
the
endpoint-fast-path-9777
branch
from
September 17, 2026 02:50
8ba9c9f to
b6e2dcd
Compare
Signed-off-by: Huabing (Robin) Zhao <huabing@tetrate.io>
Signed-off-by: Huabing (Robin) Zhao <huabing@tetrate.io>
Signed-off-by: Huabing (Robin) Zhao <huabing@tetrate.io>
Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com>
Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com>
Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> # Conflicts: # internal/gatewayapi/contexts.go
Resolve conflict in internal/provider/kubernetes/controller.go: main extracted the per-GatewayClass loop body into reconcileGatewayClass. Thread referencedBackends into that helper so the backend collection still runs per GatewayClass, and keep the stale EndpointUpdates pruning in Reconcile after the loop. Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com>
Signed-off-by: Huabing (Robin) Zhao <huabing@tetrate.io> # Conflicts: # api/v1alpha1/envoygateway_types.go
Member
Author
|
/retest |
Member
Author
|
Relpaced by #10398 |
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Endpoint updates reach Envoy today only by riding along in a full rebuild, so how quickly they land depends on whatever a full translation happens to cost. At large scale that can be seconds, and under sustained pod churn the staleness is continuous rather than occasional.
This adds an opt-in fast path behind the
EndpointFastPathruntime flag, off by default. The provider publishes EndpointSlice changes on a dedicated channel, and the xDS runner rebuilds only the affected ClusterLoadAssignments from per-cluster context captured during the last successful translation, patching them into the snapshot with only the EDS version bumped. Everything else keeps the version Envoy already has, so listeners, clusters and routes are not resent.The full pipeline is untouched and still runs for every endpoint event, which is what keeps this safe. It remains authoritative and acts as the backstop: when the fast path cannot handle a change on its own — an endpoint count crossing zero, or a gateway using EnvoyPatchPolicy or endpoint-modifying extension hooks — it does nothing at all and lets the full path take it. Endpoint state the fast path has already published is folded into a racing build before that build goes out, so a slow build cannot regress endpoints back to what it read when it started.
Addresses #9777. The design, including the follow-up option of separating the configuration and endpoint paths in the provider, is written up here: https://docs.google.com/document/d/1r_-k6pu0eptbYucMgbilol91-0DmoekMf3MNums1luM/edit?usp=sharing