fix: ReplicationConnection init timeout #1430
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.
What kind of change does this PR introduce?
Add a GenServer wrapper that we can control a timeout to initialise.
What is the current behavior?
We think that
Postgrex.ReplicationConnection
withsync_connect: true
can block indefinitely.Here is one of the partitioned supervisors blocking on
Postgrex.ReplicationConnection.start_link
:realtime/lib/realtime/tenants/replication_connection.ex
Line 124 in 44c0543
This supervisor was stuck for a very long time.
Notice that
Realtime.Tenants.ReplicationConnection.init/1
does not do any lengthy work that could blockPostgrex.ReplicationConnection.init/1
realtime/lib/realtime/tenants/replication_connection.ex
Lines 133 to 147 in 44c0543
The ideal solution here would be to change Postgrex.ReplicationConnection.start_link to accept a new timeout option for the
init
step https://github.com/elixir-ecto/postgrex/blob/257daa773a7558d574df3aa3b558664275787ff8/lib/postgrex/replication_connection.ex#L356-L366What is the new behavior?
It can't block because the GenServer wrapper will eventually timeout on
init
causing them to stopAdditional context
Add any other context or screenshots.