You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2016/01/23 23:07:39 UTC

[jira] [Updated] (PHOENIX-2037) get java.lang.ArrayIndexOutOfBoundsException on a particular query

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

James Taylor updated PHOENIX-2037:
----------------------------------
    Fix Version/s: 4.8.0

> get java.lang.ArrayIndexOutOfBoundsException on a particular query 
> -------------------------------------------------------------------
>
>                 Key: PHOENIX-2037
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2037
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.3.0
>         Environment: Linux lnxx64r6 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
>            Reporter: Sergio Lob
>             Fix For: 4.8.0
>
>
> 1. PROBLEM DESCRIPTION:
> -------------------------------------
> get java.lang.ArrayIndexOutOfBoundsException on a particular query when invoking ResultSet.next().
> The query is:
> SELECT MAX( CAST( RTRIM(T1."F02CHAR_10") AS CHAR(10) ) ) FROM SDLJUNK T1
> 2. THE EXCEPTION CALL STACK TRACE:
> --------------------------------------------------- 
> Exception: java.lang.ArrayIndexOutOfBoundsException
> java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method)
> 	at org.apache.phoenix.schema.KeyValueSchema.toBytes(KeyValueSchema.java:120)
> 	at org.apache.phoenix.schema.KeyValueSchema.toBytes(KeyValueSchema.java:91)
> 	at org.apache.phoenix.expression.aggregator.Aggregators.toBytes(Aggregators.java:109)
> 	at org.apache.phoenix.iterate.BaseGroupedAggregatingResultIterator.next(BaseGroupedAggregatingResultIterator.java:82)
> 	at org.apache.phoenix.iterate.UngroupedAggregatingResultIterator.next(UngroupedAggregatingResultIterator.java:39)
> 	at org.apache.phoenix.jdbc.PhoenixResultSet.next(PhoenixResultSet.java:756)
> 	at repro1.main(repro1.java:90)
> 3. THIS IS THE TEST PROGRAM:
> -------------------------------------------
> /*
>  * It may be freely used, modified, and distributed with no restrictions.
>  */
> import java.sql.Connection;
> import java.sql.DatabaseMetaData;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
> import java.sql.PreparedStatement;
> import java.sql.ResultSetMetaData;
> import java.io.Reader;
> /**
>  */
> public class repro1
> {
>   /**
>    * Main method.
>    * 
>    * @param args
>    *    no arguments required
>    */
>   public static void main(String [] args)
>   {
>     Connection con = null;
>     Statement stmt = null;
>     ResultSet rst = null;
>     String drptab = "DROP TABLE SDLJUNK";
>     String crttab = "CREATE TABLE SDLJUNK(FA01INT INTEGER PRIMARY KEY, F02CHAR_10 CHAR(10))";
>     String instab = "UPSERT INTO SDLJUNK VALUES (1, 'ABC' )";
>     String seltab = "SELECT MAX( CAST( RTRIM(T1.\"F02CHAR_10\") AS CHAR(10) ) ) FROM SDLJUNK T1";
>     try {
>       System.out.println("=================================================");
>       System.out.println("Problem description:");
>       System.out.println("Getting java.lang.ArrayIndexOutOfBoundsException"); 
>       System.out.println("when doing a specific query.                    "); 
>       System.out.println("Failure happens on ResultSet.next() method call."); 
>       System.out.println("=================================================");
>       System.out.println("");
>       // Create new instance of JDBC Driver and make connection.
>       System.out.println("Registering Driver.");
>       Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
>       String url="jdbc:phoenix:cdh5:2181";
>       System.out.println("Making a connection to: "+url);
>       con = DriverManager.getConnection(url, null, null);     
>       System.out.println("Connection successful.\n");
>       try {
>          System.out.println("con.createStatement()");
>          stmt = con.createStatement();
>          System.out.println(drptab);
>          stmt.executeUpdate(drptab);
>          }
>       catch (Exception ex)
>       {	
>         System.out.println("Exception: " + ex);
>       }
>       System.out.println(crttab);
>       stmt.executeUpdate(crttab);
>       System.out.println("preparing: "+instab);
>       PreparedStatement pstmt = con.prepareStatement(instab);
>       System.out.println("executing: "+instab);
>       pstmt.executeUpdate();
>       System.out.println("committing");
>       con.commit();
>   
>       System.out.println("preparing: "+seltab);
>       pstmt = con.prepareStatement(seltab);
>       System.out.println("executing: "+seltab);
>       pstmt.execute();
>       System.out.println("pstmt.getResultSet()");
>       ResultSet rs = pstmt.getResultSet();
>       if (rs != null)
>       {
>         System.out.println("issuing rs.next()");
>         if (rs.next())
>         { 
>           System.out.println("rs.next() returned true");
>         }
>         else
>         { 
>           System.out.println("rs.next() returned false");
>         }
>       }
>       else
>         System.out.println("No records fetched");
>     }
>     catch (Exception ex)
>     {	
>       System.out.println("Exception: " + ex);
>       ex.printStackTrace();
>     }
>     finally
>     {			
>       if (con != null)
>       {	
>         try
>         {	
>           // Close the connection
>           con.close();				
>         }
>         catch (SQLException ex)
>         {	
>           System.out.println("SQLException: " + ex);
>         }
>       }
>     } 
>   }
>   //-------------------------------------------------------------------
>   // dispResultSet
>   // Displays all columns and rows in the given result set
>   //-------------------------------------------------------------------
>   private static void dispResultSet (ResultSet rs)
> 	throws SQLException
>   {
>     int i;
>     // Get the ResultSetMetaData.  This will be used for
>     // the column headings
>     ResultSetMetaData rsmd = rs.getMetaData ();
>     // Get the number of columns in the result set
>     int numCols = rsmd.getColumnCount ();
>     // Display column headings
>     for (i=1; i<=numCols; i++) {
>       if (i > 1) System.out.print(",");
>       System.out.print(rsmd.getColumnLabel(i));
>     }
>     System.out.println("");
>     // Display data, fetching until end of the result set
>     boolean more = rs.next ();
>     while (more) {
>       // Loop through each column, getting the
>       // column data and displaying
>       for (i=1; i<=numCols; i++) {
>         if (i > 1) System.out.print(",");
>           System.out.print(rs.getString(i));
>       }
>       System.out.println("");
>       // Fetch the next result set row
>       more = rs.next ();
>     }
>   }
> }
> 4. THIS IS THE ENVIRONMENT:
> ------------------------------------------
> export JDK_HOME=/usr/java/jdk1.7.0_05
> export JAVA_HOME=/usr/java/jdk1.7.0_05
> export CLASSPATH=.:/qas/phoenix/phoenix-4.3.1-client.jar:/qas/phoenix/slf4j-api-1.7.5.jar
> export PATH=$JDK_HOME/bin:$PATH
> 5. THIS IS THE TEST PROGRAM OUTPUT:
> -------------------------------------------------------
> Picked up _JAVA_OPTIONS: -Xms128m -Xmx256m
> =================================================
> Problem description:
> Getting java.lang.ArrayIndexOutOfBoundsException
> when doing a specific query.                    
> Failure happens on ResultSet.next() method call.
> =================================================
> Registering Driver.
> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> SLF4J: Defaulting to no-operation (NOP) logger implementation
> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
> Making a connection to: jdbc:phoenix:cdh5:2181
> log4j:WARN No appenders could be found for logger (org.apache.hadoop.conf.Configuration.deprecation).
> log4j:WARN Please initialize the log4j system properly.
> log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
> Connection successful.
> con.createStatement()
> DROP TABLE SDLJUNK
> CREATE TABLE SDLJUNK(FA01INT INTEGER PRIMARY KEY, F02CHAR_10 CHAR(10))
> preparing: UPSERT INTO SDLJUNK VALUES (1, 'ABC' )
> executing: UPSERT INTO SDLJUNK VALUES (1, 'ABC' )
> committing
> preparing: SELECT MAX( CAST( RTRIM(T1."F02CHAR_10") AS CHAR(10) ) ) FROM SDLJUNK T1
> executing: SELECT MAX( CAST( RTRIM(T1."F02CHAR_10") AS CHAR(10) ) ) FROM SDLJUNK T1
> pstmt.getResultSet()
> issuing rs.next()
> Exception: java.lang.ArrayIndexOutOfBoundsException
> java.lang.ArrayIndexOutOfBoundsException
> 	at java.lang.System.arraycopy(Native Method)
> 	at org.apache.phoenix.schema.KeyValueSchema.toBytes(KeyValueSchema.java:120)
> 	at org.apache.phoenix.schema.KeyValueSchema.toBytes(KeyValueSchema.java:91)
> 	at org.apache.phoenix.expression.aggregator.Aggregators.toBytes(Aggregators.java:109)
> 	at org.apache.phoenix.iterate.BaseGroupedAggregatingResultIterator.next(BaseGroupedAggregatingResultIterator.java:82)
> 	at org.apache.phoenix.iterate.UngroupedAggregatingResultIterator.next(UngroupedAggregatingResultIterator.java:39)
> 	at org.apache.phoenix.jdbc.PhoenixResultSet.next(PhoenixResultSet.java:756)
> 	at repro1.main(repro1.java:90)



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