Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lock based leadership #606

Merged
merged 12 commits into from
Dec 30, 2021
Merged

Lock based leadership #606

merged 12 commits into from
Dec 30, 2021

Conversation

sorentwo
Copy link
Member

Introduce a centralized leadership mechanism based on a single shared connection for simple queries and notifications.

This is largely functional, but still missing some error handling from the Postgrex.Notifications overhaul, as well as some robustness to prevent the supervisor from crashing.

Depends on elixir-ecto/postgrex#586

/cc @josevalim

@sorentwo sorentwo force-pushed the feature/lock-based-leadership branch 4 times, most recently from 4c17fc3 to 6f89e98 Compare December 29, 2021 21:57
An in-progress notifications update allows injecting a callback module
into `Postgrex.Notifications`. The callback can handle listeners and
notifications however the application requires, and more importantly,
it allows running arbitrary queries.

By switching to our own notification implementation we get control over
relaying messgaes to subscribers (rather than proxying them all through
the connection) and keep a persistent connection for leadership
elections.
The last remaining circuit breaker was used in the Postgres notifier,
which no longer manages its own connection. Instead, the persistent
connection manages auto reconnection by itself and between the
`Connection.connected?` and `Senator.leader?` callbacks, plugins or
other connection sensitve code can tailor behavior.
@sorentwo sorentwo force-pushed the feature/lock-based-leadership branch from 6f89e98 to 11de1e8 Compare December 30, 2021 13:45
@sorentwo sorentwo changed the title [WIP] Lock based leadership Lock based leadership Dec 30, 2021
@sorentwo sorentwo marked this pull request as ready for review December 30, 2021 13:46
@sorentwo sorentwo merged commit 5f7d7db into main Dec 30, 2021
@sorentwo sorentwo deleted the feature/lock-based-leadership branch December 30, 2021 13:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant