Skip to content
Snippets Groups Projects
Commit 0733a54a authored by Reynold Xin's avatar Reynold Xin Committed by gatorsmile
Browse files

[SPARK-19669][SQL] Open up visibility for sharedState, sessionState, and a few other functions

## What changes were proposed in this pull request?
To ease debugging, most of Spark SQL internals have public level visibility. Two of the most important internal states, sharedState and sessionState, however, are package private. It would make more sense to open these up as well with clear documentation that they are internal.

In addition, users currently have way to set active/default SparkSession, but no way to actually get them back. We should open those up as well.

## How was this patch tested?
N/A - only visibility change.

Author: Reynold Xin <rxin@databricks.com>

Closes #17002 from rxin/SPARK-19669.
parent ead4ba0e
No related branches found
No related tags found
No related merge requests found
...@@ -28,7 +28,7 @@ import org.apache.spark.util.Utils ...@@ -28,7 +28,7 @@ import org.apache.spark.util.Utils
* logging messages at different levels using methods that only evaluate parameters lazily if the * logging messages at different levels using methods that only evaluate parameters lazily if the
* log level is enabled. * log level is enabled.
*/ */
private[spark] trait Logging { trait Logging {
// Make the log field transient so that objects with Logging can // Make the log field transient so that objects with Logging can
// be serialized and used on another machine // be serialized and used on another machine
......
...@@ -95,18 +95,28 @@ class SparkSession private( ...@@ -95,18 +95,28 @@ class SparkSession private(
/** /**
* State shared across sessions, including the `SparkContext`, cached data, listener, * State shared across sessions, including the `SparkContext`, cached data, listener,
* and a catalog that interacts with external systems. * and a catalog that interacts with external systems.
*
* This is internal to Spark and there is no guarantee on interface stability.
*
* @since 2.2.0
*/ */
@InterfaceStability.Unstable
@transient @transient
private[sql] lazy val sharedState: SharedState = { lazy val sharedState: SharedState = {
existingSharedState.getOrElse(new SharedState(sparkContext)) existingSharedState.getOrElse(new SharedState(sparkContext))
} }
/** /**
* State isolated across sessions, including SQL configurations, temporary tables, registered * State isolated across sessions, including SQL configurations, temporary tables, registered
* functions, and everything else that accepts a [[org.apache.spark.sql.internal.SQLConf]]. * functions, and everything else that accepts a [[org.apache.spark.sql.internal.SQLConf]].
*
* This is internal to Spark and there is no guarantee on interface stability.
*
* @since 2.2.0
*/ */
@InterfaceStability.Unstable
@transient @transient
private[sql] lazy val sessionState: SessionState = { lazy val sessionState: SessionState = {
SparkSession.reflect[SessionState, SparkSession]( SparkSession.reflect[SessionState, SparkSession](
SparkSession.sessionStateClassName(sparkContext.conf), SparkSession.sessionStateClassName(sparkContext.conf),
self) self)
...@@ -613,7 +623,6 @@ class SparkSession private( ...@@ -613,7 +623,6 @@ class SparkSession private(
* *
* @since 2.1.0 * @since 2.1.0
*/ */
@InterfaceStability.Stable
def time[T](f: => T): T = { def time[T](f: => T): T = {
val start = System.nanoTime() val start = System.nanoTime()
val ret = f val ret = f
...@@ -928,9 +937,19 @@ object SparkSession { ...@@ -928,9 +937,19 @@ object SparkSession {
defaultSession.set(null) defaultSession.set(null)
} }
private[sql] def getActiveSession: Option[SparkSession] = Option(activeThreadSession.get) /**
* Returns the active SparkSession for the current thread, returned by the builder.
*
* @since 2.2.0
*/
def getActiveSession: Option[SparkSession] = Option(activeThreadSession.get)
private[sql] def getDefaultSession: Option[SparkSession] = Option(defaultSession.get) /**
* Returns the default SparkSession that is returned by the builder.
*
* @since 2.2.0
*/
def getDefaultSession: Option[SparkSession] = Option(defaultSession.get)
/** A global SQL listener used for the SQL UI. */ /** A global SQL listener used for the SQL UI. */
private[sql] val sqlListener = new AtomicReference[SQLListener]() private[sql] val sqlListener = new AtomicReference[SQLListener]()
......
...@@ -39,7 +39,7 @@ private[sql] class SharedState(val sparkContext: SparkContext) extends Logging { ...@@ -39,7 +39,7 @@ private[sql] class SharedState(val sparkContext: SparkContext) extends Logging {
// Load hive-site.xml into hadoopConf and determine the warehouse path we want to use, based on // Load hive-site.xml into hadoopConf and determine the warehouse path we want to use, based on
// the config from both hive and Spark SQL. Finally set the warehouse config value to sparkConf. // the config from both hive and Spark SQL. Finally set the warehouse config value to sparkConf.
val warehousePath = { val warehousePath: String = {
val configFile = Utils.getContextOrSparkClassLoader.getResource("hive-site.xml") val configFile = Utils.getContextOrSparkClassLoader.getResource("hive-site.xml")
if (configFile != null) { if (configFile != null) {
sparkContext.hadoopConfiguration.addResource(configFile) sparkContext.hadoopConfiguration.addResource(configFile)
...@@ -103,7 +103,7 @@ private[sql] class SharedState(val sparkContext: SparkContext) extends Logging { ...@@ -103,7 +103,7 @@ private[sql] class SharedState(val sparkContext: SparkContext) extends Logging {
/** /**
* A manager for global temporary views. * A manager for global temporary views.
*/ */
val globalTempViewManager = { val globalTempViewManager: GlobalTempViewManager = {
// System preserved database should not exists in metastore. However it's hard to guarantee it // System preserved database should not exists in metastore. However it's hard to guarantee it
// for every session, because case-sensitivity differs. Here we always lowercase it to make our // for every session, because case-sensitivity differs. Here we always lowercase it to make our
// life easier. // life easier.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment