Skip to content

Commit 38d8035

Browse files
willbJames Z.M. Gao
authored andcommitted
SPARK-1078: Replace lift-json with json4s-jackson.
The aim of the Json4s project is to provide a common API for Scala JSON libraries. It is Apache-licensed, easier for downstream distributions to package, and mostly API-compatible with lift-json. Furthermore, the Jackson-backed implementation parses faster than lift-json on all but the smallest inputs. Author: William Benton <[email protected]> Closes apache#582 from willb/json4s and squashes the following commits: 7ca62c4 [William Benton] Replace lift-json with json4s-jackson. Conflicts: core/src/main/scala/org/apache/spark/deploy/master/ui/ApplicationPage.scala core/src/main/scala/org/apache/spark/deploy/master/ui/IndexPage.scala core/src/main/scala/org/apache/spark/ui/JettyUtils.scala
1 parent 75b11d3 commit 38d8035

File tree

9 files changed

+30
-24
lines changed

9 files changed

+30
-24
lines changed

core/pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,9 @@
108108
<artifactId>scala-library</artifactId>
109109
</dependency>
110110
<dependency>
111-
<groupId>net.liftweb</groupId>
112-
<artifactId>lift-json_${scala.binary.version}</artifactId>
111+
<groupId>org.json4s</groupId>
112+
<artifactId>json4s-jackson_${scala.binary.version}</artifactId>
113+
<version>3.2.6</version>
113114
</dependency>
114115
<dependency>
115116
<groupId>it.unimi.dsi</groupId>

core/src/main/scala/org/apache/spark/deploy/FaultToleranceTest.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import scala.concurrent.ExecutionContext.Implicits.global
2929
import scala.collection.mutable.ListBuffer
3030
import scala.sys.process._
3131

32-
import net.liftweb.json.JsonParser
32+
import org.json4s._
33+
import org.json4s.jackson.JsonMethods
3334

3435
import org.apache.spark.{Logging, SparkContext}
3536
import org.apache.spark.deploy.master.RecoveryState
@@ -312,7 +313,7 @@ private[spark] object FaultToleranceTest extends App with Logging {
312313
private[spark] class TestMasterInfo(val ip: String, val dockerId: DockerId, val logFile: File)
313314
extends Logging {
314315

315-
implicit val formats = net.liftweb.json.DefaultFormats
316+
implicit val formats = org.json4s.DefaultFormats
316317
var state: RecoveryState.Value = _
317318
var liveWorkerIPs: List[String] = _
318319
var numLiveApps = 0
@@ -322,7 +323,7 @@ private[spark] class TestMasterInfo(val ip: String, val dockerId: DockerId, val
322323
def readState() {
323324
try {
324325
val masterStream = new InputStreamReader(new URL("http://%s:8080/json".format(ip)).openStream)
325-
val json = JsonParser.parse(masterStream, closeAutomatically = true)
326+
val json = JsonMethods.parse(masterStream)
326327

327328
val workers = json \ "workers"
328329
val liveWorkers = workers.children.filter(w => (w \ "state").extract[String] == "ALIVE")
@@ -350,7 +351,7 @@ private[spark] class TestMasterInfo(val ip: String, val dockerId: DockerId, val
350351
private[spark] class TestWorkerInfo(val ip: String, val dockerId: DockerId, val logFile: File)
351352
extends Logging {
352353

353-
implicit val formats = net.liftweb.json.DefaultFormats
354+
implicit val formats = org.json4s.DefaultFormats
354355

355356
logDebug("Created worker: " + this)
356357

core/src/main/scala/org/apache/spark/deploy/JsonProtocol.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
package org.apache.spark.deploy
1919

20-
import net.liftweb.json.JsonDSL._
20+
import org.json4s.JsonDSL._
2121

2222
import org.apache.spark.deploy.DeployMessages.{MasterStateResponse, WorkerStateResponse}
2323
import org.apache.spark.deploy.master.{ApplicationInfo, WorkerInfo, DriverInfo}

core/src/main/scala/org/apache/spark/deploy/master/ui/ApplicationPage.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import scala.xml.Node
2222

2323
import akka.pattern.ask
2424
import javax.servlet.http.HttpServletRequest
25-
import net.liftweb.json.JsonAST.JValue
25+
import org.json4s.JValue
2626

2727
import org.apache.spark.deploy.JsonProtocol
2828
import org.apache.spark.deploy.DeployMessages.{MasterStateResponse, RequestMasterState}

core/src/main/scala/org/apache/spark/deploy/master/ui/IndexPage.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import scala.xml.Node
2323

2424
import akka.pattern.ask
2525
import javax.servlet.http.HttpServletRequest
26-
import net.liftweb.json.JsonAST.JValue
26+
import org.json4s.JValue
2727

2828
import org.apache.spark.deploy.{DeployWebUI, JsonProtocol}
2929
import org.apache.spark.deploy.DeployMessages.{MasterStateResponse, RequestMasterState}

core/src/main/scala/org/apache/spark/deploy/worker/ui/IndexPage.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import scala.xml.Node
2222

2323
import akka.pattern.ask
2424
import javax.servlet.http.HttpServletRequest
25-
import net.liftweb.json.JsonAST.JValue
25+
import org.json4s.JValue
2626

2727
import org.apache.spark.deploy.JsonProtocol
2828
import org.apache.spark.deploy.DeployMessages.{RequestWorkerState, WorkerStateResponse}

core/src/main/scala/org/apache/spark/ui/JettyUtils.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ import scala.annotation.tailrec
2323
import scala.util.{Try, Success, Failure}
2424
import scala.xml.Node
2525

26-
import net.liftweb.json.{JValue, pretty, render}
26+
import org.json4s.JValue
27+
import org.json4s.jackson.JsonMethods.{pretty, render}
2728

2829
import org.eclipse.jetty.server.{Server, Request, Handler}
2930
import org.eclipse.jetty.server.handler.{ResourceHandler, HandlerList, ContextHandler, AbstractHandler}

core/src/test/scala/org/apache/spark/deploy/JsonProtocolSuite.scala

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ package org.apache.spark.deploy
2020
import java.io.File
2121
import java.util.Date
2222

23-
import net.liftweb.json.Diff
24-
import net.liftweb.json.{JsonAST, JsonParser}
25-
import net.liftweb.json.JsonAST.{JNothing, JValue}
23+
import org.json4s._
24+
25+
import org.json4s.JValue
26+
import org.json4s.jackson.JsonMethods
27+
import com.fasterxml.jackson.core.JsonParseException
28+
2629
import org.scalatest.FunSuite
2730

2831
import org.apache.spark.deploy.DeployMessages.{MasterStateResponse, WorkerStateResponse}
@@ -34,31 +37,31 @@ class JsonProtocolSuite extends FunSuite {
3437
test("writeApplicationInfo") {
3538
val output = JsonProtocol.writeApplicationInfo(createAppInfo())
3639
assertValidJson(output)
37-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.appInfoJsonStr))
40+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.appInfoJsonStr))
3841
}
3942

4043
test("writeWorkerInfo") {
4144
val output = JsonProtocol.writeWorkerInfo(createWorkerInfo())
4245
assertValidJson(output)
43-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.workerInfoJsonStr))
46+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.workerInfoJsonStr))
4447
}
4548

4649
test("writeApplicationDescription") {
4750
val output = JsonProtocol.writeApplicationDescription(createAppDesc())
4851
assertValidJson(output)
49-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.appDescJsonStr))
52+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.appDescJsonStr))
5053
}
5154

5255
test("writeExecutorRunner") {
5356
val output = JsonProtocol.writeExecutorRunner(createExecutorRunner())
5457
assertValidJson(output)
55-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.executorRunnerJsonStr))
58+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.executorRunnerJsonStr))
5659
}
5760

5861
test("writeDriverInfo") {
5962
val output = JsonProtocol.writeDriverInfo(createDriverInfo())
6063
assertValidJson(output)
61-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.driverInfoJsonStr))
64+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.driverInfoJsonStr))
6265
}
6366

6467
test("writeMasterState") {
@@ -71,7 +74,7 @@ class JsonProtocolSuite extends FunSuite {
7174
activeDrivers, completedDrivers, RecoveryState.ALIVE)
7275
val output = JsonProtocol.writeMasterState(stateResponse)
7376
assertValidJson(output)
74-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.masterStateJsonStr))
77+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.masterStateJsonStr))
7578
}
7679

7780
test("writeWorkerState") {
@@ -83,7 +86,7 @@ class JsonProtocolSuite extends FunSuite {
8386
finishedExecutors, drivers, finishedDrivers, "masterUrl", 4, 1234, 4, 1234, "masterWebUiUrl")
8487
val output = JsonProtocol.writeWorkerState(stateResponse)
8588
assertValidJson(output)
86-
assertValidDataInJson(output, JsonParser.parse(JsonConstants.workerStateJsonStr))
89+
assertValidDataInJson(output, JsonMethods.parse(JsonConstants.workerStateJsonStr))
8790
}
8891

8992
def createAppDesc(): ApplicationDescription = {
@@ -125,9 +128,9 @@ class JsonProtocolSuite extends FunSuite {
125128

126129
def assertValidJson(json: JValue) {
127130
try {
128-
JsonParser.parse(JsonAST.compactRender(json))
131+
JsonMethods.parse(JsonMethods.compact(json))
129132
} catch {
130-
case e: JsonParser.ParseException => fail("Invalid Json detected", e)
133+
case e: JsonParseException => fail("Invalid Json detected", e)
131134
}
132135
}
133136

project/SparkBuild.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ object SparkBuild extends Build {
260260
"org.spark-project.akka" %% "akka-remote" % "2.2.3-shaded-protobuf" excludeAll(excludeNetty),
261261
"org.spark-project.akka" %% "akka-slf4j" % "2.2.3-shaded-protobuf" excludeAll(excludeNetty),
262262
"org.spark-project.akka" %% "akka-testkit" % "2.2.3-shaded-protobuf" % "test",
263-
"net.liftweb" %% "lift-json" % "2.5.1" excludeAll(excludeNetty),
263+
"org.json4s" %% "json4s-jackson" % "3.2.6",
264264
"it.unimi.dsi" % "fastutil" % "6.4.4",
265265
"colt" % "colt" % "1.2.0",
266266
"org.apache.mesos" % "mesos" % "0.13.0",

0 commit comments

Comments
 (0)