Elect a primary lazily when a write arrives
With #3133 (closed), failover involves updating more records than previously with sqlElector
. The first iteration is using a similar approach to the sqlElector
by re-electing primaries when there is a change in a Gitaly node's health. Now that there is a primary record for each repository rather than each virtual storage, this requires updating more rows. Eagerly re-electing a primary is wasteful as we can serve reads from up to date secondaries without a primary. Likewise, it could be that the unhealthy primary returns to a healthy state before the repository is accessed. Since we only need the primary when we are writing to the repository, we could likely re-elect a primary only when the repository is receiving a write. This should increase performance by reducing unnecessary primary updates.