Add Client#io_ok?, check before Reactor#register #2432
Merged
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.
Description
The issue - how to make Puma respond gracefully when a io connection can misbehave/fail at any point in its handling?
This is a difficult thing to test in CI, especially with multiple VM's running on CI runners.
The are infrequent errors in Puma CI, one example below:
The error
mode not supported for this object: rimplies that the socket is no longer valid in some way.Does it represent a CI specific issue, or is it something that could occur in real use?
At present, there is a great deal of 'rescue handling' re sockets, and where and how exceptions are raised/caught can get messy.
So, is there a way to conditionally test the socket? This PR is just a guess, using an
io_ok?method in Client.I believe @schneems has mentioned something similar somewhere.
Anyway, if people think it's valid, maybe a method needs to also be added somewhere that takes a socket as a parameter, which
Client#io_ok?could call. I also haven't thought about logging, etc.Your checklist for this pull request
[changelog skip]or[ci skip]to the pull request title.[ci skip]to the title of the PR.#issue" to the PR description or my commit messages.