Commit 47d4ede2 authored by Gabriel Mazetto's avatar Gabriel Mazetto

/refresh_wikis endpoint and workers to handle sync on secondaries

parent ffcab7e1
...@@ -54,6 +54,10 @@ class ProjectWiki ...@@ -54,6 +54,10 @@ class ProjectWiki
end end
end end
def repository_exists?
!!repository.exists?
end
def empty? def empty?
pages.empty? pages.empty?
end end
......
module Geo
class ScheduleWikiRepoUpdateService
attr_reader :projects
def initialize(projects)
@projects = projects
end
def execute
@projects.each do |project|
GeoWikiRepositoryUpdateWorker.perform_async(project['id'], project['clone_url'])
end
end
end
end
...@@ -9,13 +9,13 @@ class GeoRepositoryUpdateWorker ...@@ -9,13 +9,13 @@ class GeoRepositoryUpdateWorker
def perform(project_id, clone_url) def perform(project_id, clone_url)
@project = Project.find(project_id) @project = Project.find(project_id)
fetch_repository(@project, clone_url) fetch_repository(clone_url)
end end
private private
def fetch_repository(project, remote_url) def fetch_repository(remote_url)
project.create_repository unless project.repository_exists? @project.create_repository unless @project.repository_exists?
project.repository.fetch_geo_mirror(remote_url) @project.repository.fetch_geo_mirror(remote_url)
end end
end end
class GeoWikiRepositoryUpdateWorker
include Sidekiq::Worker
include Gitlab::ShellAdapter
sidekiq_options queue: :default
attr_accessor :project
def perform(project_id, clone_url)
@project = Project.find(project_id)
fetch_repository(clone_url)
end
private
def fetch_repository(remote_url)
# Second .wiki call returns a Gollum::Wiki, and it will always create the physical repository when not found
if @project.wiki.wiki.exist?
@project.wiki.repository.fetch_geo_mirror(remote_url)
end
end
end
...@@ -13,6 +13,16 @@ module API ...@@ -13,6 +13,16 @@ module API
required_attributes! [:projects] required_attributes! [:projects]
::Geo::ScheduleRepoUpdateService.new(params[:projects]).execute ::Geo::ScheduleRepoUpdateService.new(params[:projects]).execute
end end
# Enqueue a batch of IDs of wiki's projects to have their
# wiki repositories updated
#
# Example request:
# POST /refresh_wikis
post 'refresh_wikis' do
required_attributes! [:projects]
::Geo::ScheduleWikiRepoUpdateService.new(params[:projects]).execute
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment