[
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)