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

NVIDIA / k8s-driver-manager / 34391032241
11%

Build:
DEFAULT BRANCH: main
Ran 09 Sep 2026 06:47PM UTC
Jobs 1
Files 10
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

09 Sep 2026 06:46PM UTC coverage: 11.072% (+2.9%) from 8.146%
34391032241

push

github

web-flow
retry the cordon and uncordon of a node on transient API errors (#210)

k8s-driver-manager cordons the node, performs its driver work, then
uncordons it. Both calls gave up on the first API error, so a transient
API-server timeout, 5xx, or connection refused could abort an upgrade or
leave the node cordoned. We hit this as clusters come up for the first
time, when the API server is not yet fully ready; it is not an issue
during steady state or upgrades.

Wrap both calls in a bounded exponential backoff (5 attempts, 1s base,
factor 2, 20% jitter). The retry policy lives at the call site, in
driver-manager's cordonNode and uncordonNode, so the kube client stays a
thin wrapper over the Kubernetes API and carries no retry concern.
Because the client reads the Node inside CordonNode and UncordonNode, a
retried call always patches a freshly read object rather than a stale
one. How each call site treats an exhausted budget is unchanged.

The retry loop is context aware: a cancelled context ends it promptly
instead of sleeping out the remaining backoff, and is joined with the
last error via errors.Join so both causes stay inspectable rather than
being conflated, which is what wait.Interrupted would do. Failed
attempts are logged with their attempt number and only described as
retrying while attempts remain, so the attempt that exhausts the budget
is logged as a final failure instead.

There is no new env var or flag: the retry limit is a constant.

The retry helper is unit tested directly. The client's per-attempt
contract is covered by driving the real typed clientset against an
httptest stand-in API server with independent failure budgets for reads
and writes, so a failed GET and a failed PATCH are both exercised.
(client-go's fake clientset is not vendored, and vendoring it would add
a large unrelated diff.)

Signed-off-by: Cody Eilar <cody@hyperbolic.xyz>

35 of 48 new or added lines in 2 files covered. (72.92%)

187 of 1689 relevant lines covered (11.07%)

0.13 hits per line

Uncovered Changes

Lines Coverage ∆ File
12
0.0
0.0% cmd/driver-manager/main.go
1
97.22
cmd/driver-manager/retry.go
Jobs
ID Job ID Ran Files Coverage
1 34391032241.1 09 Sep 2026 06:47PM UTC 10
11.07
GitHub Action Run
Source Files on build 34391032241
  • Tree
  • List 10
  • Changed 2
  • Source Changed 1
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34391032241
  • 001f932d on github
  • Prev Build on main (#34362094066)
  • Next Build on main (#34401571404)
  • Delete
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