Maryann Xue created PHOENIX-1456:
------------------------------------

             Summary: Incorrect query results caused by reusing buffers in 
SpoolingResultIterator
                 Key: PHOENIX-1456
                 URL: https://issues.apache.org/jira/browse/PHOENIX-1456
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 3.0.0, 4.0.0, 5.0.0
            Reporter: Maryann Xue


The SpoolingResultIterator#OnDiskResultIterator switches between two 
pre-allocated buffers as reading buffers for the tuple result, based on the 
assumption that the outer ResultIterator consumes the returned tuple in a 
streaming fashion and will never look back/forward outside 2-tuple span.
However, some usages fail this assumption:
1. OrderedResultIterator: It adds all tuples into its MappedByteBufferQueue on 
initialization, which is maintained by a priority queue before threshold is 
reached and spooling to files. 
This is not revealed in most test cases because, most importantly, 
OrderedResultIterator is not commonly used on clientside (only 
ClientProcessingPlan does)
2. Child/parent hash-join optimization, which uses a list of PK values to 
create an InListExpression.

It might be easy to walk around the second usage here though, but may need more 
consideration on the first one.

I am thinking to take away SpoolingResultIterator at all if there is an outer 
ResultIterator being OrderedResultIterator.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to