akkadotnet / Akka.Persistence.Sql

Linq2Db implementation of Akka.Persistence.Sql. Common implementation for SQL Server, Sqlite, Postgres, Oracle, and MySql.
Apache License 2.0
11 stars 11 forks source link

Using plugin identifier other than 'sql' in Akka.Persistence.Sql.Hosting fails to start #358

Closed anpin closed 5 months ago

anpin commented 5 months ago

Version Information Akka.Persistence.Sql 1.5.13 / current dev branch

Describe the bug Setting plugin identifier to something other than default value (sql) fails to start due to hard-coded hocon paths in the library.

To Reproduce

I'm attaching a PR with adjusted tests and a fix

Expected behavior ActorSystem starts

Actual behavior

Failed: Expected a message of type Akka.Streams.TestKit.TestSubscriber+OnNext`1[Akka.Persistence.Query.EventEnvelope], but received {TestSubscriber.On...

Xunit.Sdk.TrueException
Failed: Expected a message of type Akka.Streams.TestKit.TestSubscriber+OnNext`1[Akka.Persistence.Query.EventEnvelope], but received {TestSubscriber.OnError(One or more errors occurred. (One or more errors occurred. (DataProvider '' not found.)))} (type Akka.Streams.TestKit.TestSubscriber+OnError) instead  from [akka://SqlEndToEndSpec/user/StreamSupervisor-4/Flow-0-0-unknown-operation#1836253147]
   at Akka.TestKit.Xunit2.XunitAssertions.Fail(String format, Object[] args)
   at Akka.TestKit.TestKitBase.InternalExpectMsgEnvelopeAsync[T](Nullable`1 timeout, Action`2 assert, String hint, CancellationToken cancellationToken, Boolean shouldLog)
   at Akka.TestKit.TestKitBase.InternalExpectMsgAsync[T](Nullable`1 timeout, Action`2 assert, String hint, CancellationToken cancellationToken)
   at Akka.Streams.TestKit.TestSubscriber.ManualProbe`1.ExpectNextTask[TOther](TestProbe probe, Predicate`1 predicate, CancellationToken cancellationToken)
   at Akka.Streams.TestKit.TestSubscriber.ManualProbe`1.ExpectNext[TOther](Predicate`1 predicate, CancellationToken cancellationToken)
   at Akka.Persistence.Sql.Hosting.Tests.SqlEndToEndSpec.Should_Start_ActorSystem_wth_Sql_Persistence() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql.Hosting.Tests/SqlEndToEndSpec.cs:line 89
   at Xunit.Sdk.TestInvoker`1.<>c__DisplayClass48_0.<<InvokeTestMethodAsync>b__1>d.MoveNext() in /_/src/xunit.execution/Sdk/Frameworks/Runners/TestInvoker.cs:line 276
--- End of stack trace from previous location ---
   at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func`1 asyncAction) in /_/src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs:line 48
   at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in /_/src/xunit.core/Sdk/ExceptionAggregator.cs:line 90

4/17/2024 10:29:06 AM:INF:Microsoft.Hosting.Lifetime:0 Application started. Press Ctrl+C to shut down.
4/17/2024 10:29:06 AM:INF:Microsoft.Hosting.Lifetime:0 Hosting environment: Production
4/17/2024 10:29:06 AM:INF:Microsoft.Hosting.Lifetime:0 Content root path: /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql.Hosting.Tests/bin/Debug/net8.0/
4/17/2024 10:29:07 AM:ERR:Akka.Actor.ActorSystem:0 [ERROR][04/17/2024 09:29:07.252Z][Thread 0042][LogSource (akka://SqlEndToEndSpec)] An exception occured inside SelectAsync while executing Task. Supervision strategy: Stop
Cause: System.AggregateException: One or more errors occurred. (DataProvider '' not found.)
 ---> LinqToDB.LinqToDBException: DataProvider '' not found.
   at LinqToDB.Data.DataConnection.GetDataProviderEx(String providerName, String connectionString)
   at LinqToDB.Data.DataConnection.ConfigurationApplier.Apply(DataConnection dataConnection, ConnectionOptions options)
   at LinqToDB.Data.ConnectionOptions.LinqToDB.Common.IApplicable<LinqToDB.Data.DataConnection>.Apply(DataConnection obj)
   at LinqToDB.DataOptions.Apply(DataConnection dataConnection)
   at LinqToDB.Data.DataConnection..ctor(DataOptions options)
   at Akka.Persistence.Sql.Db.AkkaPersistenceDataConnectionFactory.<>c__DisplayClass4_0.<.ctor>b__0() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Db/AkkaPersistenceDataConnectionFactory.cs:line 55
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
--- End of stack trace from previous location ---
   at System.Lazy`1.CreateValue()
   at Akka.Persistence.Sql.Db.AkkaPersistenceDataConnectionFactory.GetConnection() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Db/AkkaPersistenceDataConnectionFactory.cs:line 396
   at Akka.Persistence.Sql.Extensions.ConnectionFactoryExtensions.ExecuteWithTransactionAsync[TState,T](AkkaPersistenceDataConnectionFactory factory, TState state, IsolationLevel level, CancellationToken token, Func`4 handler) in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Extensions/ConnectionFactoryExtensions.cs:line 92
   at Akka.Persistence.Sql.Query.Dao.BaseByteReadArrayJournalDao.<>c.<<JournalSequence>b__7_0>d.MoveNext() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Query/Dao/BaseByteReadArrayJournalDao.cs:line 188
   --- End of inner exception stack trace ---
   at Akka.Actor.PipeToSupport.PipeTo[T](Task`1 taskToPipe, ICanTell recipient, Boolean useConfigureAwait, IActorRef sender, Func`2 success, Func`2 failure)
System.AggregateException One or more errors occurred. (DataProvider '' not found.)
   at Akka.Actor.PipeToSupport.PipeTo[T](Task`1 taskToPipe, ICanTell recipient, Boolean useConfigureAwait, IActorRef sender, Func`2 success, Func`2 failure)
4/17/2024 10:29:07 AM:ERR:Akka.Actor.ActorSystem:0 [ERROR][04/17/2024 09:29:07.276Z][Thread 0011][LogSource (akka://SqlEndToEndSpec)] An exception occured inside SelectAsync while executing Task. Supervision strategy: Stop
Cause: System.AggregateException: One or more errors occurred. (DataProvider '' not found.)
 ---> LinqToDB.LinqToDBException: DataProvider '' not found.
   at LinqToDB.Data.DataConnection.GetDataProviderEx(String providerName, String connectionString)
   at LinqToDB.Data.DataConnection.ConfigurationApplier.Apply(DataConnection dataConnection, ConnectionOptions options)
   at LinqToDB.Data.ConnectionOptions.LinqToDB.Common.IApplicable<LinqToDB.Data.DataConnection>.Apply(DataConnection obj)
   at LinqToDB.DataOptions.Apply(DataConnection dataConnection)
   at LinqToDB.Data.DataConnection..ctor(DataOptions options)
   at Akka.Persistence.Sql.Db.AkkaPersistenceDataConnectionFactory.<>c__DisplayClass4_0.<.ctor>b__0() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Db/AkkaPersistenceDataConnectionFactory.cs:line 55
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
--- End of stack trace from previous location ---
   at System.Lazy`1.CreateValue()
   at Akka.Persistence.Sql.Db.AkkaPersistenceDataConnectionFactory.GetConnection() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Db/AkkaPersistenceDataConnectionFactory.cs:line 396
   at Akka.Persistence.Sql.Extensions.ConnectionFactoryExtensions.ExecuteWithTransactionAsync[TState,T](AkkaPersistenceDataConnectionFactory factory, TState state, IsolationLevel level, CancellationToken token, Func`4 handler) in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Extensions/ConnectionFactoryExtensions.cs:line 92
   at Akka.Persistence.Sql.Query.Dao.BaseByteReadArrayJournalDao.ExecuteEventQueryTagTable(DbStateHolder stateHolder, QueryArgs queryArgs) in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Query/Dao/BaseByteReadArrayJournalDao.cs:line 254
   at Akka.Persistence.Sql.Query.Dao.BaseByteReadArrayJournalDao.ExecuteEventQuery(DbStateHolder stateHolder, TagMode tagMode, QueryArgs queryArgs) in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Query/Dao/BaseByteReadArrayJournalDao.cs:line 247
   at Akka.Persistence.Sql.Query.Dao.BaseByteReadArrayJournalDao.<>c.<<Events>b__10_0>d.MoveNext() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Query/Dao/BaseByteReadArrayJournalDao.cs:line 239
   --- End of inner exception stack trace ---
   at Akka.Persistence.Sql.Query.SqlReadJournal.<>c__DisplayClass25_1.<<Events>g__RetrieveNextBatch|2>d.MoveNext() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Query/SqlReadJournal.cs:line 344
System.AggregateException One or more errors occurred. (DataProvider '' not found.)
   at Akka.Persistence.Sql.Query.SqlReadJournal.<>c__DisplayClass25_1.<<Events>g__RetrieveNextBatch|2>d.MoveNext() in /home/a/projects/Akka.Persistence.Sql/src/Akka.Persistence.Sql/Query/SqlReadJournal.cs:line 344
4/17/2024 10:29:07 AM:INF:Microsoft.Hosting.Lifetime:0 Application is shutting down...

Environment nixos / dotnet 8, both sqlite and postgresql

anpin commented 5 months ago

as mentioned i the PR, I think I misunderstood the purpose of plugin identifier