Skip to content

Commit be13fbf

Browse files
authored
fix otavia to adhere to the json test requirement (TechEmpower#9818)
* fix otavia to adhere to the json test requirement * differentiate the display_name of different otavia variants
1 parent c29f3d9 commit be13fbf

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package app.controller
2+
3+
import app.controller.JsonController.JsonRequest
4+
import app.model.Message
5+
import cc.otavia.core.actor.StateActor
6+
import cc.otavia.http.server.{HttpRequest, HttpResponse}
7+
import cc.otavia.core.stack.{AskStack, StackYield}
8+
9+
class JsonController extends StateActor[JsonRequest] {
10+
override protected def resumeAsk(stack: AskStack[JsonRequest]): StackYield = {
11+
stack.`return`(HttpResponse.builder.setContent(Message("Hello, World!")).build())
12+
}
13+
}
14+
object JsonController {
15+
object JsonRequest extends HttpRequest[Nothing, HttpResponse[Message]]
16+
type JsonRequest = JsonRequest.type
17+
}

frameworks/Scala/otavia/benchmark/src/app/startup.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package app
22

33
import app.controller.DBController.*
44
import app.controller.FortuneController.*
5-
import app.controller.{DBController, FortuneController}
5+
import app.controller.*
66
import app.model.*
77
import app.util.FortunesRender
88
import cc.otavia.core.actor.ChannelsActor.{Bind, ChannelEstablished}
@@ -28,18 +28,20 @@ private class ServerMain(val port: Int = 8080) extends MainActor(Array.empty) {
2828

2929
override def main0(stack: NoticeStack[MainActor.Args]): StackYield = stack.state match
3030
case _: StartState =>
31+
val messageResponseSerde = HttpResponseSerde.json(summon[JsonSerde[Message]])
3132
val worldResponseSerde = HttpResponseSerde.json(summon[JsonSerde[World]])
3233
val worldsResponseSerde = HttpResponseSerde.json(JsonSerde.derived[Seq[World]])
3334
val fortunesResponseSerde = HttpResponseSerde(new FortunesRender(), MediaType.TEXT_HTML_UTF8)
3435

3536
val dbController = autowire[DBController]()
3637
val fortuneController = autowire[FortuneController]()
38+
val jsonController = autowire[JsonController]()
3739

3840
val routers = Seq(
3941
// Test 6: plaintext
4042
constant[Array[Byte]](GET, "/plaintext", "Hello, World!".getBytes(UTF_8), BytesSerde, TEXT_PLAIN_UTF8),
4143
// Test 1: JSON serialization
42-
constant[Message](GET, "/json", Message("Hello, World!"), summon[JsonSerde[Message]], APP_JSON),
44+
get("/json", jsonController, () => JsonController.JsonRequest, messageResponseSerde),
4345
// Test 2: Single database query.
4446
get("/db", dbController, () => new SingleQueryRequest(), worldResponseSerde),
4547
// Test 3: Multiple database queries
@@ -67,4 +69,5 @@ private class ServerMain(val port: Int = 8080) extends MainActor(Array.empty) {
6769
system.buildActor(() => new Connection(url, user, password), global = true, num = poolSize)
6870
system.buildActor(() => new DBController(), global = true, num = system.actorWorkerSize)
6971
system.buildActor(() => new FortuneController(), global = true, num = system.actorWorkerSize)
72+
system.buildActor(() => new JsonController(), global = true, num = system.actorWorkerSize)
7073
system.buildActor(() => new ServerMain())

frameworks/Scala/otavia/benchmark_config.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"webserver": "None",
2222
"os": "Linux",
2323
"database_os": "Linux",
24-
"display_name": "otavia",
24+
"display_name": "otavia (poolSize = 56)",
2525
"notes": "",
2626
"versus": "Otavia"
2727
},
@@ -44,7 +44,7 @@
4444
"webserver": "None",
4545
"os": "Linux",
4646
"database_os": "Linux",
47-
"display_name": "otavia",
47+
"display_name": "otavia (poolSize = 64)",
4848
"notes": "",
4949
"versus": "Otavia"
5050
}

0 commit comments

Comments
 (0)