ptrdom commented on PR #194:
URL:
https://github.com/apache/pekko-persistence-r2dbc/pull/194#issuecomment-2646478075
While working on the initial design I spotted few overcomplications with it,
particularly when it came to implementation of shared connection factories, so
I made a few changes to simplify:
1. Added new method to `ConnectionFactoryProvider` implementation that
accepts config.
You can now both supply full path to conneciton factory config and config
in which this path should be looked up. If the supplied config is missing this
path, then it will be looked up in `ActorSystem`'s config. What persistence
plugins now do is pass the config that is passed to them at runtime to this new
method.
This allows configuration of all expected scenarios - startup-time and
runtime config for both shared and non-shared connection factories. Connection
factories remain shared by default as they were before. Full path remains the
ID of connection factory for sharing purposes.
This is very similar to how persistence plugin config is already
implemented, so should feel familiar to users.
1. Plugin config uses `use-connection-factory` config key instead of direct
plugin configuration.
This is how projection module already does it on its side, and it
actually works really nicely for all use cases - if you want to share the
connection factory, then just put it on the same path that all plugins can use,
if you want to use unique connection factories, then you just need to put the
config on an unique path. With an implementation like this there is no need for
special purpose config keys - like the ones that JDBC plugin uses.
With these changes the other TODOs could be done in their own tickets:
1. Shared settings are now provided through inheritance:
https://github.com/apache/pekko-persistence-r2dbc/blob/b28968057679e621591ac9bc21bab0daba13eebb/core/src/main/resources/reference.conf#L4-L8
Ideally the break up of shared settings would still be done, but it does
not seem as critical.
1. Projection module remains compatible with core module changes done in
this PR, but it **is not** compatible with runtime persistence plugin config
feature.
Even though `use-connection-factory` can be set at runtime, projection
using it becomes sensitive to initialization order, because projection cannot
see runtime config that is provided to the persistence plugin, so if the
projection runs before the plugin is initialized, it will fail. I feel that
users should not be expected to be careful of that. Also, if persistence plugin
and projection are running in separate `ActorSystem`s, then even the tight
control of the initialization order will not make the projection work.
This will be addressed in a separate PR.
I will look though the PR again for any things that were potentially missed,
clean it up and mark as ready for review.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]