Skip to content

fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner#8387

Merged
zhaohuabing merged 11 commits intoenvoyproxy:mainfrom
zhaohuabing:merge-status-across-gatewayclasses
Mar 6, 2026
Merged

fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner#8387
zhaohuabing merged 11 commits intoenvoyproxy:mainfrom
zhaohuabing:merge-status-across-gatewayclasses

Conversation

@zhaohuabing
Copy link
Copy Markdown
Member

@zhaohuabing zhaohuabing commented Mar 2, 2026

This PR aggregates route and policy status across multiple GatewayClasses managed by the same controller, so resources preserve status from all relevant parents and ancestors instead of being overwritten by the last processed GatewayClass.

Fixes: #8318
Release note: yes

This PR continues the work from #7557. Thanks @y-rabie for all your previous work on this!

@zhaohuabing zhaohuabing requested a review from a team as a code owner March 2, 2026 10:14
@netlify
Copy link
Copy Markdown

netlify bot commented Mar 2, 2026

Deploy Preview for cerulean-figolla-1f9435 canceled.

Name Link
🔨 Latest commit 646784f
🔍 Latest deploy log https://app.netlify.com/projects/cerulean-figolla-1f9435/deploys/69a93986f1bd840008227108

@zhaohuabing zhaohuabing marked this pull request as draft March 2, 2026 10:35
@zhaohuabing zhaohuabing added this to the v1.8.0-rc.1 Release milestone Mar 2, 2026
@zhaohuabing zhaohuabing force-pushed the merge-status-across-gatewayclasses branch from 7fbcd34 to e97967c Compare March 3, 2026 06:54
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 3, 2026

Codecov Report

❌ Patch coverage is 18.67470% with 135 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.09%. Comparing base (6f6fa01) to head (646784f).
⚠️ Report is 7 commits behind head on main.

Files with missing lines Patch % Lines
internal/gatewayapi/runner/runner.go 11.92% 133 Missing ⚠️
internal/gatewayapi/extensionserverpolicy.go 86.66% 1 Missing and 1 partial ⚠️

❌ Your patch status has failed because the patch coverage (18.67%) is below the target coverage (60.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8387      +/-   ##
==========================================
- Coverage   74.23%   74.09%   -0.15%     
==========================================
  Files         242      242              
  Lines       37322    37405      +83     
==========================================
+ Hits        27705    27714       +9     
- Misses       7686     7757      +71     
- Partials     1931     1934       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
@zhaohuabing zhaohuabing force-pushed the merge-status-across-gatewayclasses branch from da9c884 to 71581c2 Compare March 3, 2026 07:59
@zhaohuabing zhaohuabing marked this pull request as ready for review March 3, 2026 08:10
// Backend statuses have no parents, so they are not aggregated.
for _, backend := range result.Backends {
key := utils.NamespacedName(backend)
if len(backend.Status.Conditions) > 0 {
Copy link
Copy Markdown
Member Author

@zhaohuabing zhaohuabing Mar 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure why we need this check, which is inconsistent with Gateway and listenerSet, but it's the existing behavior. cc @arkodg

ExtensionServerPolicies: make(map[message.NamespacedNameAndGVK]*gwapiv1.PolicyStatus),
}

mergeRouteStatus := func(status, other *gwapiv1.RouteStatus) *gwapiv1.RouteStatus {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we add a _test.go that includes tests for mergeRouteStatus and mergePolicyStatus since these are not covered by the testdata yaml ?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added unit tests for mergeRouteStatus and mergePolicyStatus. Also e2e tests for BackendTrafficPolicy and HTTPRoute with multiple GCs.

if other != nil {
if status != nil {
status.Parents = append(status.Parents, other.Parents...)
} else {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Member Author

@zhaohuabing zhaohuabing Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you mind if we handle the route cap in a follow-up PR? It’s a broader existing issue, and I’d like to keep the scope of this PR focused.

This is unlikely to happen - the cap is 32, and keep that fix out would help CP this PR to v1.7.1 and v1.6.5.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sg thanks

Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
@arkodg arkodg requested review from a team March 5, 2026 16:17
@zhaohuabing zhaohuabing merged commit db383ef into envoyproxy:main Mar 6, 2026
152 of 174 checks passed
@zhaohuabing zhaohuabing deleted the merge-status-across-gatewayclasses branch March 6, 2026 06:01
zhaohuabing added a commit to zhaohuabing/gateway that referenced this pull request Mar 6, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
cnvergence pushed a commit to cnvergence/gateway that referenced this pull request Mar 11, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
cnvergence pushed a commit to cnvergence/gateway that referenced this pull request Mar 11, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>
cnvergence pushed a commit to cnvergence/gateway that referenced this pull request Mar 11, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>
jukie pushed a commit that referenced this pull request Mar 12, 2026
* api: make ConnectionLimit.Value optional (#8478)

* api: make ConnectionLimit.Value optional

Signed-off-by: Felipe Sabadini Facina <[email protected]>

* release-notes: add entry for ConnectionLimit.Value optional

Signed-off-by: Felipe Sabadini Facina <[email protected]>

* fix: add CEL rule to require value when closeDelay is set

Signed-off-by: Felipe Sabadini Facina <[email protected]>

---------

Signed-off-by: Felipe Sabadini Facina <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix up release notes

Signed-off-by: Karol Szwaj <[email protected]>

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner (#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: active health check respect endpoint hostname (#8452)

revert unrelated changes

Signed-off-by: zirain <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: exclude unmanaged route parents from xPolicy status ancestors (#8321)

* add test for mixed managed and unmanaged Gateway parents

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* fix the policy status when the targeting routes have managed and unmanged Gateway parents

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* fix test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: add ownerReferences to ratelimit ConfigMap and HPA (#8358)

Signed-off-by: Tejasriram Parvathaneni <[email protected]>
Co-authored-by: Karol Szwaj <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: computeHosts doesn't work when listener and route both wildcard  (#8186)

* fix: computeHosts doesn't work when listener and route both wildcard

Signed-off-by: zirain <[email protected]>

* remove skipped tests

Signed-off-by: zirain <[email protected]>

* Update internal/gatewayapi/helpers.go

Co-authored-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: zirain <[email protected]>

---------

Signed-off-by: zirain <[email protected]>
Co-authored-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: fixed local object reference resolution from parent in merged BackendTrafficPolicies (#8210)

Signed-off-by: Rudrakh Panigrahi <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: XListenerSet allows route from same namespace (#8226)

Previously, using allowedRoutes/Same for an XListenerSet with an xRoute
in the same namespace would return an error. Now it properly allows
xRoutes from the same namespace.

Signed-off-by: Kris Hicks <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix: API key auth (#8267)

* add test for multiple keys

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* revert secret transform

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>

* fix gen-check

Signed-off-by: Karol Szwaj <[email protected]>

* add release notes

Signed-off-by: Karol Szwaj <[email protected]>

* add release notes for envoy proxy image

Signed-off-by: Karol Szwaj <[email protected]>

---------

Signed-off-by: Felipe Sabadini Facina <[email protected]>
Signed-off-by: Karol Szwaj <[email protected]>
Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: zirain <[email protected]>
Signed-off-by: Tejasriram Parvathaneni <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>
Signed-off-by: Kris Hicks <[email protected]>
Co-authored-by: Felipe Sabadini Facina <[email protected]>
Co-authored-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Co-authored-by: zirain <[email protected]>
Co-authored-by: Tejasriram Parvathaneni <[email protected]>
Co-authored-by: Rudrakh Panigrahi <[email protected]>
Co-authored-by: Kris Hicks <[email protected]>
rudrakhp pushed a commit to rudrakhp/gateway that referenced this pull request Mar 12, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
rudrakhp pushed a commit to rudrakhp/gateway that referenced this pull request Mar 12, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
rudrakhp pushed a commit to rudrakhp/gateway that referenced this pull request Mar 12, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
rudrakhp pushed a commit to rudrakhp/gateway that referenced this pull request Mar 12, 2026
…ner (envoyproxy#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>
rudrakhp added a commit that referenced this pull request Mar 12, 2026
* fix: fixed local object reference resolution from parent in merged BackendTrafficPolicies (#8210)

Signed-off-by: Rudrakh Panigrahi <[email protected]>

* fix: exclude unmanaged route parents from xPolicy status ancestors (#8321)

* add test for mixed managed and unmanaged Gateway parents

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* fix the policy status when the targeting routes have managed and unmanged Gateway parents

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* fix test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>

* fix: computeHosts doesn't work when listener and route both wildcard  (#8186)

* fix: computeHosts doesn't work when listener and route both wildcard

Signed-off-by: zirain <[email protected]>

* remove skipped tests

Signed-off-by: zirain <[email protected]>

* Update internal/gatewayapi/helpers.go

Co-authored-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: zirain <[email protected]>

---------

Signed-off-by: zirain <[email protected]>
Co-authored-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner (#8387)

* fix: aggregate xRoute/xPolicy statuses across GWCs in gateway-api runner

Signed-off-by: y-rabie <[email protected]>

* polish

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* add e2e test

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* release note

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* truncate policy status & add tests

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

* update

Signed-off-by: Huabing (Robin) Zhao <[email protected]>

---------

Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>

* fix: add ownerReferences to ratelimit ConfigMap and HPA (#8358)

Signed-off-by: Tejasriram Parvathaneni <[email protected]>
Co-authored-by: Karol Szwaj <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>

* api: make ConnectionLimit.Value optional (#8478)

* api: make ConnectionLimit.Value optional

Signed-off-by: Felipe Sabadini Facina <[email protected]>

* release-notes: add entry for ConnectionLimit.Value optional

Signed-off-by: Felipe Sabadini Facina <[email protected]>

* fix: add CEL rule to require value when closeDelay is set

Signed-off-by: Felipe Sabadini Facina <[email protected]>

---------

Signed-off-by: Felipe Sabadini Facina <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>

* fix test race (#8180)

* fix test race

Signed-off-by: zirain <[email protected]>

* use io.Discard

Signed-off-by: zirain <[email protected]>

* use sync.WaitGroup

Signed-off-by: zirain <[email protected]>

---------

Signed-off-by: zirain <[email protected]>
Signed-off-by: Isaac Wilson <[email protected]>
Co-authored-by: Isaac Wilson <[email protected]>
Signed-off-by: Rudrakh Panigrahi <[email protected]>

* fix gen check

Signed-off-by: Rudrakh Panigrahi <[email protected]>

---------

Signed-off-by: Rudrakh Panigrahi <[email protected]>
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
Signed-off-by: zirain <[email protected]>
Signed-off-by: y-rabie <[email protected]>
Signed-off-by: Tejasriram Parvathaneni <[email protected]>
Signed-off-by: Felipe Sabadini Facina <[email protected]>
Signed-off-by: Isaac Wilson <[email protected]>
Co-authored-by: Huabing (Robin) Zhao <[email protected]>
Co-authored-by: zirain <[email protected]>
Co-authored-by: y-rabie <[email protected]>
Co-authored-by: Teja079 <[email protected]>
Co-authored-by: Karol Szwaj <[email protected]>
Co-authored-by: Felipe Sabadini <[email protected]>
Co-authored-by: Isaac Wilson <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SecurityPolicy / BackendTrafficPolicy status churn: status.ancestors oscillates when targeting multiple routes

4 participants