akka / akka-persistence-jdbc

Asynchronously writes journal and snapshot entries to configured JDBC databases so that Akka Actors can recover state
https://doc.akka.io/docs/akka-persistence-jdbc/
Other
307 stars 139 forks source link

Durable State broken after upgrading to slick 3.5.x #824

Open sebastian-alfers opened 2 months ago

sebastian-alfers commented 2 months ago

When persisting a Durable State with slick 53.5.1, the following two errors show up:

ava.lang.NoClassDefFoundError: scala/reflect/api/Trees$TreeApi
    at slick.lifted.AnyOptionExtensionMethods$.getOrElse$extension(ExtensionMethods.scala:219)
    at akka.persistence.jdbc.state.DurableStateQueries.<init>(DurableStateQueries.scala:103)
    at akka.persistence.jdbc.state.javadsl.JdbcDurableStateStore.<init>(JdbcDurableStateStore.scala:40)
    at akka.persistence.jdbc.state.JdbcDurableStateStoreProvider.javadslDurableStateStore(JdbcDurableStateStoreProvider.scala:40)
    at akka.persistence.state.DurableStateStoreRegistry$$anon$1.javaDsl(DurableStateStoreRegistry.scala:41)
    at akka.persistence.state.DurableStateStoreRegistry$$anon$1.javaDsl(DurableStateStoreRegistry.scala:39)
    at akka.persistence.PersistencePlugin$$anon$1.createExtension(PersistencePlugin.scala:61)
    at akka.persistence.PersistencePlugin$$anon$1.createExtension(PersistencePlugin.scala:58)
    at akka.actor.ActorSystemImpl.registerExtension(ActorSystem.scala:1201)
    at akka.actor.ExtensionId.apply(Extension.scala:78)
    at akka.actor.ExtensionId.apply$(Extension.scala:77)
    at akka.persistence.PersistencePlugin$$anon$1.apply(PersistencePlugin.scala:58)
    at akka.persistence.PersistencePlugin.pluginFor(PersistencePlugin.scala:56)
    at akka.persistence.state.DurableStateStoreRegistry.durableStateStoreFor(DurableStateStoreRegistry.scala:81)
    at akka.persistence.typed.state.internal.BehaviorSetup.<init>(BehaviorSetup.scala:55)
    at akka.persistence.typed.state.internal.DurableStateBehaviorImpl.$anonfun$apply$2(DurableStateBehaviorImpl.scala:115)
    at akka.actor.typed.internal.BehaviorImpl$DeferredBehavior$$anon$1.apply(BehaviorImpl.scala:119)
    at akka.actor.typed.Behavior$.start(Behavior.scala:176)
    at akka.actor.typed.internal.InterceptorImpl$$anon$1.start(InterceptorImpl.scala:50)
    at akka.actor.typed.internal.AbstractSupervisor.aroundStart(Supervision.scala:78)
    at akka.actor.typed.internal.InterceptorImpl.preStart(InterceptorImpl.scala:73)
    at akka.actor.typed.internal.InterceptorImpl$.$anonfun$apply$1(InterceptorImpl.scala:30)
    at akka.actor.typed.internal.BehaviorImpl$DeferredBehavior$$anon$1.apply(BehaviorImpl.scala:119)
    at akka.actor.typed.Behavior$.start(Behavior.scala:176)
    at akka.actor.typed.internal.adapter.ActorAdapter.preStart(ActorAdapter.scala:292)
    at akka.actor.Actor.aroundPreStart(Actor.scala:548)
    at akka.actor.Actor.aroundPreStart$(Actor.scala:548)
    at akka.actor.typed.internal.adapter.ActorAdapter.aroundPreStart(ActorAdapter.scala:267)
    at akka.actor.ActorCell.create(ActorCell.scala:643)
    at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:513)
    at akka.actor.ActorCell.systemInvoke(ActorCell.scala:535)
    at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:295)
    at akka.dispatch.Mailbox.run(Mailbox.scala:230)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.ClassNotFoundException: scala.reflect.api.Trees$TreeApi
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
    at sbt.internal.ManagedClassLoader.findClass(ManagedClassLoader.java:102)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    ... 39 common frames omitted

as well as

java.lang.IllegalArgumentException: deferred [Deferred(PersistentWorldState.scala:26-31)] should not be passed to interpreter
    at akka.actor.typed.Behavior$.interpret(Behavior.scala:267)
    at akka.actor.typed.Behavior$.interpretMessage(Behavior.scala:238)
    at akka.actor.typed.internal.adapter.ActorAdapter.handleMessage(ActorAdapter.scala:133)
    at akka.actor.typed.internal.adapter.ActorAdapter.aroundReceive(ActorAdapter.scala:109)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:579)
    at akka.actor.ActorCell.invoke(ActorCell.scala:547)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270)
    at akka.dispatch.Mailbox.run(Mailbox.scala:231)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Interesting is that it seems that javadsl is involved even though this is a scala app.

johanandren commented 2 months ago

Upstream problem in Slick: https://github.com/slick/slick/issues/2933

johanandren commented 2 months ago

A workaround is to add an explicit dependency on scala-reflect