Commit 754a8502 authored by Gabriel Mazetto's avatar Gabriel Mazetto

Enable recheck, resync and forced redownload

parent c3ed82b5
......@@ -138,6 +138,11 @@ namespace :admin do
end
collection do
get :projects
scope(path: 'projects/:id') do
post :recheck_project, action: :recheck
post :resync_project, action: :resync
post :force_redownload_project, action: :force_redownload
end
end
end
......
......@@ -15,6 +15,7 @@ class Admin::GeoNodesController < Admin::ApplicationController
def projects
finder = Geo::ProjectRegistryStatusFinder.new
case params[:sync_status]
when 'never'
@projects = finder.never_synced_projects.page(params[:page])
......@@ -25,8 +26,30 @@ class Admin::GeoNodesController < Admin::ApplicationController
else
@registries = finder.synced_projects.page(params[:page])
end
end
def recheck
@registry = Geo::ProjectRegistry.find_by_id(params[:id])
@registry.flag_repository_for_recheck
flash[:notice] = "#{@registry.project.full_name} is scheduled for recheck"
redirect_to projects_admin_geo_nodes_path
end
def resync
@registry = Geo::ProjectRegistry.find_by_id(params[:id])
@registry.flag_repository_for_resync
flash[:notice] = "#{@registry.project.full_name} is scheduled for resync"
redirect_to projects_admin_geo_nodes_path
end
def force_redownload
@registry = Geo::ProjectRegistry.find_by_id(params[:id])
@registry.flag_repository_for_redownload
flash[:notice] = "#{@registry.project.full_name} is scheduled for forced redownload"
# Gitlab::Geo.current_node.projects.includes(:project_registry).page(params[:page])
redirect_to projects_admin_geo_nodes_path
end
def create
......
......@@ -201,6 +201,21 @@ class Geo::ProjectRegistry < Geo::BaseRegistry
public_send("#{type}_verification_retry_count").to_i # rubocop:disable GitlabSecurity/PublicSend
end
# Flag the repository to be rechecked
def flag_repository_for_recheck
self.update(repository_verification_checksum_sha: nil)
end
# Flag the repository to be resynced
def flag_repository_for_resync
self.update(resync_repository: true)
end
# Flag the repository to perform a full redownload
def flag_repository_for_redownload
self.update(resync_repository: true, force_to_redownload_repository: true)
end
private
def fetches_since_gc_redis_key
......
......@@ -7,8 +7,9 @@
= sprite_icon('chevron-up', size: 18, css_class: 'card-collapse-icon')
%strong.header-text
= project_registry.project.name
%button.btn.btn-outline-primary.btn-sm{ type: 'button' }
Resync
= link_to(resync_project_admin_geo_nodes_path(project_registry), method: :post) do
%button.btn.btn-outline-primary.btn-sm{ type: 'button' }
Resync
.collapse.show{id: "project-#{project_registry.project.id}", 'aria-labelledby' => "project-#{project_registry.project.id}-header" }
.card-body
......
......@@ -9,6 +9,10 @@ module EE
'admin/geo_nodes' => %w{update}
}.freeze
WHITELISTED_GEO_ROUTES_TRACKING_DB = {
'admin/geo_nodes' => %w{resync recheck force_redownload}
}.freeze
private
override :whitelisted_routes
......@@ -20,8 +24,14 @@ module EE
# Calling route_hash may be expensive. Only do it if we think there's a possible match
return false unless request.path =~ %r{/admin/geo_nodes}
::Gitlab::Database.db_read_write? &&
WHITELISTED_GEO_ROUTES[route_hash[:controller]]&.include?(route_hash[:action])
controller = route_hash[:controller]
action = route_hash[:action]
if WHITELISTED_GEO_ROUTES[controller]&.include?(action)
return ::Gitlab::Database.db_read_write?
end
WHITELISTED_GEO_ROUTES_TRACKING_DB[controller]&.include?(action)
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