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

NVIDIA / k8s-driver-manager / 34389865701
8%
main: 11%

Build:
Build:
LAST BUILD BRANCH: pull-request/255
DEFAULT BRANCH: main
Ran 09 Sep 2026 06:35PM 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

08 Sep 2026 10:52PM UTC coverage: 8.238% (+3.1%) from 5.188%
34389865701

push

github

AcidLeroy
retry the cordon and uncordon of a node on transient API errors

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%)

137 of 1663 relevant lines covered (8.24%)

0.09 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 34389865701.1 09 Sep 2026 06:35PM UTC 10
8.24
GitHub Action Run
Source Files on build 34389865701
  • 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 #34389865701
  • 9281a3c1 on github
  • Prev Build on main (#33515269184)
  • 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