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

Junegunn Choi updated HBASE-29896:
----------------------------------
    Description: 
h2. Problem

Raw scan does not include cells expired by cell TTL.
{code:java}
# Cell expired by CF TTL
create 't', { NAME => 'd', TTL => 1 }
put 't', 'row', 'd:foo', 'bar'
scan 't'
  # Not visible, as expected
scan 't', RAW => true
  # Expired row is visible

# Cell expired by cell TTL
create 't2', 'd'
put 't2', 'row', 'd:foo', 'bar', TTL => 1
scan 't2'
  # Not visible, as expected
scan 't2', RAW => true
  # Expired row is not visible !!!
{code}
h2. Why do we care?

We ran into a timeout while running the RegionMover.

[https://github.com/apache/hbase/blob/470fe193938f8daaed8183ab8175cc7351f2ef36/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java#L113-L115]
 - We had many expired cells with cell-level TTL.
 - The raw scanner used in {{MoveWithAck}} failed to return a row within the 
timeout because of the current behavior.

h2. Fix

In {{{}RawScanQueryMatcher.match(){}}}, exclude {{MatchCode.SKIP}} from the 
early-return check.

  was:
h2. Problem

Raw scan does not include cells expired by its cell TTL.

{code}
# Cell expired by CF TTL
create 't', { NAME => 'd', TTL => 1 }
put 't', 'row', 'd:foo', 'bar'
scan 't'
  # Not visible, as expected
scan 't', RAW => true
  # Expired row is visible

# Cell expired by cell TTL
create 't2', 'd'
put 't2', 'row', 'd:foo', 'bar', TTL => 1
scan 't2'
  # Not visible, as expected
scan 't2', RAW => true
  # Expired row is not visible !!!
{code}

h2. Why do we care?

We ran into a timeout while running the RegionMover.

https://github.com/apache/hbase/blob/470fe193938f8daaed8183ab8175cc7351f2ef36/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java#L113-L115

- We had many expired cells with cell-level TTL.
- The raw scanner used in {{MoveWithAck}} failed to return a row within the 
timeout because of the current behavior.

h2. Fix

In {{RawScanQueryMatcher.match()}}, exclude {{MatchCode.SKIP}} from the 
early-return check.


> Raw scan incorrectly skips cells expired by cell-level TTL
> ----------------------------------------------------------
>
>                 Key: HBASE-29896
>                 URL: https://issues.apache.org/jira/browse/HBASE-29896
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Junegunn Choi
>            Assignee: Junegunn Choi
>            Priority: Minor
>              Labels: pull-request-available
>
> h2. Problem
> Raw scan does not include cells expired by cell TTL.
> {code:java}
> # Cell expired by CF TTL
> create 't', { NAME => 'd', TTL => 1 }
> put 't', 'row', 'd:foo', 'bar'
> scan 't'
>   # Not visible, as expected
> scan 't', RAW => true
>   # Expired row is visible
> # Cell expired by cell TTL
> create 't2', 'd'
> put 't2', 'row', 'd:foo', 'bar', TTL => 1
> scan 't2'
>   # Not visible, as expected
> scan 't2', RAW => true
>   # Expired row is not visible !!!
> {code}
> h2. Why do we care?
> We ran into a timeout while running the RegionMover.
> [https://github.com/apache/hbase/blob/470fe193938f8daaed8183ab8175cc7351f2ef36/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java#L113-L115]
>  - We had many expired cells with cell-level TTL.
>  - The raw scanner used in {{MoveWithAck}} failed to return a row within the 
> timeout because of the current behavior.
> h2. Fix
> In {{{}RawScanQueryMatcher.match(){}}}, exclude {{MatchCode.SKIP}} from the 
> early-return check.



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

Reply via email to