You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/08/02 06:58:34 UTC
svn commit: r1509544 - in /hive/trunk/ql/src/java/org/apache/hadoop/hive/ql:
log/PerfLogger.java session/SessionState.java
Author: hashutosh
Date: Fri Aug 2 04:58:34 2013
New Revision: 1509544
URL: http://svn.apache.org/r1509544
Log:
HIVE-4638 : Thread local PerfLog can get shared by multiple hiveserver2 sessions (Prasad Mujumdar via Ashutosh Chauhan)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/log/PerfLogger.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/log/PerfLogger.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/log/PerfLogger.java?rev=1509544&r1=1509543&r2=1509544&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/log/PerfLogger.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/log/PerfLogger.java Fri Aug 2 04:58:34 2013
@@ -23,11 +23,8 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
import org.apache.hadoop.hive.ql.QueryPlan;
import org.apache.hadoop.hive.ql.session.SessionState;
-import org.apache.hadoop.util.ReflectionUtils;
/**
* PerfLogger.
@@ -55,7 +52,7 @@ public class PerfLogger {
static final private Log LOG = LogFactory.getLog(PerfLogger.class.getName());
- protected PerfLogger() {
+ public PerfLogger() {
// Use getPerfLogger to get an instance of PerfLogger
}
@@ -68,26 +65,17 @@ public class PerfLogger {
*
* Use resetPerfLogger to require a new instance. Useful at the beginning of execution.
*
- * @return Tries to return an instance of the class whose name is configured in
- * hive.exec.perf.logger, but if it can't it just returns an instance of
- * the base PerfLogger class
+ * @return Session perflogger if there's a sessionstate, otherwise return the thread local instance
*/
public static PerfLogger getPerfLogger(boolean resetPerfLogger) {
- if (perfLogger.get() == null || resetPerfLogger) {
- if (SessionState.get() == null) {
+ if (SessionState.get() == null) {
+ if (perfLogger.get() == null || resetPerfLogger) {
perfLogger.set(new PerfLogger());
- } else {
- HiveConf conf = SessionState.get().getConf();
- try {
- perfLogger.set((PerfLogger) ReflectionUtils.newInstance(conf.getClassByName(
- conf.getVar(ConfVars.HIVE_PERF_LOGGER)), conf));
- } catch (ClassNotFoundException e) {
- LOG.error("Performance Logger Class not found:" + e.getMessage());
- perfLogger.set(new PerfLogger());
- }
}
+ return perfLogger.get();
+ } else {
+ return SessionState.get().getPerfLogger(resetPerfLogger);
}
- return perfLogger.get();
}
/**
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java?rev=1509544&r1=1509543&r2=1509544&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java Fri Aug 2 04:58:34 2013
@@ -40,15 +40,18 @@ import org.apache.hadoop.conf.Configurat
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
import org.apache.hadoop.hive.ql.MapRedStats;
import org.apache.hadoop.hive.ql.exec.Utilities;
import org.apache.hadoop.hive.ql.history.HiveHistory;
+import org.apache.hadoop.hive.ql.log.PerfLogger;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.metadata.HiveUtils;
import org.apache.hadoop.hive.ql.plan.HiveOperation;
import org.apache.hadoop.hive.ql.security.HiveAuthenticationProvider;
import org.apache.hadoop.hive.ql.security.authorization.HiveAuthorizationProvider;
import org.apache.hadoop.hive.ql.util.DosToUnix;
+import org.apache.hadoop.util.ReflectionUtils;
/**
* SessionState encapsulates common data associated with a session.
@@ -133,6 +136,7 @@ public class SessionState {
*/
LineageState ls;
+ private PerfLogger perfLogger;
/**
* Get the lineage state stored in this session.
*
@@ -746,4 +750,25 @@ public class SessionState {
LOG.info("Error removing session resource dir " + resourceDir, e);
}
}
+
+ /**
+ * @param resetPerfLogger
+ * @return Tries to return an instance of the class whose name is configured in
+ * hive.exec.perf.logger, but if it can't it just returns an instance of
+ * the base PerfLogger class
+
+ */
+ public PerfLogger getPerfLogger(boolean resetPerfLogger) {
+ if ((perfLogger == null) || resetPerfLogger) {
+ try {
+ perfLogger = (PerfLogger) ReflectionUtils.newInstance(conf.getClassByName(
+ conf.getVar(ConfVars.HIVE_PERF_LOGGER)), conf);
+ } catch (ClassNotFoundException e) {
+ LOG.error("Performance Logger Class not found:" + e.getMessage());
+ perfLogger = new PerfLogger();
+ }
+ }
+ return perfLogger;
+ }
+
}