[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-20 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15109047#comment-15109047
 ] 

Kevin Liew commented on CALCITE-1052:
-

We upgraded our test servers to Phoenix 4.7.0 on Calcite 1.5 and we can no 
longer reproduce this bug using the 4.7.0 thin client, though we will have to 
upgrade our driver to use the latest Avatica protocol. Thanks

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: phoenix-root-server.log, test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ('One','1');
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.INTEGER_TABLE VALUES ('Two',2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-15 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15102160#comment-15102160
 ] 

Kevin Liew commented on CALCITE-1052:
-

I did some reading and it looks like these errors are due to our driver using 
JSON whereas newer versions of Phoenix use protocol buffers for communication

https://issues.apache.org/jira/browse/CALCITE-840
https://issues.apache.org/jira/browse/PHOENIX-2359

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: phoenix-root-server.log, test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ('One','1');
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.INTEGER_TABLE VALUES ('Two',2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = 

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-15 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15102167#comment-15102167
 ] 

Josh Elser commented on CALCITE-1052:
-

bq. I did some reading and it looks like these errors are due to our driver 
using JSON whereas newer versions of Phoenix use protocol buffers for 
communication

No, you would never have gotten into that code if you sent JSON and the server 
was expecting protobuf.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: phoenix-root-server.log, test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ('One','1');
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.INTEGER_TABLE VALUES ('Two',2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int 

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-15 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15102402#comment-15102402
 ] 

Kevin Liew commented on CALCITE-1052:
-

We get that error when using the 4.6.0 release thin-client against the 4.7.0 
snapshot in the Docker image you emailed to me. You may have been testing the 
4.7.0 thin-client against the 4.7.0 server, which gives a different error. 

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: phoenix-root-server.log, test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ('One','1');
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.INTEGER_TABLE VALUES ('Two',2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-15 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15102464#comment-15102464
 ] 

Josh Elser commented on CALCITE-1052:
-

Alright, I still can't reproduce what you say you're seeing, so have a look at 
what I did.

Docker image: https://github.com/joshelser/docker-phoenix

Client repo: https://github.com/joshelser/phoenix-queryserver-jdbc-client

{{docker run -P -it joshelser/apache-phoenix}}

then, follow the instructions on the Github page for the client repo using the 
URL for the QueryServer (whose port should get mapped out of the docker 
container). For some reason, I had to explicitly set the SERIALIZATION to be 
protobuf in the URL (the {{;serialization=PROTOBUF}} bit). I thought the thin 
driver should be defaulting to that already but perhaps I'm mistaken.

Let me know if this works for you.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: phoenix-root-server.log, test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ('One','1');
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.INTEGER_TABLE VALUES ('Two',2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-14 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15098450#comment-15098450
 ] 

Josh Elser commented on CALCITE-1052:
-

[~kliew], I'm not having any success with your docker container so far. It 
seems to hang before ever starting PQS.

Can you drop me an email? (see the addr on my JIRA acct).

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>  

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-14 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15098643#comment-15098643
 ] 

Kevin Liew commented on CALCITE-1052:
-

Hi Josh. I have found that the docker container will hang when there is less 
than about 4GB of RAM or otherwise insufficient resources to start the hadoop 
services. I'll email you.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>  

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-13 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15096781#comment-15096781
 ] 

Kevin Liew commented on CALCITE-1052:
-

We generate unique connection IDs as well. 

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-13 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15096770#comment-15096770
 ] 

Kevin Liew commented on CALCITE-1052:
-

This bug only appears when using Avatica's 'prepare' and 'fetch'. Your script 
will call 'prepareAndExecute'. I used parameter statements to call prepare and 
fetch. I will package and upload my Eclipse projects and test server 
environment shortly.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-13 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15096962#comment-15096962
 ] 

Josh Elser commented on CALCITE-1052:
-

No, I take it back. Even then, a unique connection ID on the client should have 
disallowed this.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>   System.out.println(column1);
>   }
>

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-13 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15096822#comment-15096822
 ] 

Josh Elser commented on CALCITE-1052:
-

Ahh, good catch. I will experiment some more while you package things up. 
Thanks.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>   System.out.println(column1);
>   }
>   }
>   }
> 

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-13 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15096936#comment-15096936
 ] 

Josh Elser commented on CALCITE-1052:
-

Actually, you may just be running into CALCITE-912. I'm trying to refresh 
myself on how this previously worked.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>   System.out.println(column1);
>   

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-13 Thread Kevin Liew (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15097127#comment-15097127
 ] 

Kevin Liew commented on CALCITE-1052:
-

What adaptations did you make? We are consistently seeing this bug whenever we 
run concurrent continuous integration tests. It may be a server configuration 
issue but the Docker image replicates our environment. 

I haven't had success manually upgrading Phoenix before. I get errors when I 
try to connect to the queryserver after replacing the jars. 

ie. 
{code:java}java.lang.IllegalArgumentException: Cannot find parser for 
at 
org.apache.calcite.avatica.remote.ProtobufTranslationImpl.getParserForRequest(ProtobufTranslationImpl.java:170)
{code}

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>  Components: avatica
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
> Attachments: test.zip
>
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = 

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-12 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15094627#comment-15094627
 ] 

Josh Elser commented on CALCITE-1052:
-

bq. We are able to reproduce this issue while running the two JDBC applications 
on separate machines

That is.. very interesting. Let me look into this. I thought the current use of 
our connectionId and statementId should prevent this from happening. 

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   int column1 = rs.getInt("column1");
>   if (column1 != 2)
>   {
>

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-12 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15095176#comment-15095176
 ] 

Josh Elser commented on CALCITE-1052:
-

bq. I'll try updating Phoenix and Calcite to their most recent snapshots and 
re-running to check for a regression

Just updated Phoenix and Calcite and am still not seeing this.

bq. If you can create a test case which shows this actually happening, that 
would extremely helpful

I should also say that anything I can run to reproduce this would work. It does 
not have to be within the confines of a unit test.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>   ResultSet rs = stmt.executeQuery();
>   
>   while (rs.next()) {
>   String column1 = rs.getString("column1");
>   if (!column1.equals("1"))
>   {
>   System.out.println(column1);
>   }
>   }
>   }
>   
> //conn.close();
>   }
>   
> }
> {code}
> 2. select an integer by parameterized statement resulting in
> SELECT Column1 FROM SEN.INTEGER_TABLE WHERE KeyColumn = 'Two'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   
>   String sqlStmt = "SELECT Column1 FROM SEN.INTEGER_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "Two");
>   ResultSet rs = stmt.executeQuery();
>   
>

[jira] [Commented] (CALCITE-1052) Phoenix queryserver sends result set in response to the wrong request when there are concurrent requests

2016-01-12 Thread Josh Elser (JIRA)

[ 
https://issues.apache.org/jira/browse/CALCITE-1052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15095098#comment-15095098
 ] 

Josh Elser commented on CALCITE-1052:
-

I've hacked together a little script locally based on what you said here:

{noformat}
==> create_integer_table.sql <==
drop table if exists integer_table;
create table integer_table (id integer not null primary key, column1 integer);
UPSERT INTO INTEGER_TABLE VALUES(1, 1);
UPSERT INTO INTEGER_TABLE VALUES(2, 2);
UPSERT INTO INTEGER_TABLE VALUES(3, 3);

==> create_string_table.sql <==
drop table if exists varchar_table;
create table varchar_table (id integer not null primary key, column1 
varchar(50));
UPSERT INTO VARCHAR_TABLE VALUES(1, 'str_1');
UPSERT INTO VARCHAR_TABLE VALUES(2, 'str_2');
UPSERT INTO VARCHAR_TABLE VALUES(3, 'str_3');
{noformat}

I inserted 50k records this way (upserts 4 through 4 omitted for obv 
reasons).

I then ran two loops querying for records in the tables via sqlline-thin.py:

{noformat}
==> query_integer.sql <==
SELECT column1 FROM INTEGER_TABLE where id = 5000;
SELECT column1 FROM INTEGER_TABLE where id = 5000;
SELECT column1 FROM INTEGER_TABLE where id = 5000;
SELECT column1 FROM INTEGER_TABLE where id = 5000;
SELECT column1 FROM INTEGER_TABLE where id = 5000;
...

==> query_string.sql <==
SELECT column1 FROM VARCHAR_TABLE where id = 5000;
SELECT column1 FROM VARCHAR_TABLE where id = 5000;
SELECT column1 FROM VARCHAR_TABLE where id = 5000;
SELECT column1 FROM VARCHAR_TABLE where id = 5000;
SELECT column1 FROM VARCHAR_TABLE where id = 5000;
...
{noformat}

{noformat}
while true; do /usr/local/lib/phoenix/bin/sqlline-thin.py ~/query_string.sql; 
done
{noformat}

{noformat}
while true; do /usr/local/lib/phoenix/bin/sqlline-thin.py ~/query_integer.sql; 
done
{noformat}

Given what you described, [~kliew], I should expected to see "5000" showing up 
while querying VARCHAR_TABLE and "str_5000" while querying INTEGER_TABLE (or 
some errors casting "str_5000" into an integer). However, I did not see this. 
I'll try updating Phoenix and Calcite to their most recent snapshots and 
re-running to check for a regression, but I am not anticipating seeing what you 
describe.

If you can create a test case which shows this actually happening, that would 
extremely helpful. Right now, I can only assume that for your own driver, you 
did not create unique connectionIDs. I'm still baffled about seeing this with 
the JDBC driver as you said though.

> Phoenix queryserver sends result set in response to the wrong request when 
> there are concurrent requests
> 
>
> Key: CALCITE-1052
> URL: https://issues.apache.org/jira/browse/CALCITE-1052
> Project: Calcite
>  Issue Type: Bug
>Reporter: Kevin Liew
>Assignee: Josh Elser
>Priority: Critical
>  Labels: phoenix, queryserver
>
> Create two tables
> {code:sql}
> DROP TABLE IF EXISTS SEN.VARCHAR_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.VARCHAR_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 VARCHAR(510));
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("One","1");
> {code}
> {code:sql}
> DROP TABLE IF EXISTS SEN.INTEGER_TABLE;
> CREATE TABLE IF NOT EXISTS SEN.INTEGER_TABLE(
>   KeyColumn VARCHAR(255) PRIMARY KEY,
>   Column1 INTEGER);
> UPSERT INTO SEN.VARCHAR_TABLE VALUES ("Two",2);
> {code}
> Running these two programs results in several crashes. 
> 1. select a varchar by parameterized statement resulting in
> SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE KeyColumn = 'One'
> {code:java}
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.PreparedStatement;
> import java.sql.Statement;
> public class Hello_World {
>   public static void main(String[] args) throws SQLException {
>   try {
> Class.forName("org.apache.phoenix.queryserver.client.Driver");
> } catch (ClassNotFoundException e) {
> System.out.println("Where is your PhoenixDriver");
> e.printStackTrace();
> return;
> }
>   Connection conn = 
> DriverManager.getConnection("jdbc:phoenix:thin:url=http://192.168.222.52:8765;);
>   conn.setAutoCommit(true);
>   String sqlStmt = "SELECT Column1 FROM SEN.VARCHAR_TABLE WHERE 
> KeyColumn = ?";
>   System.out.println("SQL Statement:\n\t" + sqlStmt);
>   
>   while(true)
>   {
>   ResultSet rset = null;
>   
>   //Statement stmt = conn.createStatement();
>   PreparedStatement stmt = conn.prepareStatement(sqlStmt);
>   stmt.setString(1, "One");
>