From fc8a47656f94537c2aa7aa0b2c9a9218bfa65077 Mon Sep 17 00:00:00 2001 From: Brock Noland Date: Fri, 18 Sep 2015 14:45:47 -0700 Subject: [PATCH] HIVE-11891 - Add basic performance logging at trace level to metastore calls --- .../hadoop/hive/metastore/RetryingHMSHandler.java | 32 +++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java b/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java index 892aef4..bc5843b 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java @@ -41,6 +41,17 @@ public class RetryingHMSHandler implements InvocationHandler { private static final Log LOG = LogFactory.getLog(RetryingHMSHandler.class); + private static final boolean IS_TRACE_ENABLED = LOG.isTraceEnabled(); + + private static class Result { + private final Object result; + private final int numRetries; + + public Result(Object result, int numRetries) { + this.result = result; + this.numRetries = numRetries; + } + } private final IHMSHandler baseHandler; private final MetaStoreInit.MetaStoreInitData metaStoreInitData = @@ -78,6 +89,25 @@ public static IHMSHandler getProxy(HiveConf hiveConf, IHMSHandler baseHandler, b @Override public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { + int retryCount = -1; + long startTime = System.currentTimeMillis(); + int threadId = HiveMetaStore.HMSHandler.get(); + boolean error = true; + try { + Result result = invokeInternal(proxy, method, args); + retryCount = result.numRetries; + error = false; + return result.result; + } finally { + if (IS_TRACE_ENABLED) { + long elapsedTime = System.currentTimeMillis() - startTime; + LOG.trace(threadId + ": function=" + method.getName() + ", elapsedTime=" + elapsedTime + + "ms, retryCount=" + retryCount + ", error=" + error); + } + } + } + + public Result invokeInternal(final Object proxy, final Method method, final Object[] args) throws Throwable { boolean gotNewConnectUrl = false; boolean reloadConf = HiveConf.getBoolVar(origConf, @@ -106,7 +136,7 @@ public Object invoke(final Object proxy, final Method method, final Object[] arg Deadline.startTimer(method.getName()); Object object = method.invoke(baseHandler, args); Deadline.stopTimer(); - return object; + return new Result(object, retryCount); } catch (javax.jdo.JDOException e) { caughtException = e; -- 2.3.2 (Apple Git-55)