Sergio Lob created PHOENIX-2037:
-----------------------------------

             Summary: 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



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)

Reply via email to