You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2018/09/24 15:28:39 UTC

[34/50] [abbrv] phoenix git commit: PHOENIX-4864 Fix NullPointerException while Logging some DDL Statements

PHOENIX-4864 Fix NullPointerException while Logging some DDL Statements


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/46f50d29
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/46f50d29
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/46f50d29

Branch: refs/heads/omid2
Commit: 46f50d29435e29d35dc5cca0f9c68711b22c8308
Parents: 79e8337
Author: Ashutosh Parekh <pa...@gmail.com>
Authored: Thu Aug 23 12:11:23 2018 -0700
Committer: Karan Mehta <ka...@gmail.com>
Committed: Fri Aug 24 17:35:46 2018 -0700

----------------------------------------------------------------------
 .../monitoring/PhoenixLoggingMetricsIT.java     | 42 +++++++++++++++++++-
 .../jdbc/LoggingPhoenixPreparedStatement.java   |  5 ++-
 .../phoenix/jdbc/LoggingPhoenixStatement.java   |  5 ++-
 3 files changed, 49 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/46f50d29/phoenix-core/src/it/java/org/apache/phoenix/monitoring/PhoenixLoggingMetricsIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/monitoring/PhoenixLoggingMetricsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/monitoring/PhoenixLoggingMetricsIT.java
index 7e56902..5d5524c 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/monitoring/PhoenixLoggingMetricsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/monitoring/PhoenixLoggingMetricsIT.java
@@ -20,6 +20,7 @@ package org.apache.phoenix.monitoring;
 import com.google.common.collect.Maps;
 import org.apache.phoenix.jdbc.LoggingPhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixMetricsLog;
+import org.apache.phoenix.jdbc.LoggingPhoenixResultSet;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -69,6 +70,35 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT {
     }
 
     @Test
+    public void testResultSetTypeForQueries() throws Exception {
+        String tableName3 = generateUniqueName();
+
+        String create = "CREATE TABLE " + tableName3 + " (K INTEGER PRIMARY KEY)";
+        assertTrue(executeAndGetResultSet(create) == null);
+
+        String upsert = "UPSERT INTO " + tableName3 + " VALUES (42)";
+        assertTrue(executeAndGetResultSet(upsert) == null);
+
+        String select = "SELECT * FROM " + tableName3;
+        assertTrue(executeAndGetResultSet(select) instanceof LoggingPhoenixResultSet);
+
+        String createView = "CREATE VIEW TEST_VIEW (K INTEGER) AS SELECT * FROM " + tableName3;
+        assertTrue(executeAndGetResultSet(createView) == null);
+
+        String createIndex = "CREATE INDEX TEST_INDEX ON " + tableName3 + " (K)";
+        assertTrue(executeAndGetResultSet(createIndex) == null);
+
+        String dropIndex = "DROP INDEX TEST_INDEX ON " + tableName3;
+        assertTrue(executeAndGetResultSet(dropIndex) == null);
+
+        String dropView = "DROP VIEW TEST_VIEW";
+        assertTrue(executeAndGetResultSet(dropView) == null);
+
+        String dropTable = "DROP TABLE " + tableName3;
+        assertTrue(executeAndGetResultSet(dropTable) == null);
+    }
+
+    @Test
     public void testPhoenixMetricsLoggedOnCommit() throws Exception {
         // run SELECT to verify read metrics are logged
         String query = "SELECT * FROM " + tableName1;
@@ -134,12 +164,22 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT {
                 mutationReadMetricsMap.size() == 0);
     }
 
+    private ResultSet executeAndGetResultSet(String query) throws Exception {
+        Statement stmt = loggedConn.createStatement();
+        stmt.execute(query);
+        return stmt.getResultSet();
+    }
+
     private void verifyQueryLevelMetricsLogging(String query) throws SQLException {
         Statement stmt = loggedConn.createStatement();
         ResultSet rs = stmt.executeQuery(query);
+        assertTrue(rs instanceof LoggingPhoenixResultSet);
+        int rowsRetrievedCounter = 0;
         while (rs.next()) {
+            rowsRetrievedCounter++;
         }
         rs.close();
+        assertTrue(rowsRetrievedCounter == NUM_ROWS);
         assertTrue("Read metrics for not found for " + tableName1,
                 requestReadMetricsMap.get(tableName1).size() > 0);
         assertTrue("Logged query doesn't match actual query", loggedSql.equals(query));
@@ -192,4 +232,4 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT {
             }
         });
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/phoenix/blob/46f50d29/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixPreparedStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixPreparedStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixPreparedStatement.java
index 952e3fd..dbeea0d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixPreparedStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixPreparedStatement.java
@@ -45,7 +45,10 @@ public class LoggingPhoenixPreparedStatement extends DelegatePreparedStatement {
 
     @Override
     public ResultSet getResultSet() throws SQLException {
-        return new LoggingPhoenixResultSet(super.getResultSet(), phoenixMetricsLog, sql);
+        // Re-use the cached ResultSet value since call to getResultSet() is not idempotent
+        ResultSet resultSet = super.getResultSet();
+        return (resultSet == null) ? null : new LoggingPhoenixResultSet(resultSet,
+                phoenixMetricsLog, sql);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/46f50d29/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixStatement.java
index f9abe6a..de33893 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixStatement.java
@@ -51,7 +51,10 @@ public class LoggingPhoenixStatement extends DelegateStatement {
 
     @Override
     public ResultSet getResultSet() throws SQLException {
-        return new LoggingPhoenixResultSet(super.getResultSet(), phoenixMetricsLog, this.sql);
+        // Re-use the cached ResultSet value since call to getResultSet() is not idempotent
+        ResultSet resultSet = super.getResultSet();
+        return (resultSet == null) ? null : new LoggingPhoenixResultSet(resultSet,
+                phoenixMetricsLog, sql);
     }
     
     @Override