Geo synchronization for mirrored repositories
Description
We rely on GitTagPushService
as an entry-point for Geo (#76) to dispatch notifications for the secondary nodes.
This works for almost all scenarios except for repository import and mirroring.
Import is handled by sidekick and mirroring is triggered by a sidekiq-cron recurring job. Neither have any specific webhook notification that can be triggered. They actually have. But as we recently moved away from one hook per "branch/tag" for Geo, to prevent racing condition, we must trigger the new hook here too.
Also on first import there is no hook being triggered, so nothing appears on the secondary until mirrored repository has new updates and the cron syncs it. This can means that it will take at least "cron sync time" (1h) if mirrored repository is very active.
Proposal
We can use the new proposed Webhook for Repository updates: https://gitlab.com/gitlab-org/gitlab-ce/issues/26325 and either figure out a way to emulate the required values to fill-in.
To be able to selectively expire caches, we need to know what branches changed, and understand If the change was:
- Just new commits
- Forced update
- New branches / Tags
- Branches removal / Tags removal
Another alternative is to create a different webhook event type and always expire cache when it arrives (this is not a very bad alternative, because the notification should not be too frequent).
Links / references
https://gitlab.com/gitlab-org/gitlab-ce/issues/26325 https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/952