[ 
https://issues.apache.org/jira/browse/HBASE-28599?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Duo Zhang resolved HBASE-28599.
-------------------------------
    Fix Version/s: 2.4.18
                   2.7.0
                   3.0.0-beta-2
                   2.6.1
                   2.5.9
     Hadoop Flags: Reviewed
       Resolution: Fixed

Pushed to all active branches.

Thanks [~fjvbn2003] for contributing and [~robiee17] for the great analyzing!

> RowTooBigException is thrown when duplicate increment RPC call is attempted
> ---------------------------------------------------------------------------
>
>                 Key: HBASE-28599
>                 URL: https://issues.apache.org/jira/browse/HBASE-28599
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>    Affects Versions: 2.5.5, 2.5.6, 2.5.7, 2.5.8
>            Reporter: Robin Infant A
>            Assignee: youngju kim
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.4.18, 2.7.0, 3.0.0-beta-2, 2.6.1, 2.5.9
>
>         Attachments: RowTooBig_trace.txt
>
>
> *Issue:*
> `RowTooBigException` is thrown when a duplicate increment RPC call is 
> attempted.
> *Expected Behavior:*
> 1. The initial RPC increment call should time out for some reason.
> 2. The duplicate RPC call should be converted to a GET request and fetch the 
> result that I am trying to increment.
> 3. The result should contain only the qualifier that I am attempting to 
> increment.
> *Actual Behavior:*
> 1. The initial RPC increment call timed out, which is expected.
> 2. The duplicate RPC call is converted to a GET request but fails to clone 
> the qualifier into the GET request.
> 3. Hence, the GET request attempts to retrieve all qualifiers for the given 
> row and columnfamily, resulting in a `RowTooBigException`.
> *Steps to Reproduce:*
> 1. Ensure a row with a total value size exceeding `hbase.table.max.rowsize` 
> (default = 1073741824) exists.
> 2. Nonce property should be enabled `hbase.client.nonces.enabled` which is 
> actually defaulted to true.
> 3. Attempt to increment a qualifier against the same row.
> 4. In my case, I am using a postIncrement co-processor which may cause a 
> delay (longer than the RPC timeout property).
> 5. A duplicate increment call should be triggered, which tries to get the 
> value rather than increment it.
> 6. The GET request actually tries to retrieve all the qualifiers for the row, 
> resulting in a `RowTooBigException`.
> *Insights:*
> Upon further debugging, I found that qualifiers are not cloned into the GET 
> instance due to incorrect usage of 
> [CellScanner.advance|https://github.com/apache/hbase/blob/7ebd4381261fefd78fc2acf258a95184f4147cee/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java#L3833]
> *Fix Suggestion:*
> Removing the `!` operation from `while (!CellScanner.advance)` may resolve 
> the issue.
> Attached Exception Stack Trace for reference.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to