Skip to content

Commit 3ef5724

Browse files
plokhotnyukmichaelhixson
authored andcommitted
Upgrade to Blaze 0.14.0-M3 + replace Jackson by jsoniter-scala (#3788)
* Upgrade to Blaze 0.14.0-M3 + replace Jackson by jsoniter-scala * Fix content types * Add NUMA + aggressive opts
1 parent a65f24a commit 3ef5724

File tree

4 files changed

+40
-42
lines changed

4 files changed

+40
-42
lines changed

frameworks/Scala/blaze/README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
## Infrastructure Software Versions
44
The tests were run with:
55

6-
* [Java Oracle 1.8.0_101](http://www.oracle.com/technetwork/java/javase)
7-
* [blaze 0.13.0](https://github.com/http4s/blaze/)
6+
* [Java Oracle 1.8.0](http://www.oracle.com/technetwork/java/javase)
7+
* [blaze 0.14.0-M3](https://github.com/http4s/blaze/)
88

99
## Test URLs
1010
### JSON Encoding Test
@@ -16,6 +16,7 @@ http://localhost:8080/json
1616
http://localhost:8080/plaintext
1717

1818
## How to run
19-
sbt 'oneJar'
19+
sbt assembly
20+
21+
java -server -Xms2g -Xmx2g -XX:NewSize=1g -XX:MaxNewSize=1g -XX:InitialCodeCacheSize=256m -XX:ReservedCodeCacheSize=256m -XX:+UseParallelGC -XX:+UseNUMA -XX:+AggressiveOpts -XX:-UseBiasedLocking -XX:+AlwaysPreTouch -jar target/scala-2.12/blaze-assembly-1.0.jar
2022

21-
java -jar target/scala-2.11/blaze_2.11-1.0-SNAPSHOT-one-jar.jar

frameworks/Scala/blaze/blaze.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ COPY project project
44
COPY src src
55
COPY build.sbt build.sbt
66
RUN sbt assembly -batch
7-
CMD ["java", "-jar", "target/scala-2.12/blaze-assembly-1.0.jar"]
7+
CMD ["java", "-server", "-Xms2g", "-Xmx2g", "-XX:NewSize=1g", "-XX:MaxNewSize=1g", "-XX:InitialCodeCacheSize=256m", "-XX:ReservedCodeCacheSize=256m", "-XX:+UseParallelGC", "-XX:+UseNUMA", "-XX:+AggressiveOpts", "-XX:-UseBiasedLocking", "-XX:+AlwaysPreTouch", "-jar", "target/scala-2.12/blaze-assembly-1.0.jar"]

frameworks/Scala/blaze/build.sbt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ name := "blaze"
22

33
version := "1.0"
44

5-
scalaVersion := "2.12.5"
6-
7-
val blazeVersion = "0.13.0"
5+
scalaVersion := "2.12.6"
86

97
libraryDependencies ++= Seq(
10-
"org.http4s" %% "blaze-http" % blazeVersion,
11-
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.8.4"
8+
"org.http4s" %% "blaze-http" % "0.14.0-M3",
9+
"com.github.plokhotnyuk.jsoniter-scala" %% "macros" % "0.27.1"
1210
)
Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,49 @@
11
package blaze.techempower.benchmark
22

3+
import java.lang.Runtime._
34
import java.net.InetSocketAddress
5+
import java.nio.ByteBuffer
6+
import java.nio.channels.AsynchronousChannelGroup
47
import java.nio.charset.StandardCharsets.UTF_8
8+
import java.util.concurrent.ForkJoinPool
9+
import java.util.concurrent.ForkJoinPool._
510

6-
import com.fasterxml.jackson.databind.ObjectMapper
7-
import com.fasterxml.jackson.module.scala.DefaultScalaModule
8-
9-
import org.http4s.blaze.channel.SocketConnection
11+
import org.http4s.blaze.channel.nio2.NIO2SocketServerGroup
1012
import org.http4s.blaze.http._
13+
import org.http4s.blaze.http.HttpServerStageConfig
14+
import org.http4s.blaze.http.http1.server.Http1ServerStage
15+
import org.http4s.blaze.pipeline.LeafBuilder
16+
import com.github.plokhotnyuk.jsoniter_scala.macros._
17+
import com.github.plokhotnyuk.jsoniter_scala.core._
18+
import org.http4s.blaze.channel.SocketConnection
19+
import org.http4s.blaze.http.RouteAction._
1120

1221
import scala.concurrent.Future
1322

14-
object Main {
15-
16-
private val mapper: ObjectMapper = new ObjectMapper().registerModule(DefaultScalaModule)
17-
18-
private val plaintextResult = Future.successful {
19-
val hs = Seq("server" -> "blaze", "content-type" -> "text/plain")
20-
RouteAction.Ok("Hello, World!".getBytes(UTF_8), hs)
21-
}
23+
case class Message(message: String)
2224

23-
private def notFound(path: String) = Future.successful {
24-
RouteAction.String(s"Not found: $path", 404, "Not Found", Nil)
25-
}
25+
object Main {
26+
private val config = HttpServerStageConfig()
27+
private val fjp = new ForkJoinPool(getRuntime.availableProcessors, defaultForkJoinWorkerThreadFactory, null, true)
28+
private val jsonHeaders = Seq("server" -> "blaze", "content-type" -> "application/json")
29+
private val plaintextHeaders = Seq("server" -> "blaze", "content-type" -> "text/plain")
2630

27-
// HTTP service definition
28-
private def service(request: HttpRequest): Future[RouteAction] = request.uri match {
29-
case "/plaintext" => plaintextResult
31+
private implicit val codec: JsonValueCodec[Message] = JsonCodecMaker.make[Message](CodecMakerConfig())
3032

31-
case "/json" => Future.successful {
32-
val msg = mapper.writeValueAsBytes(Map("message" -> "Hello, World!"))
33-
RouteAction.Ok(msg, Seq("server" -> "blaze", "content-type" -> "application/json"))
33+
def serve(request: HttpRequest): Future[RouteAction] = Future.successful {
34+
request.url match {
35+
case "/plaintext" => Ok("Hello, World!".getBytes(UTF_8), plaintextHeaders)
36+
case "/json" => Ok(writeToArray(Message("Hello, World!")), jsonHeaders)
3437
}
35-
36-
case other => notFound(other)
3738
}
3839

39-
def main(args: Array[String]): Unit = {
40-
val srvc = { _: SocketConnection => service(_:HttpRequest) }
41-
val server = Http1Server(srvc, new InetSocketAddress(8080), HttpServerStageConfig())
42-
.getOrElse(sys.error("Failed to bind socket"))
40+
def connect(conn: SocketConnection): Future[LeafBuilder[ByteBuffer]] =
41+
Future.successful(LeafBuilder(new Http1ServerStage(serve, config)))
4342

44-
try server.channel.join()
45-
finally {
46-
server.group.closeGroup()
47-
}
43+
def main(args: Array[String]): Unit = {
44+
NIO2SocketServerGroup(group = Some(AsynchronousChannelGroup.withThreadPool(fjp)))
45+
.bind(new InetSocketAddress(8080), connect)
46+
.getOrElse(sys.error("Failed to start server."))
47+
.join()
4848
}
4949
}
50-

0 commit comments

Comments
 (0)