Support NpgsqlMultiHostDataSource #3112
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Requires JasperFx/weasel#126
This is a draft for the time being to see if the design is suitable. I've tried to achieve this with the least amount of code changes possible. Docs yet to be written.
Some considerations:
NpgsqlMultiHostDataSource
registers itself in the DI container as a normal data source, so marten won't explicitly know it's a multi host source until it tries to fetch a connection from it. If marten has no defaults for multi host usage then the data source will return any connection type and potentially cause unexpected errors as it tries to write against a read replica. For this reason, I've baked in some sane fallbacks for marten & weasel.NpgsqlMultiHostDataSource
is present we won't target the replica by default, it's up to the user to weigh up the potential pitfalls of replica lag.Wolverine.Postgres
is just to get users to only supply a datasource capable of creating primary node connectionsdataSource.WithTargetSession(TargetSessionAttributes.Primary);
AutoClosingLifetime
. I'm unsure if it's practical to support the others just yet.