JHSUYU opened a new pull request, #7156:
URL: https://github.com/apache/hbase/pull/7156

   ### 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):
   1. The exception is caught in ServerCall.setResponse()
   2. Only a warning is logged: "Exception while creating response"
   3. The response is set to null
   4. Client receives no response, causing connection closure and endless 
retries
   
   This particularly affects scenarios where:
   - `hbase.ipc.server.reservoir.enabled` is set to false
   - BufferOverflowException occurs in ByteBufferOutputStream.checkSizeAndGrow()
   - DoNotRetryIOException is thrown but never propagated to client
   
   ### Changes
   - Modified ServerCall.setResponse() to create a proper error response when 
IOException occurs
   - Ensures DoNotRetryIOException and other exceptions are properly 
communicated to clients
   - Added  unit tests in TestServerCall
   
   ### Impact
   This fix ensures that:
   - Clients receive proper error responses and take action based on the 
error(e.g. stop retry)
   
   ### JIRA
   [HBASE-28589](https://issues.apache.org/jira/browse/HBASE-28589)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@hbase.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to