Repository: hive
Updated Branches:
  refs/heads/master 972bcba7a -> 815499af9


HIVE-13585: Add counter metric for direct sql failures (Mohit Sabharwal, 
reviewed by Aihua Xu, Sergey Shelukhin)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/815499af
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/815499af
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/815499af

Branch: refs/heads/master
Commit: 815499af9543687948b0330c1f8793bfbf2dea67
Parents: 972bcba
Author: Aihua Xu <a...@cloudera.com>
Authored: Tue Apr 26 19:31:40 2016 -0400
Committer: Aihua Xu <a...@cloudera.com>
Committed: Tue Apr 26 19:31:40 2016 -0400

----------------------------------------------------------------------
 .../common/metrics/common/MetricsConstant.java  |  2 +
 metastore/pom.xml                               |  8 ++++
 .../hadoop/hive/metastore/ObjectStore.java      | 19 +++++++-
 .../hadoop/hive/metastore/TestObjectStore.java  | 50 ++++++++++++++++++++
 4 files changed, 77 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/815499af/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsConstant.java
----------------------------------------------------------------------
diff --git 
a/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsConstant.java
 
b/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsConstant.java
index 65b914c..b0d2b85 100644
--- 
a/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsConstant.java
+++ 
b/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsConstant.java
@@ -55,4 +55,6 @@ public class MetricsConstant {
   public static final String DELETE_TOTAL_DATABASES = "delete_total_count_dbs";
   public static final String DELETE_TOTAL_TABLES = "delete_total_count_tables";
   public static final String DELETE_TOTAL_PARTITIONS = 
"delete_total_count_partitions";
+
+  public static final String DIRECTSQL_ERRORS = "directsql_errors";
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/815499af/metastore/pom.xml
----------------------------------------------------------------------
diff --git a/metastore/pom.xml b/metastore/pom.xml
index 18c1f9c..8816829 100644
--- a/metastore/pom.xml
+++ b/metastore/pom.xml
@@ -207,6 +207,14 @@
       <artifactId>tephra-hbase-compat-1.0</artifactId>
       <version>${tephra.version}</version>
     </dependency>
+    <!-- test intra-project -->
+    <dependency>
+      <groupId>org.apache.hive</groupId>
+      <artifactId>hive-common</artifactId>
+      <version>${project.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
     <!-- test inter-project -->
     <dependency>
       <groupId>junit</groupId>

http://git-wip-us.apache.org/repos/asf/hive/blob/815499af/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java 
b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
index 24fbf70..f651a13 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
@@ -63,6 +63,9 @@ import org.apache.hadoop.hive.common.ObjectPair;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.common.classification.InterfaceAudience;
 import org.apache.hadoop.hive.common.classification.InterfaceStability;
+import org.apache.hadoop.hive.common.metrics.common.Metrics;
+import org.apache.hadoop.hive.common.metrics.common.MetricsConstant;
+import org.apache.hadoop.hive.common.metrics.common.MetricsFactory;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.api.AggrStats;
@@ -2556,7 +2559,8 @@ public class ObjectStore implements RawStore, 
Configurable {
   }
 
   /** Helper class for getting stuff w/transaction, direct SQL, perf logging, 
etc. */
-  private abstract class GetHelper<T> {
+  @VisibleForTesting
+  public abstract class GetHelper<T> {
     private final boolean isInTxn, doTrace, allowJdo;
     private boolean doUseDirectSql;
     private long start;
@@ -2668,6 +2672,16 @@ public class ObjectStore implements RawStore, 
Configurable {
       } else {
         start = doTrace ? System.nanoTime() : 0;
       }
+
+      Metrics metrics = MetricsFactory.getInstance();
+      if (metrics != null) {
+        try {
+          metrics.incrementCounter(MetricsConstant.DIRECTSQL_ERRORS);
+        } catch (Exception e) {
+          LOG.warn("Error reporting Direct SQL errors to metrics system", e);
+        }
+      }
+
       doUseDirectSql = false;
     }
 
@@ -2707,7 +2721,8 @@ public class ObjectStore implements RawStore, 
Configurable {
     }
   }
 
-  private abstract class GetDbHelper extends GetHelper<Database> {
+  @VisibleForTesting
+  public abstract class GetDbHelper extends GetHelper<Database> {
     /**
      * GetHelper for returning db info using directSql/JDO.
      * Since this is a db-level call, tblName is ignored, and null is passed 
irrespective of what is passed in.

http://git-wip-us.apache.org/repos/asf/hive/blob/815499af/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java 
b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 2e1f5f4..6cb062a 100644
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@ -21,6 +21,11 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 
+import org.apache.hadoop.hive.common.metrics.common.MetricsConstant;
+import org.apache.hadoop.hive.common.metrics.common.MetricsFactory;
+import org.apache.hadoop.hive.common.metrics.metrics2.CodahaleMetrics;
+import org.apache.hadoop.hive.common.metrics.metrics2.MetricsReporting;
+import org.apache.hadoop.hive.common.metrics.MetricsTestUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -244,6 +249,51 @@ public class TestObjectStore {
     objectStore.removeRole(ROLE1);
   }
 
+  @Test
+  public void testDirectSqlErrorMetrics() throws Exception {
+    HiveConf conf = new HiveConf();
+    conf.setBoolVar(HiveConf.ConfVars.HIVE_SERVER2_METRICS_ENABLED, true);
+    conf.setVar(HiveConf.ConfVars.HIVE_METRICS_REPORTER, 
MetricsReporting.JSON_FILE.name()
+        + "," + MetricsReporting.JMX.name());
+
+    MetricsFactory.init(conf);
+    CodahaleMetrics metrics = (CodahaleMetrics) MetricsFactory.getInstance();
+
+    objectStore.new GetDbHelper("foo", null, true, true) {
+      @Override
+      protected Database getSqlResult(ObjectStore.GetHelper<Database> ctx) 
throws MetaException {
+        return null;
+      }
+
+      @Override
+      protected Database getJdoResult(ObjectStore.GetHelper<Database> ctx) 
throws MetaException,
+          NoSuchObjectException {
+        return null;
+      }
+    }.run(false);
+
+    String json = metrics.dumpJson();
+    MetricsTestUtils.verifyMetricsJson(json, MetricsTestUtils.COUNTER,
+        MetricsConstant.DIRECTSQL_ERRORS, "");
+
+    objectStore.new GetDbHelper("foo", null, true, true) {
+      @Override
+      protected Database getSqlResult(ObjectStore.GetHelper<Database> ctx) 
throws MetaException {
+        throw new RuntimeException();
+      }
+
+      @Override
+      protected Database getJdoResult(ObjectStore.GetHelper<Database> ctx) 
throws MetaException,
+          NoSuchObjectException {
+        return null;
+      }
+    }.run(false);
+
+    json = metrics.dumpJson();
+    MetricsTestUtils.verifyMetricsJson(json, MetricsTestUtils.COUNTER,
+        MetricsConstant.DIRECTSQL_ERRORS, 1);
+  }
+
   public static void dropAllStoreObjects(RawStore store) throws MetaException, 
InvalidObjectException, InvalidInputException {
     try {
       Deadline.registerIfNot(100000);

Reply via email to