@@ -20,6 +20,7 @@ package org.apache.spark.sql.internal
20
20
import java .net .URL
21
21
import java .util .{Locale , UUID }
22
22
import java .util .concurrent .ConcurrentHashMap
23
+ import java .util .concurrent .atomic .AtomicBoolean
23
24
import javax .annotation .concurrent .GuardedBy
24
25
25
26
import scala .reflect .ClassTag
@@ -194,26 +195,20 @@ private[sql] class SharedState(
194
195
}
195
196
196
197
object SharedState extends Logging {
198
+ private val fsUrlStreamHandlerFactoryInitialized = new AtomicBoolean (false )
199
+
197
200
private def setFsUrlStreamHandlerFactory (conf : SparkConf ): Unit = {
198
- if (conf.get(DEFAULT_URL_STREAM_HANDLER_FACTORY_ENABLED ) && factory.isEmpty) {
199
- synchronized {
200
- if (factory.isEmpty) {
201
- try {
202
- URL .setURLStreamHandlerFactory(defaultFactory)
203
- factory = Some (defaultFactory)
204
- } catch {
205
- case NonFatal (_) =>
206
- logWarning(" URL.setURLStreamHandlerFactory failed to set FsUrlStreamHandlerFactory" )
207
- }
208
- }
201
+ if (conf.get(DEFAULT_URL_STREAM_HANDLER_FACTORY_ENABLED ) &&
202
+ fsUrlStreamHandlerFactoryInitialized.compareAndSet(false , true )) {
203
+ try {
204
+ URL .setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory ())
205
+ } catch {
206
+ case NonFatal (_) =>
207
+ logWarning(" URL.setURLStreamHandlerFactory failed to set FsUrlStreamHandlerFactory" )
209
208
}
210
209
}
211
210
}
212
211
213
- @ volatile private var factory : Option [FsUrlStreamHandlerFactory ] = None
214
-
215
- private lazy val defaultFactory = new FsUrlStreamHandlerFactory ()
216
-
217
212
private val HIVE_EXTERNAL_CATALOG_CLASS_NAME = " org.apache.spark.sql.hive.HiveExternalCatalog"
218
213
219
214
private def externalCatalogClassName (conf : SparkConf ): String = {
0 commit comments