[
https://issues.apache.org/jira/browse/PHOENIX-8015?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tanuj Khurana updated PHOENIX-8015:
-----------------------------------
Summary: LIMIT query on uncovered index with no filter silently truncates
because unverifiable index rows consumes the limit (was: LIMIT query on
uncovered index with no filter silently truncates when a leading run of
unverifiable index rows consumes the limit)
> LIMIT query on uncovered index with no filter silently truncates because
> unverifiable index rows consumes the limit
> -------------------------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-8015
> URL: https://issues.apache.org/jira/browse/PHOENIX-8015
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.2.0, 5.2.1, 5.3.0, 5.2.2, 5.3.1, 5.3.2
> Reporter: Tanuj Khurana
> Priority: Major
>
> When scanning an uncovered index for a query which has a limit clause but no
> filter the client attaches a PageFilter to the scan. This PageFilter is
> handled by the TTLRegionScanner
> which sits in the scanner stack below the TTLRegionScanner.
> {code:java}
> RegionScannerHolder
> -> UncoveredGlobalIndexRegionScanner <- join-back + verification (drops
> orphans)
> -> TTLRegionScanner <- strips PageFilter, counts RAW
> rows, hard-stops
> -> PagingRegionScanner
> -> HBase raw index scanner{code}
> All the rows in the uncovered index are unverified. TTLRegionScanner counts
> the unverified rows towards the query limit but these rows can be orphaned
> rows such that the data table row doesn't point back to the index row. In
> such cases, the query returns incorrect results as the TTLRegionScanner
> returns no more rows once the limit is reached but the UncoveredRegionScanner
> actually drops those unverified rows.
> Covered indexes don't have this problem because scans on covered indexes are
> processed by GlobalIndexRegionScanner which removes the PageFilter from the
> scan and then reinitializes the underlying the scanners
> ([GlobalIndexChecker#init()|https://github.com/apache/phoenix/blob/master/phoenix-core-server/src/main/java/org/apache/phoenix/index/GlobalIndexChecker.java#L205-L209])
>
> Uncovered indexes should also follow the similar pattern and only count the
> row towards the query limit after it has been checked and verified.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)