diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2018-11-28 18:19:11 +0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2018-11-28 18:19:11 +0300 |
commit | 1c9692803dbcbab409f385d39afc253c4fcbec11 (patch) | |
tree | dc1548133513638861710481556a25e74bb6baa0 | |
parent | d7ce1b1d8c3cd986725f71fb1d69424190afac27 (diff) | |
parent | 0a2f474e3abb648d23228686e5883e4783200f19 (diff) |
Merge branch '7960-geo-address-the-update-delete-race' into 'master'
Geo: Synchronize repository and registry removal
Closes #7960
See merge request gitlab-org/gitlab-ee!8480
5 files changed, 32 insertions, 12 deletions
diff --git a/ee/app/services/geo/repository_destroy_service.rb b/ee/app/services/geo/repository_destroy_service.rb index 89e354544ed..b4059a40632 100644 --- a/ee/app/services/geo/repository_destroy_service.rb +++ b/ee/app/services/geo/repository_destroy_service.rb @@ -1,5 +1,7 @@ module Geo class RepositoryDestroyService + include ::Gitlab::Geo::LogHelpers + attr_reader :id, :name, :disk_path, :repository_storage def initialize(id, name, disk_path, repository_storage) @@ -14,11 +16,24 @@ module Geo end def execute - ::Projects::DestroyService.new(deleted_project, nil).geo_replicate + destroy_project + delete_project_registry_entries end private + def destroy_project + ::Projects::DestroyService.new(deleted_project, nil).geo_replicate + end + + # rubocop: disable CodeReuse/ActiveRecord + def delete_project_registry_entries + ::Geo::ProjectRegistry.where(project_id: id).delete_all + + log_info("Project registry entry removed", project_id: id) + end + # rubocop: enable CodeReuse/ActiveRecord + def deleted_project # We don't have access to the original model anymore, so we are # rebuilding only what our service class requires diff --git a/ee/changelogs/unreleased/7960-geo-address-the-update-delete-race.yml b/ee/changelogs/unreleased/7960-geo-address-the-update-delete-race.yml new file mode 100644 index 00000000000..f5e58825bc2 --- /dev/null +++ b/ee/changelogs/unreleased/7960-geo-address-the-update-delete-race.yml @@ -0,0 +1,6 @@ +--- +title: 'Geo: Moving registry deletion into the job that deletes the files and project + record' +merge_request: 8480 +author: +type: fixed diff --git a/ee/lib/gitlab/geo/log_cursor/events/repository_deleted_event.rb b/ee/lib/gitlab/geo/log_cursor/events/repository_deleted_event.rb index 3560a5c9338..14b014dff83 100644 --- a/ee/lib/gitlab/geo/log_cursor/events/repository_deleted_event.rb +++ b/ee/lib/gitlab/geo/log_cursor/events/repository_deleted_event.rb @@ -10,7 +10,6 @@ module Gitlab unless skippable? job_id = destroy_repository - delete_project_registry_entries end log_event(job_id) @@ -28,12 +27,6 @@ module Gitlab ).async_execute end - # rubocop: disable CodeReuse/ActiveRecord - def delete_project_registry_entries - ::Geo::ProjectRegistry.where(project_id: event.project_id).delete_all - end - # rubocop: enable CodeReuse/ActiveRecord - def log_event(job_id) logger.event_info( created_at, diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb index 24e564e12d7..e9df8cfeca3 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb @@ -32,10 +32,6 @@ describe Gitlab::Geo::LogCursor::Events::RepositoryDeletedEvent, :postgresql, :c context 'when a tracking entry exists' do let!(:tracking_entry) { create(:geo_project_registry, project: project) } - it 'removes the tracking entry' do - expect { subject.process }.to change(Geo::ProjectRegistry, :count).by(-1) - end - context 'when selective sync is enabled' do let(:secondary) { create(:geo_node, selective_sync_type: 'namespaces', namespaces: [project.namespace]) } @@ -47,6 +43,10 @@ describe Gitlab::Geo::LogCursor::Events::RepositoryDeletedEvent, :postgresql, :c subject.process end + + it 'does not remove the tracking entry' do + expect { subject.process }.not_to change(Geo::ProjectRegistry, :count) + end end end end diff --git a/ee/spec/services/geo/repository_destroy_service_spec.rb b/ee/spec/services/geo/repository_destroy_service_spec.rb index 965e8569f58..e29fd272b17 100644 --- a/ee/spec/services/geo/repository_destroy_service_spec.rb +++ b/ee/spec/services/geo/repository_destroy_service_spec.rb @@ -27,6 +27,12 @@ describe Geo::RepositoryDestroyService do service.execute end + it 'removes the tracking entry' do + create(:geo_project_registry, project: project) + + expect { service.execute }.to change(Geo::ProjectRegistry, :count).by(-1) + end + context 'legacy storage project' do let(:project) { create(:project_empty_repo, :legacy_storage) } |