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

prisma-risk / tsoracle / 26367782141
95%

Build:
DEFAULT BRANCH: main
Ran 24 May 2026 05:24PM UTC
Jobs 1
Files 74
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

24 May 2026 05:20PM UTC coverage: 94.777% (-0.02%) from 94.796%
26367782141

push

github

web-flow
fix(client): evict cached channel on transport-class RPC failure (#239) (#292)

PR #290 evicts ChannelPool entries on a failed *dial*, but a channel that
dialed successfully, got cached, then had a later RPC fail with a transport
error was never removed. A tonic static `Endpoint` resolves its address once
at connect and never re-resolves, so after pod replacement (new IP behind the
same endpoint string) the cached channel's background reconnect loop hammers a
dead address forever and is reused on every future resolution onto that string.
The leader cache's `leader_ttl` ages out the leader *pin* but nothing aged out
the *channel* — a slow resource leak and staleness hazard in rolling-restart
topologies.

`attempt` now keeps the channel's `OnceCell` handle for the duration of the RPC
and, on a transport-class failure, hands that exact cell to a new
`ChannelPool::evict_if_current` so the dead channel is dropped (forcing the next
attempt to re-dial and re-resolve) without racing a concurrent re-dial — the
same `Arc::ptr_eq` identity guard the dial-failure path already uses. Transport
class is `Unavailable`, transport errors, and `DeadlineExceeded` (a half-open
connection that black-holes until the per-attempt deadline rather than failing
fast); application errors such as `Internal` leave the channel cached because
the connection is healthy.

The backoff and channel-eviction policies share one trigger today, so the
classification is factored into `is_transport_failure` with `should_backoff`
delegating to it; divergence would have to be a deliberate edit. `client` is
split into `client_with_cell` (returns the cell handle for the retry loop) plus
a test-only wrapper.

178 of 196 new or added lines in 3 files covered. (90.82%)

2 existing lines in 1 file now uncovered.

10996 of 11602 relevant lines covered (94.78%)

504253.34 hits per line

Uncovered Changes

Lines Coverage ∆ File
16
88.91
1.09% crates/tsoracle-client/src/retry.rs
2
97.06
-0.11% crates/tsoracle-client/src/leader_resolved.rs

Coverage Regressions

Lines Coverage ∆ File
2
84.37
-0.54% benchmarks/stress/src/topology/paxos.rs
Jobs
ID Job ID Ran Files Coverage
1 26367782141.1 24 May 2026 05:24PM UTC 74
94.78
GitHub Action Run
Source Files on build 26367782141
  • Tree
  • List 74
  • Changed 4
  • Source Changed 3
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26367782141
  • 89c60540 on github
  • Prev Build on main (#26354719091)
  • Next Build on main (#26367973536)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc