Skip to content

Commit

Permalink
Use java.util.Collections.synchronizedMap on a Java HashMap.
Browse files Browse the repository at this point in the history
  • Loading branch information
concretevitamin committed Jun 6, 2014
1 parent 88dd0c8 commit e9856c4
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions sql/core/src/main/scala/org/apache/spark/sql/SQLConf.scala
Expand Up @@ -19,7 +19,7 @@ package org.apache.spark.sql

import java.util.Properties

import scala.collection.mutable
import scala.collection.JavaConverters._

/**
* SQLConf holds mutable config parameters and hints. These can be set and
Expand All @@ -29,43 +29,48 @@ import scala.collection.mutable
*/
class SQLConf {

protected val settings = new mutable.HashMap[String, String]()
private val settings = java.util.Collections.synchronizedMap(
new java.util.HashMap[String, String]())

private[spark] def clear() {
settings.clear()
}

def this(props: Properties) = {
this()
import scala.collection.JavaConversions._ // implicits for java.util.Properties
props.foreach { case (k, v) => this.settings(k) = v }
props.asScala.foreach { case (k, v) => this.settings.put(k, v) }
}

def set(key: String, value: String): SQLConf = {
require(key != null, "key cannot be null")
require(value != null, s"value cannot be null for ${key}")
settings(key) = value
settings.put(key, value)
this
}

def get(key: String): String = {
settings.getOrElse(key, throw new NoSuchElementException(key))
if (!settings.containsKey(key)) {
throw new NoSuchElementException(key)
}
settings.get(key)
}

def get(key: String, defaultValue: String): String = {
settings.getOrElse(key, defaultValue)
if (!settings.containsKey(key)) defaultValue else settings.get(key)
}

def getAll: Array[(String, String)] = settings.clone().toArray
def getAll: Array[(String, String)] = settings.asScala.toArray

def getOption(key: String): Option[String] = {
settings.get(key)
if (!settings.containsKey(key)) None else Some(settings.get(key))
}

def contains(key: String): Boolean = settings.contains(key)
def contains(key: String): Boolean = settings.containsKey(key)

def toDebugString: String = {
settings.toArray.sorted.map{ case (k, v) => s"$k=$v" }.mkString("\n")
settings.synchronized {
settings.asScala.toArray.sorted.map{ case (k, v) => s"$k=$v" }.mkString("\n")
}
}

}

0 comments on commit e9856c4

Please sign in to comment.