You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WSClient.update() can wait on poll() or select() even when an SSL socket already has decrypted data buffered internally. This can delay stream output indefinitely when no additional network event arrives.
This change checks SSLSocket.pending() before polling and immediately processes a WebSocket frame when buffered SSL data is available. It also adds a deterministic regression test using timeout=None that verifies neither polling path is entered.
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 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!
This pull-request has been approved by: mihirduvedi Once this PR has been reviewed and has the lgtm label, please assign roycaihw for approval. For more information see the Code Review Process.
The full list of commands accepted by this bot can be found here.
Details
Needs approval from an approver in each of these files:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cncf-cla: yesIndicates the PR's author has signed the CNCF CLA.kind/bugCategorizes issue or PR as related to a bug.release-noteDenotes a PR that will be considered when it comes time to generate release notes.size/MDenotes a PR that changes 30-99 lines, ignoring generated files.
1 participant
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
/kind bug
What this PR does / why we need it:
WSClient.update()can wait onpoll()orselect()even when an SSL socket already has decrypted data buffered internally. This can delay stream output indefinitely when no additional network event arrives.This change checks
SSLSocket.pending()before polling and immediately processes a WebSocket frame when buffered SSL data is available. It also adds a deterministic regression test usingtimeout=Nonethat verifies neither polling path is entered.Which issue(s) this PR fixes:
Fixes #2414
Special notes for your reviewer:
This addresses the unit-test request from #2422 and the review feedback to avoid calling
poll()orselect()when SSL data is already pending.Tests:
python -m pytest -q kubernetes/base/stream/ws_client_test.py— 17 passedpython -m pytest -q kubernetes/base --ignore=kubernetes/base/dynamic/test_client.py --ignore=kubernetes/base/dynamic/test_discovery.py— 143 passedThe two excluded dynamic-client modules require a live Kubernetes cluster.
Does this PR introduce a user-facing change?
Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.: