-
Notifications
You must be signed in to change notification settings - Fork 3.4k
HBASE-28589 ServerCall.setResponse swallows IOException and leaves client without response #7156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
This comment has been minimized.
This comment has been minimized.
…ient without response When IOException occurs during response creation in ServerCall.setResponse(), the method only logs a warning and sets response to null. This causes client to receive no response or experience connection issues without knowing what went wrong on server side. This patch: - Catches IOException during response creation - Creates an error response to send back to client - Handles the case where even error response creation fails - Adds unit tests to verify the behavior
This comment has been minimized.
This comment has been minimized.
🎊 +1 overall
This message was automatically generated. |
🎊 +1 overall
This message was automatically generated. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense to me. Approving but giving time for others to comment.
Thanks charles! I will continue following up this issue until it is resolved. |
Description
ServerCall.setResponse() method currently swallows IOException when creating response,
leaving client without any indication of server-side failure. This violates the RPC
protocol requirement that server should always send a response (either success or error).
This issue has existed since HBASE-14598 and continues to affect the latest branches
(3.0 and 2.6).
Background
The original fix for HBASE-14598 attempted to prevent OOM errors by checking array size
before allocation and throwing DoNotRetryIOException to stop client retries. However,
the DoNotRetryIOException never reaches the client due to a flaw in ServerCall.setResponse().
Root Cause
When IOException occurs during response creation (e.g., during cell block building):
This particularly affects scenarios where:
hbase.ipc.server.reservoir.enabled
is set to falseChanges
Impact
This fix ensures that:
JIRA
HBASE-28589