Skip to content

Commit 12ba6b9

Browse files
authored
[Scala/otavia] upgrade otavia to 0.4.2 (#9224)
* [Scala/otavia] upgrade otavia to 0.4.2 * [Scala/otavia] change randomnumber to randomNumber * [Scala/otavia] upgrade otavia to 0.4.3
1 parent 98fb99a commit 12ba6b9

13 files changed

+148
-29
lines changed
File renamed without changes.

frameworks/Scala/otavia/benchmark/src/app/controller/DBController.scala

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import cc.otavia.core.stack.helper.{FutureState, FuturesState, StartState}
99
import cc.otavia.core.stack.{AskStack, StackState, StackYield}
1010
import cc.otavia.http.server.{HttpRequest, HttpResponse}
1111
import cc.otavia.sql.Connection
12-
import cc.otavia.sql.Statement.{ModifyRows, PrepareQuery}
12+
import cc.otavia.sql.statement.{ModifyRows, PrepareQuery}
1313

1414
import java.util.SplittableRandom
1515

@@ -22,20 +22,17 @@ class DBController extends StateActor[REQ] {
2222
override protected def afterMount(): Unit = connection = autowire[Connection]()
2323

2424
override protected def resumeAsk(stack: AskStack[REQ & Ask[? <: Reply]]): StackYield =
25-
stack match
26-
case stack: AskStack[SingleQueryRequest] if stack.ask.isInstanceOf[SingleQueryRequest] =>
27-
handleSingleQuery(stack)
28-
case stack: AskStack[MultipleQueryRequest] if stack.ask.isInstanceOf[MultipleQueryRequest] =>
29-
handleMultipleQuery(stack)
30-
case stack: AskStack[UpdateRequest] if stack.ask.isInstanceOf[UpdateRequest] =>
31-
handleUpdateQuery(stack)
25+
stack.ask match
26+
case _: SingleQueryRequest => handleSingleQuery(stack.asInstanceOf[AskStack[SingleQueryRequest]])
27+
case _: MultipleQueryRequest => handleMultipleQuery(stack.asInstanceOf[AskStack[MultipleQueryRequest]])
28+
case _: UpdateRequest => handleUpdateQuery(stack.asInstanceOf[AskStack[UpdateRequest]])
3229

3330
// Test 2: Single database query
3431
private def handleSingleQuery(stack: AskStack[SingleQueryRequest]): StackYield = {
3532
stack.state match
3633
case _: StartState =>
3734
val state = FutureState[World]()
38-
connection.ask(PrepareQuery.fetchOne[World](SELECT_WORLD, Tuple1(randomWorld())), state.future)
35+
connection.ask(PrepareQuery.fetchOne[World](SELECT_WORLD, randomWorld()), state.future)
3936
stack.suspend(state)
4037
case state: FutureState[World] =>
4138
stack.`return`(state.future.getNow)
@@ -61,7 +58,7 @@ class DBController extends StateActor[REQ] {
6158
stack.attach(worlds)
6259
val newState = FutureState[ModifyRows]()
6360
val newWorlds = worlds.sortBy(_.id).map(_.copy(randomNumber = randomWorld()))
64-
connection.ask(PrepareQuery.update(UPDATE_WORLD, newWorlds), newState.future)
61+
connection.ask(PrepareQuery.updateBatch(UPDATE_WORLD, newWorlds), newState.future)
6562
stack.suspend(newState)
6663
case state: FutureState[ModifyRows] =>
6764
if (state.future.isFailed) state.future.causeUnsafe.printStackTrace()
@@ -72,7 +69,7 @@ class DBController extends StateActor[REQ] {
7269
private def selectWorlds(queries: Int): StackState = {
7370
val state = FuturesState[World](queries)
7471
for (future <- state.futures)
75-
connection.ask(PrepareQuery.fetchOne[World](SELECT_WORLD, Tuple1(randomWorld())), future)
72+
connection.ask(PrepareQuery.fetchOne[World](SELECT_WORLD, randomWorld()), future)
7673
state
7774
}
7875

frameworks/Scala/otavia/benchmark/src/app/controller/FortuneController.scala

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,20 @@ import cc.otavia.core.address.Address
77
import cc.otavia.core.stack.helper.{FutureState, StartState}
88
import cc.otavia.core.stack.{AskStack, StackState, StackYield}
99
import cc.otavia.http.server.{HttpRequest, HttpResponse}
10-
import cc.otavia.sql.Statement.PrepareQuery
10+
import cc.otavia.sql.statement.PrepareQuery
1111
import cc.otavia.sql.{Connection, RowSet}
1212

13+
import java.util
14+
import java.util.Comparator
15+
1316
class FortuneController extends StateActor[FortuneRequest] {
1417

1518
private var connection: Address[MessageOf[Connection]] = _
19+
private val tmpArray: Array[Fortune] = new Array[Fortune](13)
20+
21+
private val comparator = new Comparator[Fortune] {
22+
override def compare(o1: Fortune, o2: Fortune): Int = o1.message.compareTo(o2.message)
23+
}
1624

1725
override protected def afterMount(): Unit = connection = autowire[Connection]()
1826

@@ -24,8 +32,10 @@ class FortuneController extends StateActor[FortuneRequest] {
2432
connection.ask(PrepareQuery.fetchAll[Fortune](SELECT_FORTUNE), state.future)
2533
stack.suspend(state)
2634
case state: FutureState[RowSet[Fortune]] =>
27-
val fortunes = (state.future.getNow.rows :+ Fortune(0, "Additional fortune added at request time."))
28-
.sortBy(_.message)
35+
System.arraycopy(state.future.getNow.rows, 0, tmpArray, 0, 12)
36+
tmpArray(12) = Fortune(0, "Additional fortune added at request time.")
37+
util.Arrays.sort(tmpArray, comparator)
38+
val fortunes = tmpArray.clone()
2939
val response = HttpResponse.builder.setContent(fortunes).build()
3040
stack.`return`(response)
3141
}
@@ -34,7 +44,7 @@ class FortuneController extends StateActor[FortuneRequest] {
3444

3545
object FortuneController {
3646

37-
class FortuneRequest extends HttpRequest[Nothing, HttpResponse[Seq[Fortune]]]
47+
class FortuneRequest extends HttpRequest[Nothing, HttpResponse[Array[Fortune]]]
3848

3949
private val SELECT_FORTUNE = "SELECT id, message from FORTUNE"
4050

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

33
import cc.otavia.json.JsonSerde
4-
import cc.otavia.sql.{Row, RowDecoder}
4+
import cc.otavia.sql.{Row, RowCodec}
55

66
/** The model for the "fortune" database table. */
7-
case class Fortune(id: Int, message: String) extends Row derives RowDecoder, JsonSerde
7+
case class Fortune(id: Int, message: String) extends Row derives RowCodec, JsonSerde

frameworks/Scala/otavia/benchmark/src/app/model/World.scala

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

33
import cc.otavia.json.JsonSerde
44
import cc.otavia.serde.annotation.rename
5-
import cc.otavia.sql.{Row, RowDecoder}
5+
import cc.otavia.sql.{Row, RowCodec}
66

77
/** The model for the "world" database table. */
8-
case class World(id: Int, @rename("randomnumber") randomNumber: Int) extends Row derives RowDecoder, JsonSerde
8+
case class World(id: Int, randomNumber: Int) extends Row derives RowCodec, JsonSerde

frameworks/Scala/otavia/benchmark/src/app/util/FortunesRender.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import cc.otavia.serde.Serde
77
import java.nio.charset.StandardCharsets
88
import scala.annotation.switch
99

10-
class FortunesRender extends Serde[Seq[Fortune]] {
10+
class FortunesRender extends Serde[Array[Fortune]] {
1111

1212
private val text1 =
1313
"<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>"
@@ -27,7 +27,7 @@ class FortunesRender extends Serde[Seq[Fortune]] {
2727
private val squot = "&#39;".getBytes()
2828
private val amp = "&amp;".getBytes()
2929

30-
override def serialize(fortunes: Seq[Fortune], out: Buffer): Unit = {
30+
override def serialize(fortunes: Array[Fortune], out: Buffer): Unit = {
3131
out.writeBytes(text1)
3232
for (fortune <- fortunes) {
3333
out.writeBytes(text2)
@@ -39,7 +39,7 @@ class FortunesRender extends Serde[Seq[Fortune]] {
3939
out.writeBytes(text5)
4040
}
4141

42-
override def deserialize(in: Buffer): Seq[Fortune] = throw new UnsupportedOperationException()
42+
override def deserialize(in: Buffer): Array[Fortune] = throw new UnsupportedOperationException()
4343

4444
private def writeEscapeMessage(buffer: Buffer, message: String): Unit = {
4545
var i = 0

frameworks/Scala/otavia/benchmark_config.json

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,53 @@
2525
"notes": "",
2626
"versus": "Otavia"
2727
},
28-
"reserve": {
28+
"equalization": {
29+
"json_url": "/json",
30+
"plaintext_url": "/plaintext",
31+
"db_url": "/db",
32+
"query_url": "/queries?queries=",
33+
"fortune_url": "/fortunes",
34+
"update_url": "/updates?queries=",
35+
"port": 8080,
36+
"approach": "Realistic",
37+
"classification": "Micro",
38+
"database": "Postgres",
39+
"framework": "otavia",
40+
"language": "Scala",
41+
"flavor": "None",
42+
"orm": "Micro",
43+
"platform": "Otavia",
44+
"webserver": "None",
45+
"os": "Linux",
46+
"database_os": "Linux",
47+
"display_name": "otavia",
48+
"notes": "",
49+
"versus": "Otavia"
50+
},
51+
"equalization-offgc": {
52+
"json_url": "/json",
53+
"plaintext_url": "/plaintext",
54+
"db_url": "/db",
55+
"query_url": "/queries?queries=",
56+
"fortune_url": "/fortunes",
57+
"update_url": "/updates?queries=",
58+
"port": 8080,
59+
"approach": "Realistic",
60+
"classification": "Micro",
61+
"database": "Postgres",
62+
"framework": "otavia",
63+
"language": "Scala",
64+
"flavor": "None",
65+
"orm": "Micro",
66+
"platform": "Otavia",
67+
"webserver": "None",
68+
"os": "Linux",
69+
"database_os": "Linux",
70+
"display_name": "otavia",
71+
"notes": "",
72+
"versus": "Otavia"
73+
},
74+
"offgc": {
2975
"json_url": "/json",
3076
"plaintext_url": "/plaintext",
3177
"db_url": "/db",

frameworks/Scala/otavia/build.sc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import mill._
22
import mill.scalalib._
33

4-
def otaviaVersion = "0.4.0"
4+
def otaviaVersion = "0.4.3"
55

66
object benchmark extends ScalaModule {
77

frameworks/Scala/otavia/config.toml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ platform = "Otavia"
1818
webserver = "None"
1919
versus = "Otavia"
2020

21-
[reserve]
21+
[equalization]
2222
urls.plaintext = "/plaintext"
2323
urls.json = "/json"
2424
urls.db = "/db"
@@ -34,3 +34,37 @@ orm = "Micro"
3434
platform = "Otavia"
3535
webserver = "None"
3636
versus = "Otavia"
37+
38+
[equalization-offgc]
39+
urls.plaintext = "/plaintext"
40+
urls.json = "/json"
41+
urls.db = "/db"
42+
urls.query = "/queries?queries="
43+
urls.update = "/updates?queries="
44+
urls.fortune = "/fortunes"
45+
approach = "Realistic"
46+
classification = "Micro"
47+
database = "Postgres"
48+
database_os = "Linux"
49+
os = "Linux"
50+
orm = "Micro"
51+
platform = "Otavia"
52+
webserver = "None"
53+
versus = "Otavia"
54+
55+
[offgc]
56+
urls.plaintext = "/plaintext"
57+
urls.json = "/json"
58+
urls.db = "/db"
59+
urls.query = "/queries?queries="
60+
urls.update = "/updates?queries="
61+
urls.fortune = "/fortunes"
62+
approach = "Realistic"
63+
classification = "Micro"
64+
database = "Postgres"
65+
database_os = "Linux"
66+
os = "Linux"
67+
orm = "Micro"
68+
platform = "Otavia"
69+
webserver = "None"
70+
versus = "Otavia"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FROM nightscape/scala-mill:eclipse-temurin-17.0.8.1_1-jdk-focal_0.11.6_3.3.0
2+
WORKDIR /otavia
3+
COPY benchmark benchmark
4+
COPY build.sc build.sc
5+
ENV COURSIER_REPOSITORIES=ivy2Local|central
6+
RUN mill benchmark.assembly
7+
8+
EXPOSE 8080
9+
10+
CMD java -server \
11+
-Dcc.otavia.actor.worker.size=56 -Dcc.otavia.nio.worker.size=56 \
12+
-Dcc.otavia.system.gc.aggressive=false \
13+
-jar \
14+
out/benchmark/assembly.dest/out.jar \
15+
jdbc:postgresql://tfb-database:5432/hello_world \
16+
benchmarkdbuser benchmarkdbpass 56

0 commit comments

Comments
 (0)