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

Rajesh Balamohan updated TEZ-2405:
----------------------------------
    Attachment: TEZ-2405.1.patch

[~gopalv], [~sseth] - Please review.  

This wasn't a problem in hive as it was using TezBytesComparator and internally 
it handled the boundary conditions of the buf lengths.  With Pig, the 
comparison logic is different (for e.g 
https://github.com/apache/pig/blob/f1e8bb158f23d12b17ce2d0d949773ef9f93c170/src/org/apache/pig/data/BinInterSedes.java#L725)
 causing IndexOutOfBoundsException which later causes the NPE.

Attaching a simple patch with testcase.  

> PipelinedSorter can throw NPE with custom compartor
> ---------------------------------------------------
>
>                 Key: TEZ-2405
>                 URL: https://issues.apache.org/jira/browse/TEZ-2405
>             Project: Apache Tez
>          Issue Type: Bug
>            Reporter: Rajesh Balamohan
>            Assignee: Rajesh Balamohan
>            Priority: Critical
>         Attachments: TEZ-2405.1.patch
>
>
> If custom comparators are used,  PipelinedSorter can throw NPE depending on 
> custom comparator implementations.
> {noformat}
> ], TaskAttempt 1 failed, info=[Error: Failure while running 
> task:java.lang.NullPointerException
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$SpanIterator.compareTo(PipelinedSorter.java:837)
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$SpanIterator.compareTo(PipelinedSorter.java:767)
>       at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:637)
>       at java.util.PriorityQueue.siftUp(PriorityQueue.java:629)
>       at java.util.PriorityQueue.offer(PriorityQueue.java:329)
>       at java.util.PriorityQueue.add(PriorityQueue.java:306)
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$SpanMerger.add(PipelinedSorter.java:996)
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$SpanMerger.next(PipelinedSorter.java:1065)
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$PartitionFilter.next(PipelinedSorter.java:936)
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter.spill(PipelinedSorter.java:366)
>       at 
> org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter.flush(PipelinedSorter.java:406)
>       at 
> org.apache.tez.runtime.library.output.OrderedPartitionedKVOutput.close(OrderedPartitionedKVOutput.java:183)
>       at 
> org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.close(LogicalIOProcessorRuntimeTask.java:355)
>       at 
> org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable$1.run(TezTaskRunner.java:181)
>       at 
> org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable$1.run(TezTaskRunner.java:171)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at javax.security.auth.Subject.doAs(Subject.java:415)
>       at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
>       at 
> org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable.callInternal(TezTaskRunner.java:171)
>       at 
> org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable.callInternal(TezTaskRunner.java:167)
>       at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}



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

Reply via email to