Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2018-11-28 18:19:11 +0300
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2018-11-28 18:19:11 +0300
commit1c9692803dbcbab409f385d39afc253c4fcbec11 (patch)
treedc1548133513638861710481556a25e74bb6baa0
parentd7ce1b1d8c3cd986725f71fb1d69424190afac27 (diff)
parent0a2f474e3abb648d23228686e5883e4783200f19 (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
-rw-r--r--ee/app/services/geo/repository_destroy_service.rb17
-rw-r--r--ee/changelogs/unreleased/7960-geo-address-the-update-delete-race.yml6
-rw-r--r--ee/lib/gitlab/geo/log_cursor/events/repository_deleted_event.rb7
-rw-r--r--ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb8
-rw-r--r--ee/spec/services/geo/repository_destroy_service_spec.rb6
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) }