diff --git a/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala b/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala index 60a60377d8a3f..ea1a9f12cd24b 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala @@ -1063,6 +1063,7 @@ object SparkSession extends Logging { sparkContext.addSparkListener(new SparkListener { override def onApplicationEnd(applicationEnd: SparkListenerApplicationEnd): Unit = { defaultSession.set(null) + listenerRegistered.set(false) } }) listenerRegistered.set(true) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SparkSessionBuilderSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SparkSessionBuilderSuite.scala index 0a522fdbdeed8..e914d8398e921 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SparkSessionBuilderSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SparkSessionBuilderSuite.scala @@ -240,4 +240,21 @@ class SparkSessionBuilderSuite extends SparkFunSuite with BeforeAndAfterEach { assert(session.conf.get(GLOBAL_TEMP_DATABASE) === "globaltempdb-spark-31532-2") assert(session.conf.get(WAREHOUSE_PATH) === "SPARK-31532-db-2") } + + test("SPARK-32062: reset listenerRegistered in SparkSession") { + (1 to 2).foreach { i => + val conf = new SparkConf() + .setMaster("local") + .setAppName(s"test-SPARK-32062-$i") + val context = new SparkContext(conf) + val beforeListenerSize = context.listenerBus.listeners.size() + SparkSession + .builder() + .sparkContext(context) + .getOrCreate() + val afterListenerSize = context.listenerBus.listeners.size() + assert(beforeListenerSize + 1 == afterListenerSize) + context.stop() + } + } }