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

prisma-risk / tsoracle / 26412237517
95%

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

25 May 2026 05:24PM UTC coverage: 96.595% (-0.06%) from 96.653%
26412237517

push

github

web-flow
fix(client): ride out a leader election in issue_rpc (#417)

* fix(client): split absent-hint NOT_LEADER into AttemptOutcome::NoLeaderYet

A FAILED_PRECONDITION with no leader-hint trailer (the election
signature: a follower that is up but does not yet know a leader) now
classifies as AttemptOutcome::NoLeaderYet rather than HintRejected.

HintRejected is kept for deterministic, unactionable cases: a malformed
trailer or a hint dropped by the TLS-downgrade guard. These are
distinct from a peer that simply has not elected a leader yet — the
former should keep failing fast, the latter should ride out the
election window. Separating them into different variants is the
prerequisite for the ride-out re-poll loop (Task 2).

Behavior is fully preserved in this commit: the issue_rpc match treats
NoLeaderYet identically to HintRejected (record last_err, continue
without charging the attempt budget). The ride-out logic is Task 2.

* fix(client): ride out a leader election within overall_deadline

Wrap the single-pass worklist loop in an outer pass loop that re-polls
(with jittered backoff) whenever a reachable server signals an in-progress
election (`NoLeaderYet` — absent-hint `FAILED_PRECONDITION` — or
`StaleLeaderHint`) and the `overall_deadline` still has headroom.

`failed_attempts` and `last_err` persist across passes so
`RetryPolicy::max_attempts` keeps its documented whole-call meaning and
the surfaced error on deadline exhaustion is the real `NOT_LEADER`, never
the misleading `NoReachableEndpoints`. The `Worklist`, the `redirects`
counter, and `saw_election_signal` reset per pass. The redirect-cap arm
still `break`s without setting the signal (a later task turns it into a
signal).

Transport `Err` and `HintRejected` (malformed trailer) do not set the
signal, so a dead pool and a persistently broken peer keep failing fast.

* fix(client): ride out a churning redirect chain within the deadline

Hitting MAX_LEADER_REDIRECTS in a single pass now sets saw_ele... (continued)

301 of 317 new or added lines in 1 file covered. (94.95%)

2 existing lines in 1 file now uncovered.

10014 of 10367 relevant lines covered (96.59%)

510680.67 hits per line

Uncovered Changes

Lines Coverage ∆ File
16
94.1
0.22% crates/tsoracle-client/src/retry.rs

Coverage Regressions

Lines Coverage ∆ File
2
78.49
-0.56% crates/tsoracle-paxos-toolkit/src/lifecycle/mod.rs
Jobs
ID Job ID Ran Files Coverage
1 26412237517.1 25 May 2026 05:29PM UTC 66
96.59
GitHub Action Run
Source Files on build 26412237517
  • Tree
  • List 66
  • Changed 2
  • Source Changed 1
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26412237517
  • 1ad815a8 on github
  • Prev Build on main (#26411929731)
  • Next Build on main (#26412469245)
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