Andrew Kyle Purtell created PHOENIX-8045:
--------------------------------------------

             Summary: Treat an empty end key as no upper bound in 
getLargestPossibleRowKeyInRange
                 Key: PHOENIX-8045
                 URL: https://issues.apache.org/jira/browse/PHOENIX-8045
             Project: Phoenix
          Issue Type: Bug
          Components: core
    Affects Versions: 5.3.2
            Reporter: Andrew Kyle Purtell
            Assignee: Andrew Kyle Purtell
             Fix For: 5.4.0, 5.3.3


During server-side scan execution Phoenix buildsĀ result rows for aggregation 
and state tracking using {{{}ByteUtil.getLargestPossibleRowKeyInRange(){}}}. 
This utility must construct a deterministic synthetic key that falls within the 
active scan's boundaries so that downstream client verification logic accepts 
the payload. In the table's end region, the upper limit is an empty byte array 
({{{}HConstants.EMPTY_END_ROW{}}}), conceptually representing positive infinity 
rather than a literal byte sequence.

Because lexicographical comparison places any non-empty byte array after an 
empty array, the check misinterprets the empty bound as a zero-length floor 
rather than an unbounded ceiling. Consequently, the assertion fails, logs an 
unexpected range error, and returns null. Callers then fall back to degenerate 
keys, such as the start key, stop row, or an empty key, which fail subsequent 
client side range checks and causes valid results to be discarded during 
background workloads like index builds.

The fix makes {{ByteUtil}} consistent with the client side region boundary 
contract defined inĀ {{{}ScanUtil.verifyKeyInScanRange(){}}}. An empty end key 
is treated as an unbounded range, skipping the upper limit comparison entirely.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to