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

Rahul Challapalli closed DRILL-2151.
------------------------------------

Verified and added the below testcase

Functional/Passing/tpch0.01/parquet/4way_lfe_DRILL-2151.e_tsv

> VariableLengthVector.copyFromSafe() unnecessary sets the offsetVector
> ---------------------------------------------------------------------
>
>                 Key: DRILL-2151
>                 URL: https://issues.apache.org/jira/browse/DRILL-2151
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Execution - Data Types
>            Reporter: Deneche A. Hakim
>            Assignee: Parth Chandra
>            Priority: Critical
>             Fix For: 0.8.0
>
>         Attachments: DRILL-2151.1.patch.txt
>
>
> The following method defined in {{VariableLengthVectors.java}}:
> {code}
> public boolean copyFromSafe(int fromIndex, int thisIndex, 
> ${minor.class}Vector from){
>     int start = from.offsetVector.getAccessor().get(fromIndex);
>     int end =   from.offsetVector.getAccessor().get(fromIndex+1);
>     int len = end - start;
>     
>     int outputStart = 
> offsetVector.data.get${(minor.javaType!type.javaType)?cap_first}(thisIndex * 
> ${type.width});
>     
>     if(data.capacity() < outputStart + len) {
>         reAlloc();
>     }
>     offsetVector.getMutator().setSafe(thisIndex + 1, outputStart + len);
>     from.data.getBytes(start, data, outputStart, len);
>     
>     offsetVector.getMutator().setSafe( (thisIndex+1) * ${type.width}, 
> outputStart + len);
>     return true;
> }
> {code}
> at the very end, it multiplies {{thisIndex+1}} by the type width, but the 
> mutator will also multiply the index by the type width. This line should be 
> removed because the offset is already set correctly in the same method.
> One possible query where this actually causes problem is the one defined in 
> DRILL-1588 (on TPCH SF 1):
> {noformat}
> // set slice target to 1 to ensure exchanges are used
> 0: jdbc:drill:zk=local> alter session set `planner.slice_target` = 1;
> +------------+------------+
> |     ok     |  summary   |
> +------------+------------+
> | true       | planner.slice_target updated. |
> +------------+------------+
> 1 row selected (0.1 seconds)
> 0: jdbc:drill:zk=local> select * from lineitem l left outer join orders o on 
> (l.l_orderkey = o.o_orderkey) left outer join  customer c on (l.l_orderkey = 
> c.c_custkey) left outer join  nation n on (l.l_partkey = n.n_nationkey) left 
> outer join  region r  on (l.l_suppkey = r.r_regionkey) limit 10;
> {noformat}
> Here is a copy of the execution in the logs:
> {noformat}
> java.lang.IndexOutOfBoundsException: index: 60496, length: 4 (expected: 
> range(0, 32768))
> at io.netty.buffer.DrillBuf.checkIndexD(DrillBuf.java:156) 
> ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:4.0.24.Final]
> at io.netty.buffer.DrillBuf.chk(DrillBuf.java:178) 
> ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:4.0.24.Final]
> at io.netty.buffer.DrillBuf.setInt(DrillBuf.java:473) 
> ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:4.0.24.Final]
> at org.apache.drill.exec.vector.UInt4Vector$Mutator.set(UInt4Vector.java:359) 
> ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.vector.UInt4Vector$Mutator.setSafe(UInt4Vector.java:366)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.vector.VarBinaryVector.copyFromSafe(VarBinaryVector.java:259)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.vector.NullableVarBinaryVector.copyFromSafe(NullableVarBinaryVector.java:301)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.test.generated.HashJoinProbeGen28.projectBuildRecord(HashJoinProbeTemplate.java:718)
>  ~[na:na]
> at 
> org.apache.drill.exec.test.generated.HashJoinProbeGen28.executeProbePhase(HashJoinProbeTemplate.java:173)
>  ~[na:na]
> at 
> org.apache.drill.exec.test.generated.HashJoinProbeGen28.probeAndProject(HashJoinProbeTemplate.java:223)
>  ~[na:na]
> at 
> org.apache.drill.exec.physical.impl.join.HashJoinBatch.innerNext(HashJoinBatch.java:227)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:142)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.physical.impl.validate.IteratorValidatorBatchIterator.next(IteratorValidatorBatchIterator.java:118)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:67) 
> ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.physical.impl.partitionsender.PartitionSenderRootExec.innerNext(PartitionSenderRootExec.java:133)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:57) 
> ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:110)
>  ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> org.apache.drill.exec.work.WorkManager$RunnableWrapper.run(WorkManager.java:254)
>  [drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  [na:1.7.0_71]
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  [na:1.7.0_71]
> at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
> {noformat}



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

Reply via email to