Implement support for transactional voting via reference-transaction hooks
Problem to solve
The first iteration of transactions uses the pre-receive
hook which only captures a subset of write operations. This means that we must fall back to async replication regularly.
Proposal
With the new reference-transaction hook (https://gitlab.com/gitlab-org/gitlab-git/-/merge_requests/2) having been released as part of v2.28.0-rc0, we should transition from using the pre-receive hook to perform transactional voting to the new hook.
This will require support for subtransactions first, though, as the reference-transaction hook may be executed multiple times, causing multiple votes to happen.
Edited by James Ramsay (ex-GitLab)