aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorzsxwing <zsxwing@gmail.com>2015-05-29 05:17:41 -0400
committerSean Owen <sowen@cloudera.com>2015-05-29 05:17:41 -0400
commit8db40f6711058c3c3bf67ceaaaffffcc25d67d19 (patch)
tree8a6c7e6792e67fa4b07a8ee5ff00624d6facde08 /core
parentbf46580708e41a1d48ac091adbca8d82a4008699 (diff)
downloadspark-8db40f6711058c3c3bf67ceaaaffffcc25d67d19.tar.gz
spark-8db40f6711058c3c3bf67ceaaaffffcc25d67d19.tar.bz2
spark-8db40f6711058c3c3bf67ceaaaffffcc25d67d19.zip
[SPARK-7863] [CORE] Create SimpleDateFormat for every SimpleDateParam instance because it's not thread-safe
SimpleDateFormat is not thread-safe. This PR creates new `SimpleDateFormat` for each `SimpleDateParam` instance. Author: zsxwing <zsxwing@gmail.com> Closes #6406 from zsxwing/SPARK-7863 and squashes the following commits: aeed4c1 [zsxwing] Rewrite SimpleDateParam 8cdd986 [zsxwing] Inline formats 9680a15 [zsxwing] Create SimpleDateFormat for each SimpleDateParam instance because it's not thread-safe
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/status/api/v1/SimpleDateParam.scala49
-rw-r--r--core/src/test/scala/org/apache/spark/status/api/v1/SimpleDateParamSuite.scala5
2 files changed, 26 insertions, 28 deletions
diff --git a/core/src/main/scala/org/apache/spark/status/api/v1/SimpleDateParam.scala b/core/src/main/scala/org/apache/spark/status/api/v1/SimpleDateParam.scala
index cee29786c3..0c71cd2382 100644
--- a/core/src/main/scala/org/apache/spark/status/api/v1/SimpleDateParam.scala
+++ b/core/src/main/scala/org/apache/spark/status/api/v1/SimpleDateParam.scala
@@ -16,40 +16,33 @@
*/
package org.apache.spark.status.api.v1
-import java.text.SimpleDateFormat
+import java.text.{ParseException, SimpleDateFormat}
import java.util.TimeZone
import javax.ws.rs.WebApplicationException
import javax.ws.rs.core.Response
import javax.ws.rs.core.Response.Status
-import scala.util.Try
-
private[v1] class SimpleDateParam(val originalValue: String) {
- val timestamp: Long = {
- SimpleDateParam.formats.collectFirst {
- case fmt if Try(fmt.parse(originalValue)).isSuccess =>
- fmt.parse(originalValue).getTime()
- }.getOrElse(
- throw new WebApplicationException(
- Response
- .status(Status.BAD_REQUEST)
- .entity("Couldn't parse date: " + originalValue)
- .build()
- )
- )
- }
-}
-private[v1] object SimpleDateParam {
-
- val formats: Seq[SimpleDateFormat] = {
-
- val gmtDay = new SimpleDateFormat("yyyy-MM-dd")
- gmtDay.setTimeZone(TimeZone.getTimeZone("GMT"))
-
- Seq(
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz"),
- gmtDay
- )
+ val timestamp: Long = {
+ val format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz")
+ try {
+ format.parse(originalValue).getTime()
+ } catch {
+ case _: ParseException =>
+ val gmtDay = new SimpleDateFormat("yyyy-MM-dd")
+ gmtDay.setTimeZone(TimeZone.getTimeZone("GMT"))
+ try {
+ gmtDay.parse(originalValue).getTime()
+ } catch {
+ case _: ParseException =>
+ throw new WebApplicationException(
+ Response
+ .status(Status.BAD_REQUEST)
+ .entity("Couldn't parse date: " + originalValue)
+ .build()
+ )
+ }
+ }
}
}
diff --git a/core/src/test/scala/org/apache/spark/status/api/v1/SimpleDateParamSuite.scala b/core/src/test/scala/org/apache/spark/status/api/v1/SimpleDateParamSuite.scala
index 731d1f557e..183043bc05 100644
--- a/core/src/test/scala/org/apache/spark/status/api/v1/SimpleDateParamSuite.scala
+++ b/core/src/test/scala/org/apache/spark/status/api/v1/SimpleDateParamSuite.scala
@@ -16,6 +16,8 @@
*/
package org.apache.spark.status.api.v1
+import javax.ws.rs.WebApplicationException
+
import org.scalatest.{Matchers, FunSuite}
class SimpleDateParamSuite extends FunSuite with Matchers {
@@ -24,6 +26,9 @@ class SimpleDateParamSuite extends FunSuite with Matchers {
new SimpleDateParam("2015-02-20T23:21:17.190GMT").timestamp should be (1424474477190L)
new SimpleDateParam("2015-02-20T17:21:17.190EST").timestamp should be (1424470877190L)
new SimpleDateParam("2015-02-20").timestamp should be (1424390400000L) // GMT
+ intercept[WebApplicationException] {
+ new SimpleDateParam("invalid date")
+ }
}
}