[ 
https://issues.apache.org/jira/browse/PHOENIX-5793?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17141726#comment-17141726
 ] 

Chen Feng commented on PHOENIX-5793:
------------------------------------

[~comnetwork] Sorry for late response.
In our practice, when the result must be null, we no longer call 
future.cancel() to close the unfinished iterator.  Because there would be a bug 
in BaseResultIterators.close() as follows. 

```
if (future.cancel(false)) {   
    cancelledWork = true; 
} else {  
    // get into this branch because the future has been cancelled 
    futuresToClose.add(future);
}
...
for (Future<PeekingResultIterator> future : futuresToClose) {
  PeekingResultIterator iterator = future.get();
  iterator.close();  // we meet exception because iterator.close() will be 
called twice.
}
```

> Support parallel init and fast null return for SortMergeJoinPlan.
> -----------------------------------------------------------------
>
>                 Key: PHOENIX-5793
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5793
>             Project: Phoenix
>          Issue Type: Improvement
>    Affects Versions: 5.0.0
>            Reporter: Chen Feng
>            Assignee: Chen Feng
>            Priority: Minor
>             Fix For: 5.1.0, 4.16.0
>
>         Attachments: PHOENIX-5793-v2.patch, PHOENIX-5793-v3.patch, 
> PHOENIX-5793-v4.patch, PHOENIX-5793-v5.patch, PHOENIX-5793_v1-4.x.patch
>
>
> For a join sql like A join B. The implementation of SortMergeJoinPlan 
> currently inits the two iterators A and B one by one.
> By initializing A and B in parallel, we can improve performance in two 
> aspects.
> 1) By overlapping the time in initializing.
> 2) If one child query is null, the other child query can be canceled since 
> the final result must be null.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to