• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pomerium / pomerium / 40401392926
54%

Build:
DEFAULT BRANCH: main
Ran 26 Oct 2026 09:20PM UTC
Jobs 1
Files 728
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

26 Oct 2026 09:05PM UTC coverage: 53.922% (+0.2%) from 53.772%
40401392926

push

github

web-flow
fix: xdsmgr late ack (#6900)

## Summary

xdsmgr streams config to Envoy over delta ADS. For each resource type it
keeps a record of the resource versions it believes Envoy holds, and on
every config change it sends only the resources whose version differs
from that record. Versions are content hashes, so a resource that
returns to earlier content gets its earlier version back.

Before this change the record was updated only when Envoy ACKed the
**latest** nonce, and an ACK of any earlier response was dropped. Envoy,
however, applies every response on the stream in order before it
acknowledges it, and may acknowledge late: it holds the CDS ACK back
while a cluster warms. If the config went A → B → A before the ACK of B
arrived, the record still said A, the return to A diffed empty, nothing
was sent, and Envoy kept B for the life of the stream. The affected
route answered 404 `route_not_found` (or 503 `cluster_not_found` when
only the CDS ACK was late) until Pomerium restarted, while xDS health
reported running and later config rebuilds that contained the route sent
nothing.

```mermaid
sequenceDiagram
    autonumber
    participant CS as Config source
    participant X as xdsmgr
    participant E as Envoy
    Note over X,E: Before. Envoy has A (route and cluster flip). xdsmgr's record says A.
    CS->>X: update to B, route removed
    X->>E: route config main, remove cluster flip, nonce n
    E->>E: apply B, route and cluster gone
    CS->>X: update back to A, latest nonce n+1
    Note over X: diff of A against the record (still A) is empty, nothing sent
    E->>X: ACK nonce n
    Note over X: n is not the latest nonce, ACK dropped, record stays A
    Note over X,E: Envoy has B, xdsmgr believes A. Nothing is ever re-sent.
```

```mermaid
sequenceDiagram
    autonumber
    participant CS as Config source
    participant X as xdsmgr
    participant E as Envoy
    Note over X,E: After. Envoy has A. xdsmgr's record says A.
    CS->>X: update to B, route r... (continued)

60 of 67 new or added lines in 2 files covered. (89.55%)

23 existing lines in 8 files now uncovered.

35368 of 65591 relevant lines covered (53.92%)

331.08 hits per line

Uncovered Changes

Lines Coverage ∆ File
6
75.0
30.56% internal/controlplane/xdsmgr/log.go
1
91.52
4.31% internal/controlplane/xdsmgr/xdsmgr.go

Coverage Regressions

Lines Coverage ∆ File
8
75.49
-0.28% pkg/storage/postgres/backend.go
6
72.8
-4.8% pkg/grpcutil/client_manager.go
2
47.67
0.0% internal/databroker/server_clustered_follower.go
2
85.19
-0.67% pkg/databrokerutil/syncer.go
2
93.62
-0.34% pkg/ssh/auth.go
1
91.52
4.31% internal/controlplane/xdsmgr/xdsmgr.go
1
97.37
0.0% pkg/identity/manager/schedulers.go
1
73.21
0.0% pkg/storage/postgres/registry.go
Jobs
ID Job ID Ran Files Coverage
1 40401392926.1 26 Oct 2026 09:20PM UTC 728
53.92
GitHub Action Run
Source Files on build 40401392926
  • Tree
  • List 728
  • Changed 20
  • Source Changed 2
  • Coverage Changed 20
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #40401392926
  • f780f054 on github
  • Prev Build on main (#39979152946)
  • Next Build on main (#40424008301)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc