[xds] stabilize listener-level Lua XDS filters to avoid listener drain#8598
[xds] stabilize listener-level Lua XDS filters to avoid listener drain#8598rudrakhp merged 2 commits intoenvoyproxy:mainfrom
Conversation
Use one disabled HCM Lua filter per Lua slot index instead of per EnvoyExtensionPolicy. The slot/index logic is needed because https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/lua/v3/lua.proto#envoy-v3-api-msg-extensions-filters-http-lua-v3-luaperroute only supports one sourceCode at a time Route-specific scripts still use LuaPerRoute, so multi-Lua ordering is preserved while adding new single-Lua policies no longer churns the listener filter chain once slot 0 already exists. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Arko Dasgupta <arkodg@gmail.com>
✅ Deploy Preview for cerulean-figolla-1f9435 canceled.
|
There was a problem hiding this comment.
Pull request overview
Stabilizes listener-level Lua HTTP filter naming in the XDS translator by allocating disabled HCM Lua filters per Lua slot index (rather than per policy-derived name), so adding/removing EnvoyExtensionPolicy objects does not churn the listener filter chain while preserving per-route multi-Lua ordering via LuaPerRoute.
Changes:
- Generate one disabled HCM Lua filter per maximum Lua list index used across routes (
envoy.filters.http.lua/<idx>), instead of per policy-derived Lua name. - Bind route-level
LuaPerRouteconfigs to those stable slot-indexed filter names to preserve ordering. - Update IR/XDS golden test outputs to reflect the new stable filter naming.
Reviewed changes
Copilot reviewed 2 out of 4 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| internal/xds/translator/lua.go | Switches Lua HCM filter generation and per-route binding to stable slot-index naming. |
| internal/ir/xds.go | Updates Lua IR field comment to remove outdated translator behavior reference. |
| internal/xds/translator/testdata/out/xds-ir/lua.routes.yaml | Updates per-route typedPerFilterConfig keys to envoy.filters.http.lua/<idx>. |
| internal/xds/translator/testdata/out/xds-ir/lua.listeners.yaml | Updates listener httpFilters names to stable slot-indexed Lua filters and deduplicates filters. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #8598 +/- ##
==========================================
+ Coverage 74.13% 74.32% +0.18%
==========================================
Files 242 243 +1
Lines 37749 38147 +398
==========================================
+ Hits 27987 28353 +366
+ Misses 7807 7805 -2
- Partials 1955 1989 +34 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Co-authored-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Signed-off-by: Arko Dasgupta <arkodg@users.noreply.github.com>
ah I missed it too :) , |
rudrakhp
left a comment
There was a problem hiding this comment.
LGTM!
QQ: Do we not guarantee backward compatibility for filter names across minor versions?
technically we dont, we do say in https://gateway.envoyproxy.io/docs/tasks/extensibility/envoy-patch-policy/ that patching xDS will always be unstable we try to avoid it especially for common resources that get patched like the listener and route |
envoyproxy#8598) * [xds] stabilize listener-level Lua XDS filters to avoid listener drain Use one disabled HCM Lua filter per Lua slot index instead of per EnvoyExtensionPolicy. The slot/index logic is needed because https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/lua/v3/lua.proto#envoy-v3-api-msg-extensions-filters-http-lua-v3-luaperroute only supports one sourceCode at a time Route-specific scripts still use LuaPerRoute, so multi-Lua ordering is preserved while adding new single-Lua policies no longer churns the listener filter chain once slot 0 already exists. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Arko Dasgupta <arkodg@gmail.com> * Update internal/xds/translator/lua.go Co-authored-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Signed-off-by: Arko Dasgupta <arkodg@users.noreply.github.com> --------- Signed-off-by: Arko Dasgupta <arkodg@gmail.com> Signed-off-by: Arko Dasgupta <arkodg@users.noreply.github.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Signed-off-by: Jake Oliver <jake@truelayer.com>
Use one disabled HCM Lua filter per Lua slot index instead of per EnvoyExtensionPolicy. The slot/index logic is needed because https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/lua/v3/lua.proto#envoy-v3-api-msg-extensions-filters-http-lua-v3-luaperroute only supports one sourceCode at a time
Route-specific scripts still use LuaPerRoute, so multi-Lua ordering is preserved while adding new single-Lua policies no longer churns the listener filter chain once slot 0 already exists.