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

Khurram Faraaz updated DRILL-3849:
----------------------------------
    Fix Version/s: 1.2.0

> IOB Exception : ORDER BY ROW_KEY over date_epoch_be encoded data
> ----------------------------------------------------------------
>
>                 Key: DRILL-3849
>                 URL: https://issues.apache.org/jira/browse/DRILL-3849
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Execution - Flow
>    Affects Versions: 1.2.0
>         Environment: 4 node cluster CentOS
>            Reporter: Khurram Faraaz
>            Assignee: Smidth Panchamia
>             Fix For: 1.2.0
>
>
> Order by ROW_KEY that has DATE type data results in IOB Exception where 
> queried from Drill. Note that there is a duplicate in ROW_KEY.
> {code}
> Drill master commitID : b9afcf8f
> [root@centos-01 rowkey_filter_pushdown]# hbase version
> 2015-09-29 04:50:04,510 INFO  [main] util.VersionInfo: HBase 
> 0.98.12-mapr-1506-SNAPSHOT
> 2015-09-29 04:50:04,511 INFO  [main] util.VersionInfo: Subversion 
> git://5e8a86c5195a/root/opensource/mapr-hbase-0.98/dl/mapr-hbase-0.98 -r 
> 34eede8b74911af09661867c07440888b648c3ba
> 2015-09-29 04:50:04,511 INFO  [main] util.VersionInfo: Compiled by root on 
> Tue Jul 21 00:24:58 UTC 2015
> {code}
> A regular select without order by on row_key gives correct results.
> {code}
> 0: jdbc:drill:schema=dfs.tmp> SELECT 
> CONVERT_FROM(BYTE_SUBSTR(row_key,1,8),'date_epoch_be') AS RK, 
> CONVERT_FROM(T.`colfam1`.`qual1`, 'UTF8') AS cf1 from dt_Tbl T;
> +-------------+-------+
> |     RK      |  cf1  |
> +-------------+-------+
> | 2014-08-25  | val1  |
> | 2015-09-26  | val5  |
> | 2015-09-28  | val4  |
> | 2015-09-29  | val3  |
> | 2015-09-29  | val2  |
> +-------------+-------+
> 5 rows selected (0.79 seconds)
> {code}
> However when encoding 'date_epoch_be' is used in the query and ORDER BY is 
> used on ROW_KEY we see the IOB Exception.
> {code}
> 0: jdbc:drill:schema=dfs.tmp> SELECT 
> CONVERT_FROM(BYTE_SUBSTR(row_key,1,8),'date_epoch_be') AS RK, 
> CONVERT_FROM(T.`colfam1`.`qual1`, 'UTF8') AS cf1 from dt_Tbl T ORDER BY 
> ROW_KEY;
> Error: SYSTEM ERROR: IndexOutOfBoundsException: DrillBuf(ridx: 0, widx: 133, 
> cap: 133/133, unwrapped: SlicedByteBuf(ridx: 0, widx: 133, cap: 133/133, 
> unwrapped: UnsafeDirectLittleEndian(PooledUnsafeDirectByteBuf(ridx: 0, widx: 
> 0, cap: 392/392)))).slice(89, 64)
> Fragment 2:0
> [Error Id: bca3c7dd-e5cc-4a5a-8616-231fa73c73c9 on centos-02.qa.lab:31010] 
> (state=,code=0)
> 0: jdbc:drill:schema=dfs.tmp>
> {code}
> Stack trace from drillbit.log for the failing query
> {code}
> 2015-09-29 04:33:04,295 [29f5eb81-5696-49fd-b86e-788ed103fec9:frag:2:0] ERROR 
> o.a.d.e.w.fragment.FragmentExecutor - SYSTEM ERROR: 
> IndexOutOfBoundsException: DrillBuf(ridx: 0, widx: 133, cap: 133/133, 
> unwrapped: SlicedByteBuf(ridx: 0, widx: 133, cap: 133/133, unwrapped: 
> UnsafeDirectLittleEndian(PooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 
> 392/392)))).slice(89, 64)
> Fragment 2:0
> [Error Id: bca3c7dd-e5cc-4a5a-8616-231fa73c73c9 on centos-02.qa.lab:31010]
> org.apache.drill.common.exceptions.UserException: SYSTEM ERROR: 
> IndexOutOfBoundsException: DrillBuf(ridx: 0, widx: 133, cap: 133/133, 
> unwrapped: SlicedByteBuf(ridx: 0, widx: 133, cap: 133/133, unwrapped: 
> UnsafeDirectLittleEndian(PooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 
> 392/392)))).slice(89, 64)
> Fragment 2:0
> [Error Id: bca3c7dd-e5cc-4a5a-8616-231fa73c73c9 on centos-02.qa.lab:31010]
>         at 
> org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:524)
>  ~[drill-common-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.sendFinalState(FragmentExecutor.java:323)
>  [drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:178)
>  [drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:292)
>  [drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.common.SelfCleaningRunnable.run(SelfCleaningRunnable.java:38)
>  [drill-common-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  [na:1.7.0_45]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  [na:1.7.0_45]
>         at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
> Caused by: java.lang.IndexOutOfBoundsException: DrillBuf(ridx: 0, widx: 133, 
> cap: 133/133, unwrapped: SlicedByteBuf(ridx: 0, widx: 133, cap: 133/133, 
> unwrapped: UnsafeDirectLittleEndian(PooledUnsafeDirectByteBuf(ridx: 0, widx: 
> 0, cap: 392/392)))).slice(89, 64)
>         at io.netty.buffer.DrillBuf.<init>(DrillBuf.java:115) 
> ~[drill-java-exec-1.2.0-SNAPSHOT.jar:4.0.27.Final]
>         at io.netty.buffer.DrillBuf.<init>(DrillBuf.java:105) 
> ~[drill-java-exec-1.2.0-SNAPSHOT.jar:4.0.27.Final]
>         at io.netty.buffer.DrillBuf.slice(DrillBuf.java:348) 
> ~[drill-java-exec-1.2.0-SNAPSHOT.jar:4.0.27.Final]
>         at 
> org.apache.drill.exec.record.RecordBatchLoader.load(RecordBatchLoader.java:102)
>  ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.unorderedreceiver.UnorderedReceiverBatch.next(UnorderedReceiverBatch.java:186)
>  ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:83) 
> ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.partitionsender.PartitionSenderRootExec.innerNext(PartitionSenderRootExec.java:145)
>  ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:73) 
> ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor$1.run(FragmentExecutor.java:258)
>  ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor$1.run(FragmentExecutor.java:252)
>  ~[drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at java.security.AccessController.doPrivileged(Native Method) 
> ~[na:1.7.0_45]
>         at javax.security.auth.Subject.doAs(Subject.java:415) ~[na:1.7.0_45]
>         at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1566)
>  ~[hadoop-common-2.5.1-mapr-1503.jar:na]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:252)
>  [drill-java-exec-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         ... 4 common frames omitted
> {code}
> Snippet used to insert data into base table
> {code}
> Date dt1= new Date(1408924800000L);
>         byte[] rowKey1 = ByteBuffer.allocate(8) 
> .putLong(dt1.getTime()).array();
>         // getTime() will convert date into a `long'
>         Put p = new Put(rowKey1);
>         
> p.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val1"));
>         table.put(p);
>         Date dt2= new Date(1443500086094L);
>         byte[] rowKey2 = ByteBuffer.allocate(8) 
> .putLong(dt2.getTime()).array();
>         // getTime() will convert date into a `long'
>         p = new Put(rowKey2);
>         
> p.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val2"));
>         table.put(p);
>         Date dt3= new Date(1443491446094L);
>         byte[] rowKey3 = ByteBuffer.allocate(8) 
> .putLong(dt3.getTime()).array();
>         // getTime() will convert date into a `long'
>         p = new Put(rowKey3);
>         
> p.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val3"));
>         table.put(p);
>         Date dt4= new Date(1443413686094L);
>         byte[] rowKey4 = ByteBuffer.allocate(8) 
> .putLong(dt4.getTime()).array();
>         // getTime() will convert date into a `long'
>         p = new Put(rowKey4);
>         
> p.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val4"));
>         table.put(p);
>         Date dt5= new Date(1443240886094L);
>         byte[] rowKey5 = ByteBuffer.allocate(8) 
> .putLong(dt5.getTime()).array();
>         // getTime() will convert date into a `long'
>         p = new Put(rowKey5);
>         
> p.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val5"));
>         table.put(p);
> {code}



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

Reply via email to