-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Also bumps Akka version to 2.9.2 for native-image metadata
- Loading branch information
1 parent
1532507
commit c6586b4
Showing
17 changed files
with
422 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
...urces/META-INF/native-image/com.lightbend.akka/akka-persistence-r2dbc/reflect-config.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
[ | ||
{ | ||
"name": "akka.persistence.r2dbc.journal.R2dbcJournal", | ||
"methods": [ | ||
{ | ||
"name": "<init>", | ||
"parameterTypes": [ | ||
"com.typesafe.config.Config", | ||
"java.lang.String" | ||
] | ||
} | ||
] | ||
}, | ||
{ | ||
"name": "akka.persistence.r2dbc.query.R2dbcReadJournalProvider", | ||
"methods": [ | ||
{ | ||
"name": "<init>", | ||
"parameterTypes": [ | ||
"akka.actor.ExtendedActorSystem", | ||
"com.typesafe.config.Config", | ||
"java.lang.String" | ||
] | ||
} | ||
] | ||
}, | ||
{ | ||
"name": "akka.persistence.r2dbc.snapshot.R2dbcSnapshotStore", | ||
"methods": [ | ||
{ | ||
"name": "<init>", | ||
"parameterTypes": [ | ||
"com.typesafe.config.Config", | ||
"java.lang.String" | ||
] | ||
} | ||
] | ||
}, | ||
{ | ||
"name": "akka.persistence.r2dbc.state.R2dbcDurableStateStoreProvider", | ||
"methods": [ | ||
{ | ||
"name": "<init>", | ||
"parameterTypes": [ | ||
"akka.actor.ExtendedActorSystem", | ||
"com.typesafe.config.Config", | ||
"java.lang.String" | ||
] | ||
} | ||
] | ||
} | ||
|
||
] |
1 change: 1 addition & 0 deletions
1
core/src/main/resources/META-INF/native-image/io.netty/netty-handler/native-image.properties
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Args = --initialize-at-run-time=io.netty.handler.ssl.BouncyCastleAlpnSslUtils |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Building Native Images | ||
|
||
Building native images with Akka Persistence R2DBC is supported out of the box for the event sourced journal, snapshot store and | ||
durable state store with the following databases: | ||
|
||
* H2 (inmem and file) | ||
* Postgres | ||
|
||
Other databases can likely be used but will require figuring out and adding additional native-image metadata. | ||
|
||
For details about building native images with Akka in general, see the @extref[Akka Documentation](akka:additional/native-image.html). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
target/ | ||
|
||
.settings | ||
.project | ||
.classpath | ||
|
||
.idea | ||
*.iml | ||
|
||
.metals | ||
.bloop | ||
.bsp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
name := "native-image-tests" | ||
|
||
version := "1.0" | ||
|
||
scalaVersion := "2.13.12" | ||
|
||
resolvers += "Akka library repository".at("https://repo.akka.io/maven") | ||
|
||
lazy val akkaVersion = sys.props.getOrElse("akka.version", "2.9.2") | ||
lazy val akkaR2dbcVersion = sys.props.getOrElse("akka.r2dbc.version", "1.2.3") | ||
|
||
fork := true | ||
|
||
// GraalVM native image build | ||
enablePlugins(NativeImagePlugin) | ||
nativeImageJvm := "graalvm-community" | ||
nativeImageVersion := "21.0.2" | ||
nativeImageOptions := Seq( | ||
"--no-fallback", | ||
"--verbose", | ||
"--initialize-at-build-time=ch.qos.logback", | ||
"-Dakka.native-image.debug=true") | ||
|
||
libraryDependencies ++= Seq( | ||
"com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, | ||
"com.typesafe.akka" %% "akka-persistence-typed" % akkaVersion, | ||
"com.typesafe.akka" %% "akka-persistence-query" % akkaVersion, | ||
"com.typesafe.akka" %% "akka-slf4j" % akkaVersion, | ||
"com.typesafe.akka" %% "akka-serialization-jackson" % akkaVersion, | ||
"com.lightbend.akka" %% "akka-persistence-r2dbc" % akkaR2dbcVersion, | ||
"ch.qos.logback" % "logback-classic" % "1.2.13", | ||
// H2 | ||
"com.h2database" % "h2" % "2.2.224", | ||
"io.r2dbc" % "r2dbc-h2" % "1.0.0.RELEASE") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
sbt.version=1.9.8 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
addSbtPlugin("org.scalameta" % "sbt-native-image" % "0.3.4") |
9 changes: 9 additions & 0 deletions
9
native-image-tests/src/main/resources/application-h2-file.conf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
akka.persistence.journal.plugin = "akka.persistence.r2dbc.journal" | ||
akka.persistence.snapshot-store.plugin = "akka.persistence.r2dbc.snapshot" | ||
akka.persistence.state.plugin = "akka.persistence.r2dbc.state" | ||
|
||
akka.persistence.r2dbc.connection-factory = ${akka.persistence.r2dbc.h2} | ||
akka.persistence.r2dbc.connection-factory = { | ||
protocol = "file" | ||
database = "/tmp/test-h2-database" | ||
} |
5 changes: 5 additions & 0 deletions
5
native-image-tests/src/main/resources/application-postgres.conf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
akka.persistence.journal.plugin = "akka.persistence.r2dbc.journal" | ||
akka.persistence.snapshot-store.plugin = "akka.persistence.r2dbc.snapshot" | ||
akka.persistence.state.plugin = "akka.persistence.r2dbc.state" | ||
|
||
akka.persistence.r2dbc.connection-factory = ${akka.persistence.r2dbc.postgres} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
akka.persistence.journal.plugin = "akka.persistence.r2dbc.journal" | ||
akka.persistence.snapshot-store.plugin = "akka.persistence.r2dbc.snapshot" | ||
akka.persistence.state.plugin = "akka.persistence.r2dbc.state" | ||
|
||
akka.persistence.r2dbc.connection-factory = ${akka.persistence.r2dbc.h2} | ||
akka.persistence.r2dbc.connection-factory = { | ||
# overrides for default values from the 'akka.persistence.r2dbc.h2' config block | ||
protocol = "mem" | ||
database = "mydb" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<configuration> | ||
<appender name="STDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> | ||
<encoder> | ||
<pattern>[%date{ISO8601}] [%level] [%logger] [%X{akkaAddress}] [%marker] [%thread] - %msg%n</pattern> | ||
</encoder> | ||
</appender> | ||
|
||
<root level="INFO"> | ||
<appender-ref ref="STDOUT"/> | ||
</root> | ||
|
||
</configuration> |
84 changes: 84 additions & 0 deletions
84
native-image-tests/src/main/scala/com/lightbend/DurableStateTester.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
/* | ||
* Copyright (C) 2009-2024 Lightbend Inc. <https://www.lightbend.com> | ||
*/ | ||
package com.lightbend | ||
|
||
import akka.actor.typed.ActorRef | ||
import akka.actor.typed.Behavior | ||
import akka.actor.typed.scaladsl.Behaviors | ||
import akka.persistence.typed.PersistenceId | ||
import akka.persistence.typed.state.scaladsl.DurableStateBehavior | ||
import akka.persistence.typed.state.scaladsl.Effect | ||
import akka.serialization.jackson.JsonSerializable | ||
|
||
import scala.concurrent.duration.DurationInt | ||
|
||
object DurableStateCounter { | ||
sealed trait Command extends JsonSerializable | ||
final case class Increase(amount: Int, replyTo: ActorRef[Increased]) extends Command | ||
|
||
final case class GetState(replyTo: ActorRef[State]) extends Command | ||
|
||
final case class Increased(newValue: Int) extends JsonSerializable | ||
|
||
final case class State(value: Int) extends JsonSerializable | ||
def apply(id: String): Behavior[Command] = | ||
DurableStateBehavior[Command, State]( | ||
PersistenceId("DSCounter", id), | ||
State(0), | ||
{ | ||
case (state, Increase(amount, replyTo)) => | ||
Effect.persist(State(state.value + amount)).thenReply(replyTo)(newState => Increased(newState.value)) | ||
case (state, GetState(replyTo)) => | ||
Effect.reply(replyTo)(state) | ||
}) | ||
} | ||
|
||
object DurableStateTester { | ||
|
||
def apply(whenDone: ActorRef[String]): Behavior[AnyRef] = Behaviors.setup { context => | ||
Behaviors.withTimers { timers => | ||
timers.startSingleTimer("Timeout", 10.seconds) | ||
|
||
var durableActor = context.spawn(DurableStateCounter("one"), "DurableOne") | ||
context.watchWith(durableActor, "DurableOneStopped") | ||
|
||
def messageOrTimeout(step: String)(partial: PartialFunction[AnyRef, Behavior[AnyRef]]): Behavior[AnyRef] = { | ||
context.log.info("On {}", step) | ||
Behaviors.receiveMessage(message => | ||
partial.orElse[AnyRef, Behavior[AnyRef]] { | ||
case "Timeout" => | ||
context.log.error(s"Durable state checks timed out in {}", step) | ||
System.exit(1) | ||
Behaviors.same | ||
|
||
case other => | ||
context.log.warn("Unexpected message in {}: {}", step, other) | ||
Behaviors.same | ||
}(message)) | ||
} | ||
|
||
durableActor ! DurableStateCounter.Increase(1, context.self) | ||
|
||
def step1() = messageOrTimeout("step1") { case DurableStateCounter.Increased(1) => | ||
// write works | ||
context.stop(durableActor) | ||
step2() | ||
} | ||
|
||
def step2() = messageOrTimeout("step2") { case "DurableOneStopped" => | ||
durableActor = context.spawn(DurableStateCounter("one"), "DurableOneIncarnation2") | ||
durableActor ! DurableStateCounter.GetState(context.self) | ||
step3() | ||
} | ||
|
||
def step3() = messageOrTimeout("step3") { case DurableStateCounter.State(1) => | ||
whenDone ! "Durable State works" | ||
Behaviors.stopped | ||
} | ||
|
||
step1() | ||
} | ||
} | ||
|
||
} |
Oops, something went wrong.