akka / akka-persistence-r2dbc

https://doc.akka.io/docs/akka-persistence-r2dbc/current/index.html
Other
24 stars 17 forks source link

NullPointerException getTimestamp in sqlserver dialect #511

Open patriknw opened 8 months ago

patriknw commented 8 months ago

getTimestamp of the db_timestamp seems to retrieve null from the driver. It's a NOT NULL column. Might be a bug in r2dbc-mssql?

Noticed when running EventsBySlicePerfSpec and R2dbcJournalPerfSpec.

[2024-02-02 07:20:25,846] [ERROR] [akka.persistence.journal.JournalPerfSpec$BenchActor] [akka://JournalSpec] [] [JournalSpec-akka.actor.default-dispatcher-5] - Persistence failure when replaying events for persistenceId [p-18]. Last known sequence number [0]
java.lang.NullPointerException: Cannot invoke "java.time.LocalDateTime.atZone(java.time.ZoneId)" because "timestamp" is null
    at akka.persistence.r2dbc.internal.codec.TimestampCodec$SqlServerTimestampCodec$.toInstant(TimestampCodec.scala:45)
    at akka.persistence.r2dbc.internal.codec.TimestampCodec$SqlServerTimestampCodec$.decode(TimestampCodec.scala:47)
    at akka.persistence.r2dbc.internal.codec.TimestampCodec$TimestampCodecRichRow.getTimestamp(TimestampCodec.scala:62)
    at akka.persistence.r2dbc.internal.postgres.PostgresQueryDao.$anonfun$eventsByPersistenceId$2(PostgresQueryDao.scala:365)
    at akka.persistence.r2dbc.internal.R2dbcExecutor$.$anonfun$selectInTx$3(R2dbcExecutor.scala:95)
    at io.r2dbc.mssql.DefaultMssqlResult.lambda$map$1(DefaultMssqlResult.java:137)
    at io.r2dbc.mssql.DefaultMssqlResult.lambda$doMap$5(DefaultMssqlResult.java:220)
    at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:179)
    at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drainRegular(FluxWindowPredicate.java:670)
    at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drain(FluxWindowPredicate.java:748)
    at reactor.core.publisher.FluxWindowPredicate$WindowFlux.subscribe(FluxWindowPredicate.java:823)
    at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
    at reactor.core.publisher.Mono.subscribeWith(Mono.java:4561)
    at reactor.core.publisher.Mono.toFuture(Mono.java:5073)
    at akka.persistence.r2dbc.internal.R2dbcExecutor$PublisherOps$.asFuture$extension(R2dbcExecutor.scala:43)
    at akka.persistence.r2dbc.internal.R2dbcExecutor$.$anonfun$selectInTx$1(R2dbcExecutor.scala:97)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:470)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:64)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:101)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:101)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:49)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48)
    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)

Attached log at debug level, but also noticed without debug logging.

sqlserver-getTimestamp-null.log.zip