PHOENIX-4853 Add sql statement to PhoenixMetricsLog interface for query level metrics logging
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/9d07afa4 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/9d07afa4 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/9d07afa4 Branch: refs/heads/4.x-cdh5.15 Commit: 9d07afa44fc49fc6b6c60cf6194b12e1f325d667 Parents: e52fac1 Author: Karan Mehta <karanmeht...@gmail.com> Authored: Fri Aug 17 21:02:08 2018 +0100 Committer: Pedro Boado <pbo...@apache.org> Committed: Wed Oct 17 22:49:38 2018 +0100 ---------------------------------------------------------------------- .../monitoring/PhoenixLoggingMetricsIT.java | 15 +++++++++--- .../phoenix/jdbc/LoggingPhoenixConnection.java | 16 ++++++------- .../jdbc/LoggingPhoenixPreparedStatement.java | 13 +++++++---- .../phoenix/jdbc/LoggingPhoenixResultSet.java | 10 ++++---- .../phoenix/jdbc/LoggingPhoenixStatement.java | 24 ++++++++++++++++---- .../apache/phoenix/jdbc/PhoenixMetricsLog.java | 6 ++--- 6 files changed, 56 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/9d07afa4/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 02640e7..97b2c5d 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 @@ -43,6 +43,7 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT { private String tableName1; private String tableName2; private LoggingPhoenixConnection loggedConn; + private String loggedSql; @Before public void beforeTest() throws Exception { @@ -75,7 +76,10 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT { rs.close(); assertTrue("Read metrics for not found for " + tableName1, requestReadMetricsMap.get(tableName1).size() > 0); + assertTrue("Logged query doesn't match actual query", loggedSql.equals(query)); + assertTrue("Overall read metrics for not found ", overAllQueryMetricsMap.size() > 0); + assertTrue("Logged query doesn't match actual query", loggedSql.equals(query)); // run UPSERT SELECT to verify mutation metrics are logged String upsertSelect = "UPSERT INTO " + tableName2 + " SELECT * FROM " + tableName1; @@ -120,7 +124,10 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT { rs.close(); assertTrue("Read metrics for not found for " + tableName1, requestReadMetricsMap.get(tableName1).size() > 0); + assertTrue("Logged query doesn't match actual query", loggedSql.equals(query)); + assertTrue("Overall read metrics for not found ", overAllQueryMetricsMap.size() > 0); + assertTrue("Logged query doesn't match actual query", loggedSql.equals(query)); // run UPSERT SELECT to verify mutation metrics are logged String upsertSelect = "UPSERT INTO " + tableName2 + " SELECT * FROM " + tableName1; @@ -155,18 +162,20 @@ public class PhoenixLoggingMetricsIT extends BasePhoenixMetricsIT { return new LoggingPhoenixConnection(conn, new PhoenixMetricsLog() { @Override public void logOverAllReadRequestMetrics( - Map<MetricType, Long> overAllQueryMetrics) { + Map<MetricType, Long> overAllQueryMetrics, String sql) { overAllQueryMetricsMap.putAll(overAllQueryMetrics); + loggedSql = sql; } @Override public void logRequestReadMetrics( - Map<String, Map<MetricType, Long>> requestReadMetrics) { + Map<String, Map<MetricType, Long>> requestReadMetrics, String sql) { requestReadMetricsMap.putAll(requestReadMetrics); + loggedSql = sql; } @Override - public void logWriteMetricsfoForMutations( + public void logWriteMetricsfoForMutationsSinceLastReset( Map<String, Map<MetricType, Long>> mutationWriteMetrics) { mutationWriteMetricsMap.putAll(mutationWriteMetrics); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/9d07afa4/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixConnection.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixConnection.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixConnection.java index 9a2e00f..37917e2 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixConnection.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixConnection.java @@ -61,7 +61,7 @@ public class LoggingPhoenixConnection extends DelegateConnection { @Override public PreparedStatement prepareStatement(String sql) throws SQLException { return new LoggingPhoenixPreparedStatement(super.prepareStatement(sql), - phoenixMetricsLog); + phoenixMetricsLog, sql); } @Override @@ -69,40 +69,40 @@ public class LoggingPhoenixConnection extends DelegateConnection { int resultSetConcurrency) throws SQLException { return new LoggingPhoenixPreparedStatement( super.prepareStatement(sql, resultSetType, resultSetConcurrency), - phoenixMetricsLog); + phoenixMetricsLog, sql); } @Override public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { return new LoggingPhoenixPreparedStatement(super.prepareStatement(sql, resultSetType, - resultSetConcurrency, resultSetHoldability), phoenixMetricsLog); + resultSetConcurrency, resultSetHoldability), phoenixMetricsLog, sql); } @Override public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { return new LoggingPhoenixPreparedStatement(super.prepareStatement(sql, autoGeneratedKeys), - phoenixMetricsLog); + phoenixMetricsLog, sql); } @Override public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { return new LoggingPhoenixPreparedStatement(super.prepareStatement(sql, columnIndexes), - phoenixMetricsLog); + phoenixMetricsLog, sql); } @Override public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { return new LoggingPhoenixPreparedStatement(super.prepareStatement(sql, columnNames), - phoenixMetricsLog); + phoenixMetricsLog, sql); } @Override public void commit() throws SQLException { super.commit(); - phoenixMetricsLog.logWriteMetricsfoForMutations(PhoenixRuntime.getWriteMetricInfoForMutationsSinceLastReset(conn)); + phoenixMetricsLog.logWriteMetricsfoForMutationsSinceLastReset(PhoenixRuntime.getWriteMetricInfoForMutationsSinceLastReset(conn)); phoenixMetricsLog.logReadMetricInfoForMutationsSinceLastReset(PhoenixRuntime.getReadMetricInfoForMutationsSinceLastReset(conn)); PhoenixRuntime.resetMetrics(conn); } @@ -110,7 +110,7 @@ public class LoggingPhoenixConnection extends DelegateConnection { @Override public void close() throws SQLException { try { - phoenixMetricsLog.logWriteMetricsfoForMutations(PhoenixRuntime.getWriteMetricInfoForMutationsSinceLastReset(conn)); + phoenixMetricsLog.logWriteMetricsfoForMutationsSinceLastReset(PhoenixRuntime.getWriteMetricInfoForMutationsSinceLastReset(conn)); phoenixMetricsLog.logReadMetricInfoForMutationsSinceLastReset(PhoenixRuntime.getReadMetricInfoForMutationsSinceLastReset(conn)); PhoenixRuntime.resetMetrics(conn); } finally { http://git-wip-us.apache.org/repos/asf/phoenix/blob/9d07afa4/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 cc8ec1f..952e3fd 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 @@ -20,34 +20,37 @@ package org.apache.phoenix.jdbc; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; public class LoggingPhoenixPreparedStatement extends DelegatePreparedStatement { private PhoenixMetricsLog phoenixMetricsLog; + private String sql; - public LoggingPhoenixPreparedStatement(PreparedStatement stmt, PhoenixMetricsLog phoenixMetricsLog) { + public LoggingPhoenixPreparedStatement(PreparedStatement stmt, PhoenixMetricsLog phoenixMetricsLog, String sql) { super(stmt); this.phoenixMetricsLog = phoenixMetricsLog; + this.sql = sql; } @Override public ResultSet executeQuery(String sql) throws SQLException { - return new LoggingPhoenixResultSet(super.executeQuery(sql), phoenixMetricsLog); + throw new SQLFeatureNotSupportedException(); } @Override public ResultSet executeQuery() throws SQLException { - return new LoggingPhoenixResultSet(super.executeQuery(), phoenixMetricsLog); + return new LoggingPhoenixResultSet(super.executeQuery(), phoenixMetricsLog, sql); } @Override public ResultSet getResultSet() throws SQLException { - return new LoggingPhoenixResultSet(super.getResultSet(), phoenixMetricsLog); + return new LoggingPhoenixResultSet(super.getResultSet(), phoenixMetricsLog, sql); } @Override public ResultSet getGeneratedKeys() throws SQLException { - return new LoggingPhoenixResultSet(super.getGeneratedKeys(), phoenixMetricsLog); + return new LoggingPhoenixResultSet(super.getGeneratedKeys(), phoenixMetricsLog, sql); } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/9d07afa4/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixResultSet.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixResultSet.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixResultSet.java index fbde499..53f5cb4 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixResultSet.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/LoggingPhoenixResultSet.java @@ -25,16 +25,18 @@ import org.apache.phoenix.util.PhoenixRuntime; public class LoggingPhoenixResultSet extends DelegateResultSet { private PhoenixMetricsLog phoenixMetricsLog; - - public LoggingPhoenixResultSet(ResultSet rs, PhoenixMetricsLog phoenixMetricsLog) { + private String sql; + + public LoggingPhoenixResultSet(ResultSet rs, PhoenixMetricsLog phoenixMetricsLog, String sql) { super(rs); this.phoenixMetricsLog = phoenixMetricsLog; + this.sql = sql; } @Override public void close() throws SQLException { - phoenixMetricsLog.logOverAllReadRequestMetrics(PhoenixRuntime.getOverAllReadRequestMetricInfo(rs)); - phoenixMetricsLog.logRequestReadMetrics(PhoenixRuntime.getRequestReadMetricInfo(rs)); + phoenixMetricsLog.logOverAllReadRequestMetrics(PhoenixRuntime.getOverAllReadRequestMetricInfo(rs), sql); + phoenixMetricsLog.logRequestReadMetrics(PhoenixRuntime.getRequestReadMetricInfo(rs), sql); PhoenixRuntime.resetMetrics(rs); super.close(); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/9d07afa4/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 ea919ed..f9abe6a 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 @@ -24,6 +24,7 @@ import java.sql.Statement; public class LoggingPhoenixStatement extends DelegateStatement { private PhoenixMetricsLog phoenixMetricsLog; + private String sql; public LoggingPhoenixStatement(Statement stmt, PhoenixMetricsLog phoenixMetricsLog) { super(stmt); @@ -31,18 +32,31 @@ public class LoggingPhoenixStatement extends DelegateStatement { } @Override + public boolean execute(String sql) throws SQLException { + this.sql = sql; + return super.execute(sql); + } + + @Override public ResultSet executeQuery(String sql) throws SQLException { - return new LoggingPhoenixResultSet(super.executeQuery(sql), phoenixMetricsLog); + this.sql = sql; + return new LoggingPhoenixResultSet(super.executeQuery(sql), phoenixMetricsLog, this.sql); } - + + @Override + public int executeUpdate(String sql) throws SQLException { + this.sql = sql; + return super.executeUpdate(sql); + } + @Override public ResultSet getResultSet() throws SQLException { - return new LoggingPhoenixResultSet(super.getResultSet(), phoenixMetricsLog); + return new LoggingPhoenixResultSet(super.getResultSet(), phoenixMetricsLog, this.sql); } @Override public ResultSet getGeneratedKeys() throws SQLException { - return new LoggingPhoenixResultSet(super.getGeneratedKeys(), phoenixMetricsLog); + return new LoggingPhoenixResultSet(super.getGeneratedKeys(), phoenixMetricsLog, this.sql); } - + } http://git-wip-us.apache.org/repos/asf/phoenix/blob/9d07afa4/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixMetricsLog.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixMetricsLog.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixMetricsLog.java index be08e52..96556ad 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixMetricsLog.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixMetricsLog.java @@ -23,11 +23,11 @@ import org.apache.phoenix.monitoring.MetricType; public interface PhoenixMetricsLog { - void logOverAllReadRequestMetrics(Map<MetricType, Long> overAllQueryMetrics); + void logOverAllReadRequestMetrics(Map<MetricType, Long> overAllQueryMetrics, String sql); - void logRequestReadMetrics(Map<String, Map<MetricType, Long>> requestReadMetrics); + void logRequestReadMetrics(Map<String, Map<MetricType, Long>> requestReadMetrics, String sql); - void logWriteMetricsfoForMutations(Map<String, Map<MetricType, Long>> mutationWriteMetrics); + void logWriteMetricsfoForMutationsSinceLastReset(Map<String, Map<MetricType, Long>> mutationWriteMetrics); void logReadMetricInfoForMutationsSinceLastReset(Map<String, Map<MetricType, Long>> mutationReadMetrics);