Skip to content

Keep received exec exit status when the connection fails on close - #4967

Merged
kubernetes-prow[bot] merged 1 commit into
kubernetes-client:masterfrom
sahilkhatri09:fix-exec-exit-code-overwrite
Oct 29, 2026
Merged

kubernetes-prow[bot] merged 1 commit into
kubernetes-client:masterfrom
sahilkhatri09:fix-exec-exit-code-overwrite

Conversation

@sahilkhatri09

Copy link
Copy Markdown
Contributor

What type of PR is this?
/kind bug

What this PR does / why we need it:
The API server can close the exec WebSocket immediately after sending the exit status on the status channel (stream 3). When the status arrives, ExecProcess closes its own side, and writing that close frame can then fail with java.net.SocketException: Connection or outbound has been closed (thrown from WebSocketWriter.writeClose). failure() then unconditionally overwrote the already received exit status with -1975219. As a result, a command that finished, usually with exit code 0, was intermittently reported as failed. Callers can't tell this apart from a real mid-command disconnect, so they have to re-run commands that may not be idempotent.

This change only sets -1975219 when no exit status was received (statusCode < 0). A failure before the status arrives behaves exactly as before. The onUnhandledError callback is still invoked in both cases.

Which issue(s) this PR fixes:
Fixes #1891 (also reported in #1346, #3385, #4812)

Tests:
Added ExecTest.unhandledErrorAfterExitStatusKeepsExitCode, parameterized for exit codes 0 and 126. It delivers a status frame and then calls failure(). It fails without this change (exit value -1975219) and passes with it. ExecTest passes (13 tests), and spotless:check passes.

Does this PR introduce a user-facing change?

Exec: a connection failure after the exit status was received no longer overwrites the exit code with -1975219.

The API server can close the exec WebSocket right after sending the exit
status. ExecProcess then closes its side, writing the close frame fails
(e.g. "Connection or outbound has been closed"), and failure() overwrote the
already received exit status with -1975219, so a command that finished was
reported as a failure.

Only set -1975219 when no exit status was received.
@kubernetes-prow kubernetes-prow Bot added the kind/bug Categorizes issue or PR as related to a bug. label Oct 29, 2026
@linux-foundation-easycla

linux-foundation-easycla Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

CLA Signed
The committers listed above are authorized under a signed CLA.

  • ✅ login: sahilkhatri09 / name: Sahil Khatri (589286f)

@kubernetes-prow

Copy link
Copy Markdown
Contributor

Welcome @sahilkhatri09!

It looks like this is your first PR to kubernetes-client/java 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes-client/java has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@kubernetes-prow kubernetes-prow Bot added cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. and removed cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. labels Oct 29, 2026
@brendandburns

Copy link
Copy Markdown
Contributor

/lgtm
/approve

@kubernetes-prow kubernetes-prow Bot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Oct 29, 2026
@kubernetes-prow

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: brendandburns, sahilkhatri09

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@kubernetes-prow kubernetes-prow Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Oct 29, 2026
@kubernetes-prow
kubernetes-prow Bot merged commit 9872bad into kubernetes-client:master Oct 29, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/bug Categorizes issue or PR as related to a bug. lgtm "Looks good to me", indicates that a PR is ready to be merged. size/M Denotes a PR that changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Incorrect exit code in current Exec implementation

2 participants